Здравствуйте. Помогите, пожалуйста, рассеять недоумение (документацию читал, ответа не нашел).
Есть сделка - фьючерс на Сбер, продажа по цене 9384. На этот трейд ставится StopLossStrategy с абсолютной ценой 9386. И садимся наблюдать за логами и графиками.
Код:
Code
MarketQuotingStrategy seller = new MarketQuotingStrategy(OrderDirections.Sell, Math.Min(base.Volume, m_depth.BestBid.Volume))
{
PriceType = MarketPriceTypes.Opposite
};
seller.NewMyTrades += (IEnumerable<MyTrade> trades) =>
{
foreach(MyTrade t in trades)
{
decimal stop = t.Trade.Price + 2;
StopLossStrategy sl = new StopLossStrategy(t, new Unit(stop, UnitTypes.Limit)); // Указываем значение цены стопа, а не отступ
base.ChildStrategies.Add(sl);
}
};
base.ChildStrategies.Add(seller);
Трейдер - эмулятор Квика.
Code
m_trader = new RealTimeEmulationTrader<GuiTrader<QuikTrader>>(new QuikTrader().GuiSyncTrader());
1. Во время жизни позиции было несколько сделок по цене 9386.
Стоп не сработал. Стратегия начала работу только после сделки по цене 9387. С моей точки зрения это неправильно -
стоп должен срабатывать при сделке по заданной цене, а не по цене выше.
2. После срабатывания стопа, SL стратегия выставила ордер Buy по цене 9386. То есть по цене бида. Это уже совсем неправильно. Потому что дальше цена пошла вверх, и ордер висел до тех пор, пока цена не откатилась назад до 9386. А если бы не откатилась?
SL стратегия должна была выставить приказ по аску, чтобы немедленно закрыть позицию, и в дальнейшем (если не все закрылось) - передвигать ордер по аскам выше, до закрытия позиции.
Вот лог:
Code
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.587 | | Стратегия запущена.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.603 | | Котирование на Sell объема 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.618 | | Приостановка правил. _rulesSuspendCount 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.650 | | Возобновление правил. _rulesSuspendCount 0.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.665 | | Цена текущей NULL и лучшей 9384.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.665 | | Лучший бид 9384 и лучший аск 9386.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.681 | | Регистрация новой заявки на Sell с ценой 9384 и объемом 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.712 | | Заявка 76852280 на Sell отправлена с ценой 9384 объемом 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.712 | Внимание | Заявка 76852280 в процессе регистрации.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.728 | | Заявка 76852280 принята биржей.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.759 | | Новая Sell сделка 1 по цене 9384 на 1 заявки 76852280.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.774 | | Прибыль 0
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.774 | | Новая Sell сделка 1 по цене 9384 на 1 заявки 76852280.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.790 | Внимание | Добавляем SL для сделки на ПРОДАЖУ по 9384 на уровне 9386
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.806 | | Стратегия запущена.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.852 | | Защита сделки 1 заявки 76852280.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.852 | | Котирование на Buy объема 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.884 | | Приостановка правил. _rulesSuspendCount 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.884 | | Возобновление правил. _rulesSuspendCount 0.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.899 | | Новая позиция -1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.915 | | Заявка 76852280 полностью исполнилась. Оставшийся объем 0.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.930 | | Заканчиваем котирование.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.946 | | Стратегия останавливается.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.962 | | Ожидание снятия всех активных заявок.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.977 | | Нет активных или ожидаемых заявок на вход.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.993 | | Стратегия остановлена.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 | | Защита активирована.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 | | Цена текущей NULL и лучшей 9386.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 | | Лучший бид 9386 и лучший аск 9387.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 | | Регистрация новой заявки на Buy с ценой 9386 и объемом 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 | | Заявка 76852281 на Buy отправлена с ценой 9386 объемом 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.748 | | Заявка 76852281 принята биржей.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:41:28.173 | | Новая Buy сделка 2 по цене 9386 на 1 заявки 76852281.
Отсюда вопросы.
1. Как сделать, чтобы SL стратегия срабатывала именно тогда, когда происходит сделка по указанной цене. А не тогда, когда рынок уехал дальше.
2. Как сделать, чтобы SL стратегия выставляла заявки по правильным ценам - по аскам, если надо откупить, и по бидам, если надо продать. И при этом еще следила за стаканом, передвигая заявки до исполнения всего объема. В крайнем случае - как указать проскальзывание от цены стопа?
Фактически я хочу, чтобы все работало как в Квике, а, если возможно, то и лучше.
Спасибо.