Сработавшая стоп заявка не изменяет, Position стратегии.

Сработавшая стоп заявка не изменяет, Position стратегии.
Atom
6/27/2014
chulman


StockSharp_4.2.3.7_Sources

  1. Создаю Ордер и подписываюсь на его событие WhenNewTrades

  var order = this.BuyAtLimit(pLevel + this.Security.PriceStep); //открываем лонг
                    order
                        .WhenNewTrades()
                        .Do(ProcessOrder)
                        .Apply(this);

                    this.RegisterOrder(order);


далее создаю связанную стоп заявку,


private void ProcessOrder(IEnumerable<MyTrade> trades)
        {
          
            var t = trades.FirstOrDefault();
            var BuyDir = t.Order.Direction == Sides.Buy;
                var orStopOrder = new Order
                {
                    Type = OrderTypes.Conditional,
                    Volume = t.Trade.Volume,
                    Price = BuyDir ? (t.Order.Price - 350) : (t.Order.Price + 350),  //цена исполнения стопа
                    Portfolio = Portfolio,
                    Security = Security,
                    Direction = BuyDir ? Sides.Sell : Sides.Buy,
                    Comment = "Placed by TradingTrainer",
                    ExpiryDate = DateTime.MaxValue,
                    Condition = new QuikOrderCondition()
                    {
                        Type = QuikOrderConditionTypes.LinkedOrder,
                        LinkedOrderPrice = BuyDir ? (t.Order.Price + 300) : (t.Order.Price - 300), //лимит
                        LinkedOrderCancel = false,
                        StopPrice = BuyDir ? (t.Order.Price - 150) : (t.Order.Price + 150),      //стоп цена
                        ActiveTime = null,
                    },
                };
            
                this.RegisterOrder(orStopOrder);

        }

Значит, стопы ставятся прекрасно, но при срабатывании стопа Position стратегии не изменяется. Получается что фактически позиции нет, а Position == осталось тем же.


Tags:


Thanks:


devruss

Avatar
Date: 6/27/2014
Reply


Position обновляется очень медленно в некоторых случаях, там есть глюк с ощутимой задержкой после срабатывания ордера. Мне с этим было лень разбираться, так как намного проще и надежнее реализовать подсчет позиции внутри стратегии самому.

Thanks: chulman

chulman

Avatar
Date: 6/27/2014
Reply


devruss: Position обновляется очень медленно в некоторых случаях, там есть глюк с ощутимой задержкой после срабатывания ордера. Мне с этим было лень разбираться, так как намного проще и надежнее реализовать подсчет позиции внутри стратегии самому.

Я думаю проблема в другом, на финише свечи я пишу значение Position в текстовый файл и смотрю его, типа отладка такая, таймфрейм не меньше минуты, да даже 10 минут я пробовал, все равно по срабатыванию стопа Position не меняется. Т.е через 10 минут после активации стопа все так же остается.

Я в стоп заявку даже такое пытался вкорячить.

orStopOrder .WhenNewTrades() .Do(ProcessPosition) .Apply(this);

и потом ручками отнять

private void ProcessPosition(IEnumerable<MyTrade> trades) { var t = trades.FirstOrDefault(); Position = Position - t.Trade.Volume; }

но отладчик не заходит в ProcessPosition

только что пробовал так,

orStopOrder .WhenMatched() .Do(() => { Position = Position - orStopOrder.Volume; }) .Apply(this);

Position зараза не меняется.

Thanks:

Mikhail Sukhov

Avatar
Date: 6/27/2014
Reply


Было недавно про стоп заявки и был фикс. Смотрите в релиз нотес.

Thanks: chulman

chulman

Avatar
Date: 6/27/2014
Reply


Михаил Сухов: Было недавно про стоп заявки и был фикс. Смотрите в релиз нотес.

Скачал новую сборку поменял все dll в references которые начинаются с StockSharp и Ecng, сделал ребилд проекта , все осталось по прежнему ((

Ребят помогите пож-та, я уже все попробовал, не получается никак. Хоть куда нибудь ткните, чтоб я пошел читать или смотреть.

Thanks:

chulman

Avatar
Date: 6/27/2014
Reply


Сделал так, решил считать вручную позицию, подписался на событие новый трейдов.


 protected override void OnStarted()
        {

            _series = this.GetCandleManager().GetSeries<CandleFoot>(this.Security, 10);
            _series
                .WhenCandlesFinished()
                .Do(ProcessCandle)
                .Apply(this);

            this.WhenNewMyTrades()
                .Do(ProcessPosition)
                .Apply(this);
         
            Pos = 0;
            base.OnStarted();
        }


 private void ProcessPosition(IEnumerable<MyTrade> trades)
        {
            
            var t = trades.FirstOrDefault();
            var buyDir = t.Order.Direction == Sides.Buy;
            if (buyDir)
            {
                Pos = Pos + t.Trade.Volume;
            }
            else
            {
                Pos = Pos - t.Trade.Volume;
            }
            string text = "";
            text = text + "позиция " + Pos.ToString();
            System.IO.File.WriteAllText(@"f:\footText.txt", text);
        }

итог следующий , WhenNewMyTrades не вызывается при срабатывании стоп заявки, файл не переписывается. Даже если тут есть логические ошибки, в файл должно что то записаться, но время файла остается временем основного ордера, при котором выставляется стоп заявка.

Thanks:

Валентин Лебедев

Avatar
Date: 6/28/2014
Reply


Попробуй что-нибудь из этого:

  1. Order.WhenActivated - правило на событие активации стоп-заявки.
  2. Использовать StopLossStrategy.
  3. Организовать стоп-лосс собственноручно с помощью Security.WhenNewTrades и маркет ордеров.
Thanks: chulman

chulman

Avatar
Date: 6/28/2014
Reply


viosee: Попробуй что-нибудь из этого:

  1. Order.WhenActivated - правило на событие активации стоп-заявки.
  2. Использовать StopLossStrategy.
  3. Организовать стоп-лосс собственноручно с помощью Security.WhenNewTrades и маркет ордеров.

спасибо, тоже подумал о этом.

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy