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


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

Теги:


Спасибо:




18 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 10.10.2011
Ответить


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


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

Dottz

Фотография
Дата: 10.10.2011
Ответить


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 10.10.2011
Ответить


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

Dottz

Фотография
Дата: 11.10.2011
Ответить


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

Dottz

Фотография
Дата: 11.10.2011
Ответить


Подписался на событие появления новых заявок не из стратегии, а через 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
Автор топика
Спасибо:

lshaton

Фотография
Программист
Дата: 11.10.2011
Ответить


Может просто _trader.OrdersTable.Columns.Add(DdeOrderColumns.Comment);
и потом
TargetOrder =new Order
{
Security = _contact,
Direction = OrderDirections.Sell,
Price = _contact.MinPrice,
Volume = 1,
Portfolio = _portfolio,
comment = Mycomment,
};
не проверял, но может сгодится..
Спасибо:

Alexander

Фотография
Дата: 11.10.2011
Ответить


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 на фортсе не нужен, по идее он автоматом прописывается в комментарий
Спасибо:

Dottz

Фотография
Дата: 11.10.2011
Ответить


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

Alexander

Фотография
Дата: 11.10.2011
Ответить


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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.10.2011
Ответить


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


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

Dottz

Фотография
Дата: 12.10.2011
Ответить


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


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


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

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

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


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

Dottz

Фотография
Дата: 12.10.2011
Ответить


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.10.2011
Ответить


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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.10.2011
Ответить


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


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

Alexander

Фотография
Дата: 12.10.2011
Ответить


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

Dottz

Фотография
Дата: 12.10.2011
Ответить


Код

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

Фотография
Автор статей Программист Трейдер
Дата: 12.10.2011
Ответить


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

Dottz

Фотография
Дата: 14.10.2011
Ответить


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy