4.1.2 Проблемы с удалением правил из стратегии.

4.1.2 Проблемы с удалением правил из стратегии.


Не могу разобраться как удалить правило из стратегии после перехода на 4.1. Для примера возьмем правило которое теперь называется Trader.WhenTimeCome. Если использовать его в качестве таймера который вызывает некий метод раз в секунду то до 4.1 код выглядел примерно так.


nextCall = Trader.MarketTime.AddSecond(1);
this.When.Ttrader.TimeCome(nextCall)
    .Do(Meth);


public void Meth()
{
Rules.Remove(Trader.TimeCome(nextCall);
nextCall = Trader.MarketTime.AddSecond(1);
this.When.Ttrader.TimeCome(nextCall)
    .Do(Meth);
}

Вот как я реализовал этот код в 4.1


nextCall = Trader.MarketTime.AddSecond(1);
this.Trader.WhenTimeCome(nextCall)
    .Do(Meth).Apply(this);


public void Meth()
{
Rules.Remove(Trader.TimeCome(nextCall);
nextCall = Trader.MarketTime.AddSecond(1);
this.Trader.WhenTimeCome(nextCall)
    .Do(Meth);
}

Проблема в том что зарегистрированное правило не удаляется привычным образом, и при регистрации очередного программа падает из-за не обрабатываемого исключения. Добавив вывод на экран значения Rules.Count я пришёл к выводу что у меня не получается уменьшить это значение ни одним из доступных способов(Rules.Remove(); TryRemoveRule(); Rules.Clear()) Подскажите что я делаю не так?


Теги:


Спасибо:


1 2 3  >
Moadip

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


Если надо чтобы какое то правило отработало определенное кол-во раз и потом было удалено делаю так.


    bool flag = false;
            
    Security
        .WhenNewTrades()
        .Do(() =>
                {
                    ...

                    if (Условие == true) flag = true;
                })
        .Periodical(() => flag)
        .Apply(this);

В 4.1.3 появилась удобная фишка - взаимоисключающие правила. Правила которые отменяются при срабатывании другого правила. Плюс удаление правил по токену. Попробуйте, возможно удобнее будет работать с кодом.

Спасибо:

Андрей Александрович

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


Использование Once() действительно делает Rules.Romove() ненужным в этом случае. Правда заработал у меня Once() только если поставить его после Apply(this) что, скажем, оказалось не очевидным для меня, а иначе программа падает.

Спасибо:

Alexander

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


"Падает" - приводите стэктрейс. По поводу Apply(this) - всё написано в документации

Спасибо:

Андрей Александрович

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


Alexander Mukhanchikov: "Падает" - приводите стэктрейс. По поводу Apply(this) - всё написано в документации

13:51:49.050 | Error | UnhandleException | System.IndexOutOfRangeException: Index was outside the bounds of the array. at StockSharp.Algo.MarketRuleHelper.#=q5tE5pMwBLHpbY5GB03GIig==.#=qpwQa0ec4L11d9qoHhvukUQ==(MarketTimer #=qrp1xDbP_kZMfjVGQfYoKiQ==, Boolean #=qkLAqWGH2XKiJVtIFuXfv0Q==) at StockSharp.Algo.MarketTimer.#=qHWOSW6k$_YnVe_5fvF$1lVbPeaqRg9hj5p9vwh7OX6w=() at Ecng.Common.DelegateHelper.SafeInvoke(Action handler) at StockSharp.Algo.BaseTrader.RaiseMarketTimeChanged() at StockSharp.Algo.BaseTrader.OnMarketTimeChanged() at Ecng.Common.ThreadingHelper.<>c__DisplayClass1.b__0(Object s) at System.Threading._TimerCallback.TimerCallback_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading._TimerCallback.PerformTimerCallback(Object state)

Вот такое исключение сразу после вызова OnStarting();

Спасибо:

Alexander

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


Проблема уже описана тут

Будет время - решим, выложим фикс.

с Apply(this) никак не связана

Спасибо:

Андрей Александрович

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


Alexander Mukhanchikov: Будет время - решим, выложим фикс.

На данный момент получается так что у всех у кого в алгоритме есть WhenTimeCome робот запускается через раз.

Спасибо:

Alexander

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


Андрей Александрович:

Alexander Mukhanchikov: Будет время - решим, выложим фикс.

На данный момент получается так что у всех у кого в алгоритме есть WhenTimeCome робот запускается через раз.

Вы готовы пофиксить данную проблему?

Спасибо:

Андрей Александрович

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


Alexander Mukhanchikov: Вы готовы пофиксить данную проблему?

Если бы она была в моем коде то я должен был быть готов и постарался бы её устранить.

Спасибо:

Alexander

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


Андрей Александрович:

Alexander Mukhanchikov: Вы готовы пофиксить данную проблему?

Если бы она была в моем коде то я должен был быть готов и постарался бы её устранить.

Я могу вам выслать исходный код данного правила.

Спасибо:

Андрей Александрович

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


Alexander Mukhanchikov: Я могу вам выслать исходный код данного правила.

Если поместится то можно передать его через личные сообщения. Почему бы не попробовать.

Спасибо:
1 2 3  >

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

loading
clippy