Я подписываюсь на событие CancelFailed в методе ReplaceOrder и только в нем. Правило одноразовое. К сожалению количество вызывов ReplaceOrder и CancelFailed не совпадают. Работаю на Quik, версия S# - исправленная 4.0.20
18:45:02.230 | | CRBR | ReplaceOrder 67306126 18:45:02.232 | | CRBR | CancelOrder 67306126 18:45:02.421 | | CRBR | Правило 'Ошибка снятия заявки 67306126' активировано. 18:45:02.422 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Ошибка снятия заявки. [FORTS] "Сейчас эта сессия не идет".67306126 18:45:02.429 | | CRBR | Правило 'Ошибка снятия заявки 67306126' удалено. 18:45:02.446 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=67306127; ORDER_KEY=1393448849; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Ошибка снятия заявки. [FORTS] "Сейчас эта сессия не идет".'. 18:45:14.100 | | CRBR | ReplaceOrder 67306126 18:45:14.102 | | CRBR | CancelOrder 67306126 18:45:14.337 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=67306128; ORDER_KEY=1393448849; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Ошибка снятия заявки. [FORTS] "Сейчас эта сессия не идет".'. 18:45:14.339 | | CRBR | Правило 'Ошибка снятия заявки 67306126' активировано. 18:45:14.339 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Ошибка снятия заявки. [FORTS] "Сейчас эта сессия не идет".67306126 18:45:14.342 | | CRBR | Правило 'Ошибка снятия заявки 67306126' удалено. 18:45:14.342 | | CRBR | Правило 'Ошибка снятия заявки 67306126' активировано. 18:45:14.342 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Ошибка снятия заявки. [FORTS] "Сейчас эта сессия не идет".67306126 18:45:14.344 | | CRBR | Правило 'Ошибка снятия заявки 67306126' удалено.
Kommentare (28)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Покажите кодом как идёт создание стратегии и где идёт вывод этого лога.
Создание стратегии - нужен вызов конструктора или сам конструктор?
Точнее создание правила интересует. Правила CancelFailed и вывод всего что написали в лог
На 4.1 работает? Там много хороших изменений в плане параллельного исполнения заявок
Не знаю, не пробовал. Попробую - отпишусь о результатах.
Качать из Souce code/Last version?
ok, буду ждать :)
К сожалению, версия 4.1 у меня не работоспособна. К примеру, стратегия ставит первую заявку, но вторую уже не может. Причина - OnRegisterFailed Операция является недопустимой из-за текущего состояния объекта. Или не срабатывает правило When(Func<(Of <<'(Boolean>)>>), TimeSpan).
Сылки использовал из \stocksharp-15359\dev\Reference
Можно весть текст ошибки?
Это что за зверь такой? Можно ввиде кода?
Напишите уже наконец в документации, что некоторые правила исполняются несколько раз (хотя должны 1 раз) и что Once() не работает. Люди же жалуются. У меня с Matched то же самое. Once() не помогает
Ответил тут
И чтоб второй раз не ходить - StackTrace ошибки, без него никуда.
И ещё вопрос по вашему коду - у вас в ReplaceOrder печатается вызывающий метод. Он во всех случаях пустой. Покажите откуда вы ещё вызываете ReplaceOrder - если б он вызывался из OnCancelFailed - это было бы видно.
Случайно правило не 2 раза создаётеся?
Выложил 4.0.21, запустите с ним с включённым логом. Ответ на последний вопрос тогда получим.
Включенный лог - это ведь EnableRulesLog = true, так? Тогнда он у меня и так включен.
И что выдаёт 4.0.21? Я включил доп печать там.
Касательно ошибок, возникавших при работе с промежуточной версией 15359. Ошибка при создании заявки - Операция является недопустимой из-за текущего состояния объекта. StackTrace - в StockSharp.Algo.BaseTrader.#=q1jPECpcYhkCDc1endsWfTp1VhJY$g9vaOlgOde9HMXI=.#=q7YCdHsNqy4nRQBNoT76vpw==() в StockSharp.Algo.BaseTrader.ProcessEvents(Action handler) в StockSharp.Quik.QuikTrader.#=qP$c9$YUhcgOXgGByrfkYQoLex2$ov$Irbl5B37enmzc=(Order #=qm5lz5WVqlloZ$wO5Bw075w==, TransactionBuilder #=qh1QBkeMdoSN6zg0mxHuV5w==) в StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order) в StockSharp.Algo.BaseTrader.RegisterOrder(Order order) в StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order) в BSPB.Partizan.BaseStrategy.RegisterOrder(Order order) в C:\vb\General\PartizanV2\source\v.2.0\BaseStrategy.cs:строка 175
правило When(Func<(Of <<'(Boolean>)>>), TimeSpan) - это я из документации скопировал. (Зарегистрировать в стратегии условие, которое будет проверяться с интервалом interval.)
Касательно работы в релизной версии 4.0.21.
Вот лог. 11:59:56.529 | | CRBR | Правило 'Интервал условие 00:00:30 (55486438)' активировано. 11:59:56.529 | | CRBR | ReplaceOrder RuleWaitingActivated 42601474 11:59:56.529 | | CRBR | CancelOrder 42601474 11:59:56.763 | | CRBR | Правило 'Ошибка снятия заявки 42601474 (61617225)' активировано. 11:59:56.763 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Ошибка снятия заявки. [FORTS] "Идет пром. клиринг, нельзя удалять заявки.".42601474 11:59:56.794 | | CRBR | Правило 'Ошибка снятия заявки 42601474 (61617225)' удалено. 11:59:56.810 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=LKU2; TRANS_ID=42601475; ORDER_KEY=2713761048; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Ошибка снятия заявки. [FORTS] "Идет пром. клиринг, нельзя удалять заявки.".'. 11:59:57.028 | | CRBR | Правило 'Изменение инструмента LKU2@RTS (103653)' активировано. 11:59:57.028 | | CRBR | ReplaceOrder OnCancelFailed 42601474 11:59:57.028 | | CRBR | CancelOrder 42601474 11:59:57.200 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=LKU2; TRANS_ID=42601476; ORDER_KEY=2713761048; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Ошибка снятия заявки. [FORTS] "Идет пром. клиринг, нельзя удалять заявки.".'. 11:59:57.200 | | CRBR | Правило 'Изменение инструмента LKU2@RTS (103653)' удалено. 11:59:57.200 | | CRBR | Правило 'Ошибка снятия заявки 42601474 (61617225)' активировано. 11:59:57.200 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Ошибка снятия заявки. [FORTS] "Идет пром. клиринг, нельзя удалять заявки.".42601474 11:59:57.216 | | CRBR | Правило 'Ошибка снятия заявки 42601474 (61617225)' удалено. 11:59:57.216 | | CRBR | Правило 'Ошибка снятия заявки 42601474 (42931033)' активировано. 11:59:57.216 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Ошибка снятия заявки. [FORTS] "Идет пром. клиринг, нельзя удалять заявки.".42601474 11:59:57.216 | | CRBR | Правило 'Ошибка снятия заявки 42601474 (42931033)' удалено.
Ещё один Лог, запись приведена от начала работы стратегии.
15:48:11.291 | | CRBR | Стратегия запущена. 15:48:11.303 | | CRBR | CreateOrder OnStarting 15:48:11.573 | | CRBR | RegisterOrder 56876308 15:48:26.304 | | CRBR | Правило 'Интервал условие 00:00:15 (64796970)' активировано. 15:48:26.306 | | CRBR | ReplaceOrder RuleWaitingActivated 56876308 15:48:26.315 | | CRBR | CancelOrder 56876308 15:48:26.425 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (33156464)' активировано. 15:48:26.427 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку56876308 15:48:26.435 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (33156464)' удалено. 15:48:26.455 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=56876309; ORDER_KEY=1404446085; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'.
15:48:41.316 | | CRBR | Правило 'Интервал условие 00:00:15 (64796970)' активировано. 15:48:41.316 | | CRBR | ReplaceOrder RuleWaitingActivated 56876308 15:48:41.318 | | CRBR | CancelOrder 56876308 15:48:41.417 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (33156464)' активировано. 15:48:41.417 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку56876308 15:48:41.421 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (33156464)' удалено. 15:48:41.422 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (5923895)' активировано. 15:48:41.422 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку56876308 15:48:41.426 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (5923895)' удалено. 15:48:41.447 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=56876310; ORDER_KEY=1404446085; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'.
15:48:56.317 | | CRBR | Правило 'Интервал условие 00:00:15 (64796970)' активировано. 15:48:56.317 | | CRBR | ReplaceOrder RuleWaitingActivated 56876308 15:48:56.318 | | CRBR | CancelOrder 56876308 15:48:56.414 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (33156464)' активировано. 15:48:56.414 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку56876308 15:48:56.418 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (33156464)' удалено. 15:48:56.418 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (5923895)' активировано. 15:48:56.418 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку56876308 15:48:56.422 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (5923895)' удалено. 15:48:56.423 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (50510248)' активировано. 15:48:56.423 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку56876308 15:48:56.427 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (50510248)' удалено. 15:48:56.448 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=56876311; ORDER_KEY=1404446085; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'.
У вас и по первому логу видно, что два правила создали. Ищите у себя ошибку.
Дело в том, что правило CancelFailed создается только в методе ReplaceOrder, следовательно сколько вызовов ReplaceOrder, столько должно быть и срабатываний CancelFailed.
По каким признакам вы считаете что ошибка у меня? Я не говорю что ошибка именно у вас ,просто пытаюсь понять ,на основании чего вы считаете что ошыбка у меня. Может быть это поможет мне её найти.
Я увидел, что правило на одну и ту же сделку создано 2 раза. Это из лога видно?
Мне, к сожаление не видно.
Одна и та же заявка, но номера правил разные. Значит их несколько этих самых правил.
Посмотрел. в последнем логе видно, что правило с номером 33156464 было активировано три раза, а 5923895 - дважды.
Обнаружил ещё одну вещь. Вставил перед и после создание правила вывод имен правил и их количества. Количество правил, как по логике и должнон быть тавно сначала три, потом 4. НоС каждым разом на попытку снять снятую заявку вызывается снаяала одно, потом 2, потом три правила. Где они?
19:14:04.278 | | CRBR | Стратегия запущена. 19:14:04.291 | | CRBR | CreateOrder OnStarting 19:14:04.395 | | CRBR | RegisterOrder 69180761 19:14:19.295 | | CRBR | Правило 'Интервал условие 00:00:15 (32460410)' активировано. 19:14:19.298 | | CRBR | ReplaceOrder RuleWaitingActivated 69180761 19:14:19.300 | | CRBR | правило Интервал условие 00:00:15 19:14:19.302 | | CRBR | правило Ошибка регистрации заявки 0 19:14:19.304 | | CRBR | правило Новые сделки заявки 0 19:14:19.306 | | CRBR | правило 3 19:14:19.309 | | CRBR | правило Интервал условие 00:00:15 19:14:19.311 | | CRBR | правило Ошибка регистрации заявки 0 19:14:19.313 | | CRBR | правило Новые сделки заявки 0 19:14:19.315 | | CRBR | правило Ошибка снятия заявки 69180761 19:14:19.317 | | CRBR | правило 4 19:14:19.320 | | CRBR | CancelOrder 69180761 19:14:19.549 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (15645912)' активировано. 19:14:19.552 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку 69180761 19:14:19.560 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:19.570 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (15645912)' удалено. 19:14:19.586 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=69180762; ORDER_KEY=2715365411; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'. 19:14:19.587 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:19.588 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:34.307 | | CRBR | Правило 'Интервал условие 00:00:15 (32460410)' активировано. 19:14:34.307 | | CRBR | ReplaceOrder RuleWaitingActivated 69180761 19:14:34.310 | | CRBR | правило Интервал условие 00:00:15 19:14:34.311 | | CRBR | правило Ошибка регистрации заявки 0 19:14:34.312 | | CRBR | правило Новые сделки заявки 0 19:14:34.314 | | CRBR | правило 3 19:14:34.316 | | CRBR | правило Интервал условие 00:00:15 19:14:34.318 | | CRBR | правило Ошибка регистрации заявки 0 19:14:34.319 | | CRBR | правило Новые сделки заявки 0 19:14:34.321 | | CRBR | правило Ошибка снятия заявки 69180761 19:14:34.322 | | CRBR | правило 4 19:14:34.324 | | CRBR | CancelOrder 69180761 19:14:34.340 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (15645912)' активировано. 19:14:34.340 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку 69180761 19:14:34.342 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:34.343 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (15645912)' удалено. 19:14:34.343 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (33579535)' активировано. 19:14:34.343 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку 69180761 19:14:34.344 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:34.346 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (33579535)' удалено. 19:14:34.359 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=69180763; ORDER_KEY=2715365411; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'. 19:14:34.360 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:34.361 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:49.307 | | CRBR | Правило 'Интервал условие 00:00:15 (32460410)' активировано. 19:14:49.307 | | CRBR | ReplaceOrder RuleWaitingActivated 69180761 19:14:49.309 | | CRBR | правило Интервал условие 00:00:15 19:14:49.311 | | CRBR | правило Ошибка регистрации заявки 0 19:14:49.312 | | CRBR | правило Новые сделки заявки 0 19:14:49.315 | | CRBR | правило 3 19:14:49.317 | | CRBR | правило Интервал условие 00:00:15 19:14:49.318 | | CRBR | правило Ошибка регистрации заявки 0 19:14:49.320 | | CRBR | правило Новые сделки заявки 0 19:14:49.322 | | CRBR | правило Ошибка снятия заявки 69180761 19:14:49.324 | | CRBR | правило 4 19:14:49.326 | | CRBR | CancelOrder 69180761 19:14:49.539 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (15645912)' активировано. 19:14:49.539 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку 69180761 19:14:49.540 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:49.541 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (15645912)' удалено. 19:14:49.541 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (33579535)' активировано. 19:14:49.541 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку 69180761 19:14:49.543 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:49.544 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (33579535)' удалено. 19:14:49.544 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (7995840)' активировано. 19:14:49.544 | | CRBR | OnCancelFailed Код ошибки Failed Сообщение Вы не можете снять данную заявку 69180761 19:14:49.545 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:49.547 | | CRBR | Правило 'Ошибка снятия заявки 69180761 (7995840)' удалено. 19:14:49.560 | | CRBR | ex Транзакция 'CLASSCODE=SPBFUT; SECCODE=RIH2; TRANS_ID=69180764; ORDER_KEY=2715365411; ACTION=KILL_ORDER;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'. 19:14:49.561 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False 19:14:49.562 | | CRBR | IsOrderCancelInClearing 12.03.2012 19:14:07 False
Вот проект, в котором можно воспроизвести ошибку.
Положил на codeplex\trunk фикс. Проверьте, пожалуйста.
Теперь CancelFailed отрабатывает один раз. Сейчас потестирую остальную функциональность. Спасибо большое.