Ошибка при перерегистрации заявки
Atom
26.10.2012


Что делаю: пытаюсь перерегистрировать заявку ( все происходит в дочерней стратегии: заявка ставится и перерегистрируется):
Код
            var old = this.Orders.FirstOrDefault(o => o.State == OrderStates.Active && o.Security.Code==this.Security.Code); // find active orders to replace
            if (old == null)
            {
                return;
            }
            var order = old.Clone();
            new_price = this.Security.ShrinkPrice(new_price, ShrinkRules.Auto);
            order.Price = new_price;
            this.ReRegisterOrder(old,order); // does not work: заявка уже была отправлена на перерегистрацию (???)


Падает с Exception (заявка не снимается, остается висеть). Все на реальном счете
Цитата:
System.ArgumentException was unhandled by user code
Message=Заявка 61398764 уже была ранее отправлена на перерегистрацию.
Source=StockSharp.Algo
StackTrace:
at StockSharp.Algo.Strategies.Strategy.ReRegisterSlippage(Order oldOrder, Order newOrder)
at Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action`2 handler, T1 arg1, T2 arg2)
at StockSharp.Algo.Strategies.Strategy.ReRegisterSlippage(Order oldOrder, Order newOrder)
at StockSharp.Algo.Strategies.Strategy.ReRegisterOrder(Order oldOrder, Order newOrder)
at PairTrader.Quoter.reQuote(Decimal new_price) in c:\tmp\AlgoTrading\4.1.5 release\Quoter.cs:line 109
at StockSharp.Algo.MarketRule`2.#=qJosTH3NFz_dcWSPiM7XRb8E01zkTBRDf2J5OpVK4CCI=.#=qwyWH$eyQ6ZRsBqWtHmTA3g==(#=qfT6nhcPlWvPESNDaPlDNUA== #=qVC4KKDTVuqQN9mouEFe_Vg==)
at StockSharp.Algo.MarketRule`2.#=qBjnGFJa1m5qQH6CuH1aPVQ74KEj7u9_ilH$bifqKbFU=()
at StockSharp.Algo.MarketRuleHelper.#=q0QtmL$Whdq5Ef_hlxo3fLQ==(IMarketRuleContainer #=qcDKynrfqezsQMQ9Em$W32g==, IMarketRule #=qI8cPty2Plfgh$z$5zoAE8g==, Func`1 #=qBJAXpb1jsBrSqQhfiBxj5w==)
at StockSharp.Algo.Strategies.Strategy.#=qsC6ROunpHiT3pAtp0VNrFQMvX4wJPEjtGHuDEfse_ziQgZR1haqPZeokHoIFKH5NvZY6dUIk594BjXpQElTWBA==(IMarketRule #=qXriMoAVA_BsqiZi_vFjOXA==, Func`1 #=qFZW_5i_y2kXkGSTnIvmATQ==)
InnerException:


Это баг или я косячу где то?

Теги:


Спасибо:


esper

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


Видимо код несколько раз вызывается.
Спасибо:

Ant.On.

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


Да, видимо действительно правило вызывалось несколько раз. Поставил Once().
Кстати, дальше стали вываливаться квиковские ошибки (из-за того, что Единая денежная позиция) - выставил QuikTrader.isCommonMonetaryPosition = true;
При этом вы видимо, отменяете одну заявку и ставите другую. Вот тут вопрос - вы ждете пока она отменится на сервере прежде чем новую выставить? Потому что у меня вывалился с превышением лимита (очевидно, что из-за того что прошлая заявка еще не до конца снята была)
Пришлось заоверрайдить метод ReRegisterOrders - заработало... Может быть стоит поставить проверку на это дело в коде?
Спасибо:

esper

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


Поиск по форуму творит чудеса.
Спасибо:

Ant.On.

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


да, спасибо - он уже сотоврил, - я даже пост поменял, - прочитайте плз - может быть будет полезное изменение в ваш код.
Спасибо:

esper

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


Ant.On. Перейти
При этом вы видимо, отменяете одну заявку и ставите другую. Вот тут вопрос - вы ждете пока она отменится на сервере прежде чем новую выставить?

Нет, в шлюзе отмена не ожидается, сразу отправляется новая заявка.
Ant.On. Перейти
Может быть стоит поставить проверку на это дело в коде?

Используйте QuotingStrategy, там этот функционал реализован.
Спасибо:

Ant.On.

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


Ок. Quoting не использую, т.к. это черный ящик - не до конца понимаю где она может сработать не так. Делаю под себя квотера. Спасибо за совет.
Спасибо:

Mikhail Sukhov

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


Ant.On. Перейти
Quoting не использую, т.к. это черный ящик - не до конца понимаю где она может сработать не так.


http://stocksharp.com/platform/sources.aspx
Спасибо:


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

loading
clippy