← 戻る

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

Что делаю: пытаюсь перерегистрировать заявку ( все происходит в дочерней стратегии: заявка ставится и перерегистрируется):

            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](Action2 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.MarketRule2.#=qJosTH3NFz_dcWSPiM7XRb8E01zkTBRDf2J5OpVK4CCI=.#=qwyWH$eyQ6ZRsBqWtHmTA3g==(#=qfT6nhcPlWvPESNDaPlDNUA== #=qVC4KKDTVuqQN9mouEFe_Vg==) at StockSharp.Algo.MarketRule2.#=qBjnGFJa1m5qQH6CuH1aPVQ74KEj7u9_ilH$bifqKbFU=() at StockSharp.Algo.MarketRuleHelper.#=q0QtmL$Whdq5Ef_hlxo3fLQ==(IMarketRuleContainer #=qcDKynrfqezsQMQ9Em$W32g==, IMarketRule #=qI8cPty2Plfgh$z$5zoAE8g==, Func1 #=qBJAXpb1jsBrSqQhfiBxj5w==) at StockSharp.Algo.Strategies.Strategy.#=qsC6ROunpHiT3pAtp0VNrFQMvX4wJPEjtGHuDEfse_ziQgZR1haqPZeokHoIFKH5NvZY6dUIk594BjXpQElTWBA==(IMarketRule #=qXriMoAVA_BsqiZi_vFjOXA==, Func`1 #=qFZW_5i_y2kXkGSTnIvmATQ==) InnerException:

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

このトピックは参考になりましたか?

トピックを共有

コメント (7)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

esper
esper

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

Ant.On.
Ant.On. 著者

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

esper
esper

Ant.On.: При этом вы видимо, отменяете одну заявку и ставите другую. Вот тут вопрос - вы ждете пока она отменится на сервере прежде чем новую выставить? Нет, в шлюзе отмена не ожидается, сразу отправляется новая заявка. Ant.On.: Может быть стоит поставить проверку на это дело в коде? Используйте QuotingStrategy, там этот функционал реализован.

esper
esper

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

Ant.On.
Ant.On. 著者

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

Ant.On.
Ant.On. 著者

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

Mikhail Sukhov
Mikhail Sukhov

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

http://stocksharp.com/platform/sources.aspx