делаю так
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-18T14:10:16.8750000+03:00 [0] None => Quoting new order Buy
price 1720,99 volume 1
2010-03-18T14:10:17.9531250+03:00 [0] Error =>
System.ArgumentException: An item with the same key has already been
added.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource
resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue
value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue
value)
at Ecng.Collections.SynchronizedDictionary`2.Add(K key, V value)
at Ecng.Trading.Algo.BasePositionManager.RegisterPosition(Order
order)
at Ecng.Trading.Algo.StrategyPositionManager.OnNewOrder(Order
order)
at System.Action`1.Invoke(T obj)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T
arg)
at Ecng.Trading.Algo.Strategy.AddOrder(Order order)
at Ecng.Trading.Algo.Strategy. (Order )
at System.Action`1.Invoke(T obj)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T
arg)
at Ecng.Trading.Algo.Strategy.AddOrder(Order order)
at Ecng.Trading.Algo.QuotingStrategy.OnProcess()
at Ecng.Trading.Algo.Strategy.Process()
т.е. уже есть, надо убрать выражение base.AddOrder(order);
а без него было так
https://docs.google.com/leaf?id=0Bw2gQDvf41vtOWIzZjIwM2EtMjI2ZS00ZDcwLTg0NjktZjRjN2VjMWJiNzIy&sort=name&layout=list&num=50бежал за рынком почти четыре рубля, а проскальзывание равно нулю.
Значит надо самому корректировать через
base.SlippageManager.RegisterOrder(myOrder, newEstimatedPrice); ?
вывод проскальзывания делаю так
private void OnStrategyPropertyChanged(object sender,
PropertyChangedEventArgs e)
{
this.Sync(() =>
{
this.Status.Content = _strategy.ProcessState;
//this.PnL.Content = _strategy.PnL;
//this.Slippage.Content = _strategy.Slippage;
this.PnL.Content = _strategy.PnLManager.AbsoluteValue;
this.Slippage.Content =
_strategy.SlippageManager.Slippage;
this.Position.Content =
_strategy.PositionManager.Position;
});
}