← Zurück

Событие order.CancelFailed().Once() было активировано дважды.

Я подписываюсь на событие 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' удалено.

War dieses Thema hilfreich?

Thema teilen

Kommentare (28)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Alexander
Alexander

Покажите кодом как идёт создание стратегии и где идёт вывод этого лога.

vader
vader Autor

Создание стратегии - нужен вызов конструктора или сам конструктор?

Alexander
Alexander

Точнее создание правила интересует. Правила CancelFailed и вывод всего что написали в лог

vader
vader Autor

private void ReplaceOrder(string callingMethod)
        {
            WriteDiagnostics("ReplaceOrder " + callingMethod + " " + _order.TransactionId.ToString());

            this.When(_order.CancelFailed())
                .Do(OnCancelFailed)
                .Once();

            if(CancelOrder(_order)) {
                Thread.Sleep(500);
                FormNewOrder(_order, callingMethod);
            }
        }

private void OnCancelFailed(OrderFail orderFail)
        {
            string message = orderFail.Error.Message;
            WriteDiagnostics("OnCancelFailed " + message + orderFail.Order.TransactionId.ToString());
            if(IsErrorBecauseClearing(message) || IsOrderCancelInEveningClearing(orderFail.Order)) {
                if(IsErrorBecauseClearing(message)){
                    this.When(StrategyRuleHelper.Changed(Security))
                        .Do(() => ReplaceOrder("OnCancelFailed"))
                        .Once();
                }
            }
            Stop();
        }



protected bool CancelOrder(Order order)
        {
            WriteDiagnostics("CancelOrder " + order.TransactionId.ToString());
            try {
                Trader.CancelOrder(order);
                return true;
            }
            catch(Exception ex) {
                WriteDiagnostics("ex " + ex.Message);
                return IsOrderCancelInEveningClearing(order);
            }
        }


protected void WriteDiagnostics(string message)
        {
            LogMessage logMessage = new LogMessage(this, DateTime.Now, ErrorTypes.None, message);
            AddLog(logMessage);
        }

Alexander
Alexander

На 4.1 работает? Там много хороших изменений в плане параллельного исполнения заявок

vader
vader Autor

Не знаю, не пробовал. Попробую - отпишусь о результатах.

Качать из Souce code/Last version?

Alexander
Alexander

ok, буду ждать :)

vader
vader Autor

К сожалению, версия 4.1 у меня не работоспособна. К примеру, стратегия ставит первую заявку, но вторую уже не может. Причина - OnRegisterFailed Операция является недопустимой из-за текущего состояния объекта. Или не срабатывает правило When(Func<(Of <<'(Boolean>)>>), TimeSpan).

Сылки использовал из \stocksharp-15359\dev\Reference

Mikhail Sukhov
Mikhail Sukhov

vader: Причина - OnRegisterFailed Операция является недопустимой из-за текущего состояния объекта.

Можно весть текст ошибки?

vader: Или не срабатывает правило When(Func<(Of <<'(Boolean>)>>), TimeSpan).

Это что за зверь такой? Можно ввиде кода?

freelancer
freelancer

Напишите уже наконец в документации, что некоторые правила исполняются несколько раз (хотя должны 1 раз) и что Once() не работает. Люди же жалуются. У меня с Matched то же самое. Once() не помогает

Alexander
Alexander

freelancer: Напишите уже наконец в документации, что некоторые правила исполняются несколько раз (хотя должны 1 раз) и что Once() не работает. Люди же жалуются. У меня с Matched то же самое. Once() не помогает

Ответил тут

Alexander
Alexander

Причина - OnRegisterFailed Операция является недопустимой из-за текущего состояния объекта.

И чтоб второй раз не ходить - StackTrace ошибки, без него никуда.

Alexander
Alexander

И ещё вопрос по вашему коду - у вас в ReplaceOrder печатается вызывающий метод. Он во всех случаях пустой. Покажите откуда вы ещё вызываете ReplaceOrder - если б он вызывался из OnCancelFailed - это было бы видно.

Случайно правило не 2 раза создаётеся?

Alexander
Alexander

Выложил 4.0.21, запустите с ним с включённым логом. Ответ на последний вопрос тогда получим.

vader
vader Autor

Включенный лог - это ведь EnableRulesLog = true, так? Тогнда он у меня и так включен.

Alexander
Alexander

И что выдаёт 4.0.21? Я включил доп печать там.

vader
vader Autor

Касательно ошибок, возникавших при работе с промежуточной версией 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.)

vader
vader Autor

Касательно работы в релизной версии 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)' удалено.

vader
vader Autor

Ещё один Лог, запись приведена от начала работы стратегии.

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;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'.

Mikhail Sukhov
Mikhail Sukhov

vader: Ещё один Лог, запись приведена от начала работы стратегии.

У вас и по первому логу видно, что два правила создали. Ищите у себя ошибку.

vader
vader Autor

Дело в том, что правило CancelFailed создается только в методе ReplaceOrder, следовательно сколько вызовов ReplaceOrder, столько должно быть и срабатываний CancelFailed.

По каким признакам вы считаете что ошибка у меня? Я не говорю что ошибка именно у вас ,просто пытаюсь понять ,на основании чего вы считаете что ошыбка у меня. Может быть это поможет мне её найти.

Mikhail Sukhov
Mikhail Sukhov

vader: Дело в том, что правило CancelFailed создается только в методе ReplaceOrder, следовательно сколько вызовов ReplaceOrder, столько должно быть и срабатываний CancelFailed.

По каким признакам вы считаете что ошибка у меня? Я не говорю что ошибка именно у вас ,просто пытаюсь понять ,на основании чего вы считаете что ошыбка у меня. Может быть это поможет мне её найти.

Я увидел, что правило на одну и ту же сделку создано 2 раза. Это из лога видно?

vader
vader Autor

Мне, к сожаление не видно.

Mikhail Sukhov
Mikhail Sukhov

vader: Мне, к сожаление не видно.

15:48:56.414 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (33156464)' активировано. 15:48:56.418 | | CRBR | Правило 'Ошибка снятия заявки 56876308 (5923895)' активировано.

Одна и та же заявка, но номера правил разные. Значит их несколько этих самых правил.

vader
vader Autor

Посмотрел. в последнем логе видно, что правило с номером 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

vader
vader Autor

Вот проект, в котором можно воспроизвести ошибку.


var entityFactory = new EntityFactory();
                        var portfolio = entityFactory.CreatePortfolio("SPBFUT00000");

                        strategy = new TestOnceFailed(p.BestBid.Price)
                        {
                            Security = p,
                            Portfolio = portfolio,
                            Trader = MainWindow.Instance.Trader,
                        };
                        strategy.Start();


class TestOnceFailed : Strategy
    {
        private TimeSpan _waitingPeriod;
        private Order _order;
        private decimal _priceOfTask;

        public TestOnceFailed(decimal priceOfOrder)
        {
            _priceOfTask = priceOfOrder;
            _waitingPeriod = new TimeSpan(0, 0, 15);
        }

        protected override void OnStarting() 
        {
            base.OnStarting();

            ((QuikTrader)Trader).IsAsyncMode = false;
            RegisterTestOrder();
        }

        private void RegisterTestOrder()
        {
            
            _order = new Order
            {
                Portfolio = this.Portfolio,
                Volume = 1,
                Price = _priceOfTask - 300,
                Security = this.Security,
                Direction = OrderDirections.Buy,
            };

            this.When(_order.CancelFailed())
                .Do(OnCancelFailed)
                .Once();

            CreateRuleWaiting();

            RegisterOrder(_order);

            CancelOrder();
            
        }

        private void OnCancelFailed(OrderFail orderFail)
        {
            string message = orderFail.Error.Message;
            WriteDiagnostics("OnCancelFailed " + message + " " + orderFail.Order.TransactionId.ToString());
        }

        private StrategyRule CreateRuleWaiting()
        {
            StrategyRule rule = this.When(() => true, _waitingPeriod)
                .Do(() => CancelOrder());

            return rule;
        }

        public void CancelOrder()
		{
			WriteDiagnostics("CancelOrder");
			try{
                Trader.CancelOrder(_order);
			}
            catch(Exception ex) {
                WriteDiagnostics("CancelOrder " + ex.Message);
            }
            
        }

        protected void WriteDiagnostics(string message)
        {
            LogMessage logMessage = new LogMessage(this, DateTime.Now, ErrorTypes.None, message);
            AddLog(logMessage);
            string markInfo = this.Name.PadRight(5) + this.Security.Code.PadRight(5) + DateTime.Now.ToString() + " " + message;
            System.Diagnostics.Debug.WriteLine(markInfo);
        }
    }

Alexander
Alexander

Положил на codeplex\trunk фикс. Проверьте, пожалуйста.

vader
vader
vader Autor

Теперь CancelFailed отрабатывает один раз. Сейчас потестирую остальную функциональность. Спасибо большое.