код такой:
// создаем заявку
var order = base.CreateOrder(direction,
base.Security.GetMarketPrice(direction, MarketPriceTypes.Following),
base.Volume);
// регистрируем ее (обычным способом лимитированной
заявкой)
base.Trader.RegisterOrder(order);
// добавляем зарегистрированную заявку в стратегию
base.AddOrder(order);
// регистрируем на котирование
var strategy = new MarketQuotingStrategy(base.Trader,
order, base.Interval, false, MarketPriceTypes.Following, new Unit());
strategy.Start();
base.ChildStrategies.Add(strategy);
логи:
2010-03-19T10:47:33.4531250+03:00 [0] None => Quoting renewing order
Buy with id 956757318 price 1712,02 volume 1 transaction 1
2010-03-19T10:47:34.2031250+03:00 [0] None => Quoting renewed order
Buy with id 956757441 price 1712,06 volume 1 transaction 2
2010-03-19T10:47:35.0781250+03:00 [0] None => Quoting renewing order
Buy with id 956757441 price 1712,06 volume 1 transaction 2
2010-03-19T10:47:36.4531250+03:00 [0] None => Quoting renewed order
Buy with id 956757686 price 1712,08 volume 1 transaction 3
2010-03-19T10:47:36.9062500+03:00 [0] None => Quoting renewing order
Buy with id 956757686 price 1712,08 volume 1 transaction 3
2010-03-19T10:47:38.2500000+03:00 [0] None => Quoting renewed order
Buy with id 956757857 price 1712,14 volume 1 transaction 4
2010-03-19T10:47:43.9375000+03:00 [0] None => Quoting renewing order
Buy with id 956757857 price 1712,14 volume 1 transaction 4
2010-03-19T10:47:44.7812500+03:00 [0] None => Quoting renewed order
Buy with id 956758519 price 1712,79 volume 1 transaction 5
2010-03-19T10:47:45.0937500+03:00 [0] None => Quoting renewing order
Buy with id 956758519 price 1712,79 volume 1 transaction 5
2010-03-19T10:47:45.1718750+03:00 [0] Error =>
System.ArgumentException: Заявка по транзакции 'CLASSCODE=EQBR;
SECCODE=LKOH; TRANS_ID=5; ACTION=KILL_ORDER; ORDER_KEY=956758519' не
была зарегистрирована. Причина 'Вы не можете снять данную заявку'.
Parameter name: transactionTxt
at . (String , OrderStatus& , Int32& , Double& , String& )
at Ecng.Trading.Quik.QuikTrader. (Order , String , Boolean ,
Boolean )
at Ecng.Trading.Quik.QuikTrader.CancelOrder(Order order)
at Ecng.Trading.Algo.TraderHelper.GuarantyCancelOrder(ITrader
trader, Order order)
at Ecng.Trading.Algo.TraderHelper.ReRegisterOrder(ITrader trader,
Order oldOrder, Func1 getNewPrice, Boolean isForts) at Ecng.Trading.Algo.QuotingStrategy.OnProcess() at Ecng.Trading.Algo.Strategy.Process() 2010-03-19T10:47:45.1718750+03:00 [0] None => MarketQuotingStrategy stopping 2010-03-19T10:47:45.4843750+03:00 [0] None => Quoting finishing by 956758519 2010-03-19T10:47:45.4843750+03:00 [0] None => Quoting cancelling order by 956758519 2010-03-19T10:47:46.3437500+03:00 [0] None => MarketQuotingStrategy stopped 2010-03-19T10:47:47.1406250+03:00 [0] None => Quoting renewing order Buy with id 956758695 price 1712,14 volume 1 transaction 6 2010-03-19T10:47:48.3593750+03:00 [0] None => Quoting renewed order Buy with id 956758871 price 1712,8 volume 1 transaction 7 2010-03-19T10:47:48.6718750+03:00 [0] None => Quoting renewing order Buy with id 956758871 price 1712,8 volume 1 transaction 7 2010-03-19T10:47:49.0312500+03:00 [0] Error => System.ArgumentException: Заявка по транзакции 'CLASSCODE=EQBR; SECCODE=LKOH; TRANS_ID=7; ACTION=KILL_ORDER; ORDER_KEY=956758871' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'. Parameter name: transactionTxt at . (String , OrderStatus& , Int32& , Double& , String& ) at Ecng.Trading.Quik.QuikTrader. (Order , String , Boolean , Boolean ) at Ecng.Trading.Quik.QuikTrader.CancelOrder(Order order) at Ecng.Trading.Algo.TraderHelper.GuarantyCancelOrder(ITrader trader, Order order) at Ecng.Trading.Algo.TraderHelper.ReRegisterOrder(ITrader trader, Order oldOrder, Func1 getNewPrice, Boolean isForts)
at Ecng.Trading.Algo.QuotingStrategy.OnProcess()
at Ecng.Trading.Algo.Strategy.Process()
2010-03-19T10:47:49.0312500+03:00 [0] None => MarketQuotingStrategy
stopping
2010-03-19T10:47:49.3437500+03:00 [0] None => Quoting finishing by
956758871
2010-03-19T10:47:49.3437500+03:00 [0] None => Quoting cancelling
order by 956758871
2010-03-19T10:47:50.4531250+03:00 [0] None => MarketQuotingStrategy
stopped
2010-03-19T10:47:51.3593750+03:00 [0] None => Quoting renewing order
Buy with id 956759112 price 1712,14 volume 1 transaction 8
2010-03-19T10:47:52.1718750+03:00 range error: {0}
System.ArgumentOutOfRangeException: Specified argument was out of the
range of valid values.
Parameter name: min
at Ecng.ComponentModel.Range1.ValidateBounds(T min, T max) at Ecng.ComponentModel.Range1.Init(T min, T max)
at Ecng.ComponentModel.Range`1..ctor(T min, T max)
at SampleSMA.MainWindow.DrawSma() in D:\trade\bot\code\stockSharp
\SampleSMA\MainWindow.xaml.cs:line 243
Первый этап обработки исключения типа
"System.ArgumentOutOfRangeException" в приложении
Ecng.ComponentModel.dll
2010-03-19T10:47:52.7343750+03:00 [0] None => Quoting renewed order
Buy with id 956759254 price 1712,98 volume 1 transaction 9
2010-03-19T10:48:02.6718750+03:00 [0] None => Quoting renewing order
Buy with id 956759254 price 1712,98 volume 1 transaction 9
2010-03-19T10:48:03.8125000+03:00 [0] None => Quoting renewed order
Buy with id 956760263 price 1712,99 volume 1 transaction 10
2010-03-19T10:48:07.4218750+03:00 [0] None => Quoting order 956760263
matched
2010-03-19T10:48:07.4218750+03:00 [0] None => MarketQuotingStrategy
stopping
2010-03-19T10:48:07.8593750+03:00 [0] None => Quoting finishing by
956760263
2010-03-19T10:48:07.8593750+03:00 [0] None => MarketQuotingStrategy
stopped
В результате этих действий было куплен один лот лука. Видно что
котировщик уже не прыгает на месте, гуд. Но выключается без исполнения
по факту ошибки, а для этого у меня уже добавлен код, который сверяет
требуемую позу с текущей и в случае необходимости запускает
котировщика снова для набора позы. Похоже что все работает, кроме
проскальзывания, которое равно нулю. Но это не критично.