Что делаю: пытаюсь перерегистрировать заявку ( все происходит в дочерней стратегии: заявка ставится и перерегистрируется):
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.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:
Это баг или я косячу где то?
Kommentare (7)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Видимо код несколько раз вызывается.
Да, видимо действительно правило вызывалось несколько раз. Поставил Once(). Кстати, дальше стали вываливаться квиковские ошибки (из-за того, что Единая денежная позиция) - выставил QuikTrader.isCommonMonetaryPosition = true; При этом вы видимо, отменяете одну заявку и ставите другую. Вот тут вопрос - вы ждете пока она отменится на сервере прежде чем новую выставить? Потому что у меня вывалился с превышением лимита (очевидно, что из-за того что прошлая заявка еще не до конца снята была) Пришлось заоверрайдить метод ReRegisterOrders - заработало... Может быть стоит поставить проверку на это дело в коде?
Поиск по форуму творит чудеса.
да, спасибо - он уже сотоврил, - я даже пост поменял, - прочитайте плз - может быть будет полезное изменение в ваш код.
Ок. Quoting не использую, т.к. это черный ящик - не до конца понимаю где она может сработать не так. Делаю под себя квотера. Спасибо за совет.
http://stocksharp.com/platform/sources.aspx