Как установить отложенный ордер при тестировании на истории?
Тестирую на Н1
protected override void OnStarted()
{
_candleManager
.WhenCandlesFinished(_series)
.Do(ProcessCandle)
.Apply(this);
this
.WhenNewMyTrade()
.Do(ProcessNewTrade)
.Apply(this);
base.OnStarted();
}
private void ProcessCandle(Candle candle) {
..Некоторое условие которое наступает на свече 29.01.2019 15:00:00 var order = this.CreateOrder(Sides.Buy, 211.50m, 1);
order.Type = OrderTypes.Conditional;
order.Condition = new EmulationOrderCondition
{
StopPrice = 211.50m,
};
private void ProcessNewTrade(MyTrade trade)
{
..Однако здесь сделка происходит по 209.83 на следующей свече (209.82 - цена открытия следующей свечи(16:00:00) + 0.01(SpreadSize)
.. Но вход должен произойти только на 17:00:00}
}
Вот Лог: из него видно, что свеча перебивающая 211.50 только в 17:00:00
0001/01/01 00:00:00.000| |HistoryEmulationConnector|Connect
0001/01/01 00:00:00.000| |HistoryBasketMessageAdapter|Connecting 'EmulationMessageAdapter'.
0001/01/01 00:00:00.000| |HistoryBasketMessageAdapter|Connected to 'EmulationMessageAdapter'.
0001/01/01 00:00:00.000| |HistoryEmulationConnector|Lookup 'PortfolioLookup,T(L)=2019.01.01 00:00:00.000,Name=,TransId=1,Curr=,Board=,IsSubscribe=False' for 'EmulationMessageAdapter'.
0001/01/01 00:00:00.000| |HistoryEmulationConnector|Lookup 'OrderStatus,T(L)=2019.01.01 00:00:00.000,Sec=S#:@, Native:,Type:,OrderTransId=0,TransId=2,OrderId=,TransId=2' for 'EmulationMessageAdapter'.
0001/01/01 00:00:00.000| |HistoryBasketMessageAdapter|Connecting 'История (c 01.01.2019 0:00:00 +00:00 по 25.03.2019 0:00:00 +00:00)'.
0001/01/01 00:00:00.000| |HistoryBasketMessageAdapter|Connected to 'История (c 01.01.2019 0:00:00 +00:00 по 25.03.2019 0:00:00 +00:00)'.
2019/01/01 00:00:00.000| |HistoryEmulationConnector|Lookup 'SecurityLookup,T(L)=2019.01.01 00:00:00.000,Sec=S#:@, Native:,Type:,TransId=3,SecId=S#:@, Native:,Type:,Name=,SecType=,ExpDate=' for 'История (c 01.01.2019 0:00:00 +00:00 по 25.03.2019 0:00:00 +00:00)'.
2019/01/01 00:00:00.000| |HistoryEmulationConnector|Создан новый портфель test account.
2019/01/01 00:00:00.000|Debug |HS_SBER@TQBR_test account|Переход из состояния Stopped в Started.
2019/01/01 00:00:00.000| |HS_SBER@TQBR_test account|Стратегия Запущена. [0,-1]. Позиция 0.
2019/01/01 00:00:00.000| |HistoryMessageAdapter|Origin tf: 01:00:00
2019/01/01 00:00:00.000| |HistoryEmulationConnector|Изменение состояния эмуляции Stopped -> Starting
2019/01/01 00:00:00.000| |HistoryEmulationConnector|Изменение состояния эмуляции Starting -> Started
2019/03/28 12:28:39.363| |CachedBasketMarketDataStorage`1|Loading 01.01.2019 0:00:00
....
2019/03/28 12:28:39.499| |CachedBasketMarketDataStorage`1|Loading 29.01.2019 0:00:00
....
2019/01/29 11:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 10:00:00 +03:00: SBER@TQBR 209.71;209.71;207.50;207.72; объем 9204220
2019/01/29 12:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Законченные свечи TimeFrameCandle_SBER@TQBR_01-00-00 (0x3F6A66A)'. Активация.
2019/01/29 12:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 11:00:00 +03:00: SBER@TQBR 207.75;208.89;206.91;208.84; объем 7600920
2019/01/29 13:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Законченные свечи TimeFrameCandle_SBER@TQBR_01-00-00 (0x3F6A66A)'. Активация.
2019/01/29 13:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 12:00:00 +03:00: SBER@TQBR 208.84;209.65;208.60;209.50; объем 6430830
2019/01/29 14:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Законченные свечи TimeFrameCandle_SBER@TQBR_01-00-00 (0x3F6A66A)'. Активация.
2019/01/29 14:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 13:00:00 +03:00: SBER@TQBR 209.49;210.53;209.00;210.17; объем 5241780
2019/01/29 15:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Законченные свечи TimeFrameCandle_SBER@TQBR_01-00-00 (0x3F6A66A)'. Активация.
2019/01/29 15:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 14:00:00 +03:00: SBER@TQBR 210.15;210.40;209.50;210.40; объем 2324240
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Законченные свечи TimeFrameCandle_SBER@TQBR_01-00-00 (0x3F6A66A)'. Активация.
2019/01/29 16:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 15:00:00 +03:00: SBER@TQBR 210.36;210.52;209.63;209.82; объем 2880690
2019/01/29 16:00:00.000| |HS_SBER@TQBR_test account|Регистрация новой Conditional (0x2B7A1F2) заявки на Buy с ценой 211,50 и объемом 1. Buy Stop Enter
2019/01/29 16:00:00.000| |HistoryEmulationConnector|RegisterOrder: 0/ SBER@TQBR test account Покупка Цена=211.50 Объем=1 Сост=None Бал=0 Тип=Conditional
2019/01/29 16:00:00.000| |HistoryEmulationConnector|New order: 8/ SBER@TQBR test account Покупка Цена=211.50 Объем=1 Сост=Pending Бал=1 Тип=Conditional
2019/03/28 12:28:45.288| |SecurityMarketEmulator|Заявка 8 зарегистрирована.
2019/03/28 12:28:45.300| |SecurityMarketEmulator|Заявка 8. Исполнение объема 1 по цене 209,83.
2019/03/28 12:28:45.302| |SecurityMarketEmulator|Заявка 8 полностью исполнена.
2019/03/28 12:28:45.306| |SecurityMarketEmulator|Сделка 1 заявки 8 P=209,83 V=1.
2019/01/29 16:00:00.000| |HistoryEmulationConnector|Order changed: 8/1 SBER@TQBR test account Покупка Цена=211.50 Объем=1 Сост=Done Бал=0 Тип=Conditional
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Отмена заявки 8/1 (0xBF7771) OR Полное исполнение 8/1 (0xAE65B0) OR Ошибка регистрации. 8/1 (0x27B1BBF)'. Активация.
2019/01/29 16:00:00.000| |HS_SBER@TQBR_test account|Заявка 8 (0x2B7A1F2) больше не активна.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Отмена заявки 8/1 (0xBF7771) OR Полное исполнение 8/1 (0xAE65B0) OR Ошибка регистрации. 8/1 (0x27B1BBF)'. Удаляется.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Отмена заявки 8/1 (0xBF7771)'. Освободило ресурсы.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Полное исполнение 8/1 (0xAE65B0)'. Освободило ресурсы.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Ошибка регистрации. 8/1 (0x27B1BBF)'. Освободило ресурсы.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Отмена заявки 8/1 (0xBF7771) OR Полное исполнение 8/1 (0xAE65B0) OR Ошибка регистрации. 8/1 (0x27B1BBF)'. Освободило ресурсы.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Ошибка снятия заявки 8/1 (0x122DB4B)'. Удаляется.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Ошибка снятия заявки 8/1 (0x122DB4B)'. Освободило ресурсы.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Ошибка снятия заявки 8/1 (0x122DB4B)'. Удалено.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Отмена заявки 8/1 (0xBF7771) OR Полное исполнение 8/1 (0xAE65B0) OR Ошибка регистрации. 8/1 (0x27B1BBF)'. Удаление.
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Ошибка снятия заявки 8/1 (0x122DB4B)'. Удаление.
2019/01/29 16:00:00.000|Error |HistoryEmulationConnector|System.InvalidOperationException: Сообщение 'Execution,T(L)=2019/01/29 16:00:00.000,T(S)=2019/01/29 16:00:00.000,(Transaction),Sec=S#:SBER@TQBR, Native:,Type:,Ord=1/0/8,Fail=,Price=0,OrdVol=,TrVol=,Bal=0,TId=,Pf=test account,TPrice=,UId=,State=Done' привело к ошибке обработки. ---> System.ArgumentException: Элемент с тем же ключом уже был добавлен.
в System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
в System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
в Ecng.Collections.SynchronizedDictionary`2.Add(TKey key, TValue value)
в StockSharp.Algo.EntityCache.ProcessOrderMessage(Order order, Security security, ExecutionMessage message, Int64 transactionId, Tuple`3& pfInfo)
в StockSharp.Algo.Connector.ProcessOrderMessage(Order o, Security security, ExecutionMessage message, Int64 transactionId, Boolean isStatusRequest)
в StockSharp.Algo.Connector.ProcessTransactionMessage(Order order, Security security, ExecutionMessage message, Int64 transactionId, Boolean isStatusRequest)
в StockSharp.Algo.Connector.ProcessExecutionMessage(ExecutionMessage message)
в StockSharp.Algo.Connector.OnProcessMessage(Message message)
--- Конец трассировки внутреннего стека исключений ---
2019/01/29 16:00:00.000| |HistoryEmulationConnector|New own trade: 29.01.2019 16:00:00 +03:00 1 209,83 1 от заявки 8/1 SBER@TQBR test account Покупка Цена=211,50 Объем=1 Сост=Done Бал=0 Тип=Conditional
2019/01/29 16:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Новые сделки стратегии HS_SBER@TQBR_test account (0x21CF1C8)'. Активация.
2019/01/29 16:00:00.000| |HS_SBER@TQBR_test account|Новая Buy сделка 1 по цене 209,83 на 1 заявки 8.
2019/01/29 17:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Законченные свечи TimeFrameCandle_SBER@TQBR_01-00-00 (0x3F6A66A)'. Активация.
2019/01/29 17:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 16:00:00 +03:00: SBER@TQBR 209.82;211.20;209.81;210.96; объем 5350460
2019/01/29 18:00:00.000|Debug |HS_SBER@TQBR_test account|Правило 'Законченные свечи TimeFrameCandle_SBER@TQBR_01-00-00 (0x3F6A66A)'. Активация.
2019/01/29 18:00:00.000| |HS_SBER@TQBR_test account|Новая свеча 01/29/2019 17:00:00 +03:00: SBER@TQBR 210.96;213.30;210.96;212.94; объем 11824230
Может не так регистрирую стоп заявку?