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

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


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

Теги:


Спасибо:


1 2 3  >
Alexander

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


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

vader

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


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

Alexander

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


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

vader

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


Код

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

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


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

vader

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


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

Качать из Souce code/Last version?
Спасибо:

Alexander

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


ok, буду ждать :)
Спасибо:

vader

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


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

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

freelancer

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


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

Mikhail Sukhov

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


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


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

vader

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


Это что за зверь такой? Можно ввиде кода?
Спасибо:
1 2 3  >

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

loading
clippy