← Back

Как отследить заявку, выставленную по стопу?

Вопрос заключается в следующем: Я выставляю из стратегии стоп-заявку, она регистрируется в Strategy.StopOrders. А заявка, которая выставляется при исполнении стопа, она где-нибудь фиксируется в стратегии? На Strategy.NewOrder не реагирует, на Strategy.base.Trader.NewOrders тоже не приходит ордер, который регистрируется по стопу. Как его извлечь-то где-нибудь, точнее отследить момент его регистрации? А то бывает заявка по стопу повисает и надо следить, чтобы она глубоко в стакане не утонула.

Comments (18)

Login or Create account, Log in or register to leave a comment

Mikhail Sukhov
Mikhail Sukhov

Dottz: На Strategy.NewOrder не реагирует, на Strategy.base.Trader.NewOrders тоже не приходит ордер, который регистрируется по стопу.

Значит где-то ошибка. ProcessDataError что-нибудь выводит? Verifier все ок говорит? Версия S#?

Dottz
Dottz Author

Версия 4.0.1 verifier Я не использую ММВБ и таблицу портфель по бумагам, ибо имею дело с ФОРТС. И опционы вроде тоже тут ни при чем, т.к. мною не используются. ProcessDataError ничего не выводит.

Mikhail Sukhov
Mikhail Sukhov

Если из примера Sample выставить стоп, то заявка появляется?

Dottz
Dottz Author

Так сам стоп-то выставляется , событие прихода стоп-ордера тоже срабатывает. Но вот заявка регистрируемая по стопу не приходит. В примере Sample в таблице "Заявки" заявка, регистрируемая по стопу вроде выводится, но она же не из стратегии выставляется...

Dottz
Dottz Author

Подписался на событие появления новых заявок не из стратегии, а через Trader.NewOrders -> Заявка по стопу приходит. Другое наблюдение : не присваиваются комментарии. Добавляю комментарий след. образом:


 string comment = "[SL]";
 slOrder.Comment = comment;
 slOrder.ExtensionInfo = new Dictionary<Object, Object>();
 slOrder.ExtensionInfo.Add(DdeOrderColumns.ClientCode, comment);

В версии 3.2 данный метод работал без проблем. Комментарий добавляется к ордеру, отсылается в квик, но в квик уже приходит без комментария(нет ни order.Comment ни ClientCode). Версия квика 5.24.058

Alexander
Alexander

Dottz: Подписался на событие появления новых заявок не из стратегии, а через Trader.NewOrders -> Заявка по стопу приходит. Другое наблюдение : не присваиваются комментарии. Добавляю комментарий след. образом:

string comment = "[SL]"; slOrder.Comment = comment; slOrder.ExtensionInfo = new Dictionary<Object, Object>(); slOrder.ExtensionInfo.Add(DdeOrderColumns.ClientCode, comment);

> В версии 3.2 данный метод работал без проблем. Комментарий добавляется к ордеру, отсылается в квик, но в квик уже приходит без комментария(нет ни order.Comment ни ClientCode). Версия квика 5.24.058

Фортс? что в комментарии в квике отражается?
ClientCode на фортсе не нужен, по идее он автоматом прописывается в комментарий
Mikhail Sukhov
Mikhail Sukhov

Dottz: Подписался на событие появления новых заявок не из стратегии, а через Trader.NewOrders -> Заявка по стопу приходит.

А первоначально вы писали обратное.

Dottz
Dottz Author

Mikhail Sukhov:

Dottz: Подписался на событие появления новых заявок не из стратегии, а через Trader.NewOrders -> Заявка по стопу приходит.

А первоначально вы писали обратное.

Так если подписаться просто на событие у Trader, то приходит , а если на Trader у Strategy , то нет.

Вот чего нашёл на форуме квика. Буду думать. Можно сделать через код клиента, с "//" по умолчанию, чтоб точно поддерживалось. Тогда в некоторых случаях в комментарий будет попадать "/" (если настройки сервера такие). Как это обойти - у меня идей нет.

В любом случае в комментарии в квике будет код клиента + комментарий. и суммарное ограничение - 20 символов

Так буквально вот недавно работало, что принципиально изменилось-то ума не приложу.

Mikhail Sukhov
Mikhail Sukhov

Dottz: Так если подписаться просто на событие у Trader, то приходит , а если на Trader у Strategy , то нет.

Это один и тот же объект. Или у вас несколько подключений?

lshaton
lshaton

Может просто _trader.OrdersTable.Columns.Add(DdeOrderColumns.Comment); и потом TargetOrder =new Order ; не проверял, но может сгодится..

Dottz
Dottz Author

фортс, да. В комментарии отображается номер счета SPBFUTXXX

Alexander
Alexander

Dottz: фортс, да. В комментарии отображается номер счета SPBFUTXXX

Вот чего нашёл на форуме квика. Буду думать. Можно сделать через код клиента, с "//" по умолчанию, чтоб точно поддерживалось. Тогда в некоторых случаях в комментарий будет попадать "/" (если настройки сервера такие). Как это обойти - у меня идей нет.

В любом случае в комментарии в квике будет код клиента + комментарий. и суммарное ограничение - 20 символов

Dottz
Dottz Author

Провел еще один эксперимент: работающего бота, написанного на 3.2, который выставляет нормально комментарии, перевел на 4.0.2, обновив референсы. Итог: комментарии не выставляются.

зы. Я бы впринципе откатился до 3.2, но очень уж хочется юзать Strategy...

Mikhail Sukhov
Mikhail Sukhov

Dottz: зы. Я бы впринципе откатился до 3.2, но очень уж хочется юзать Strategy...

3.2 - это бета версия 4.0. Strategy есть аж с 2.0 (или даже раньше). Вы можете прислать минимальный код, где возможно отследить вашу ситуацию? Пока что даже трудно понять, что не работает из-за того, что ваши сообщения противоречат друг другу. Или вы что-то недоговариваете.

Alexander
Alexander

Ну правильно, код клиента для ММВБ обновили, теперь не проставляется что-то. Посмотрю, попробую фикс на codeplex положить.

Dottz
Dottz Author

public class TradingStrategy : Strategy
{
protected override void OnStarting()
        {
            this
                .When(base.Security.MarketDepthChanged()) 
                .Do(HighLightButts);
            this
                .When(AdditionalRules.BigButtAppeared(this))
                .Do(SendStopLimit);
            this
                .When(AdditionalRules.BigButtDisappeared(this)) 
                .Do(CancelStopLimits);
            
            base.OnStarting();
                        
            this.NewStopOrder += StrategyNewStopOrder;

            base.Trader.NewOrders += TraderNewOrders;
                        
        }

public void TraderNewOrders(IEnumerable<Order> orders)
        {
            foreach (Order order in orders)
            {
                if ((order.Comment.IndexOf("[DF]Open")!=-1)&&(order.Type!=OrderTypes.Conditional)) //новый ордер,по исполненному стопу
                {
                    _isOrderActive = true;
                }
            }
        }
}



Подключение одно, стратегия запускается по нажатию на кнопку, где вызывается метод


public void TryCreateStrategy()
        {
            if (_Instrument != null & ExtendedGlassWindow.Instance.Quotes!=null)
            {
                _strategy = new TradingStrategy()
                {
                    Volume = Convert.ToDecimal(this.SizeBox.Text),
                    Security = _Instrument,
                    Portfolio = _Portfolio,
                    Trader = Trader,
                };
                if (_strategy.ProcessState == (StockSharp.Algo.Strategies.ProcessStates.Stopped)) _strategy.Start();
            }
        }

Если подписаться при коннекте к квику таким образом, то ордер приходит. 
this.Trader = new QuikTrader(this.Path.Text);
this.Trader.NewOrders += TraderNewOrders;
this.Trader.OrdersChanged += _OrdersChanged;
this.Trader.Connect();
StartDde();

Могу даже исходники прислать.

Mikhail Sukhov
Mikhail Sukhov

В коде не увидел самого главного, о чем идет речь - получение заявок от стратегии.

Dottz
Dottz Author

Пардон, от стратегии получаю через this.NewOrder += OnNewOrder;