TakeProfitStrategy - Объем заявки не может быть нулевым.
Версия 3.2.
При срабатывании сигнала запускается действие
Код
private void Action1()
{
var order = _signalDirection == OrderDirections.Buy ? base.BuyAt(Security.LastTrade.Price) : base.SellAt(Security.LastTrade.Price);
var qstr = new MyMarketQuotingStrategy(order, 0m.Pips(order.Security), 0m.Pips(order.Security)) { PriceType = MarketPriceTypes.Middle, MaxErrorCount = 2 };
base.ChildStrategies.Add(qstr);
SecureTrades(qstr);
}
private void SecureTrades(Strategy str)
{
str.NewMyTrades += trades =>
{
// создаем пакетную стратегию, которая будет объединять все защитные пары стратегий по каждой из пришедших по родительской стратегии сделок
var batch = new BatchStrategy(BatchFinishModes.All);
// для каждой сделки добавляем для защиты по пакетной стратегии
foreach (var t in trades)
{
var s = new BatchStrategy(BatchFinishModes.First);
// выставляет тейк-профит в пунктах
var takeProfit = new MyTakeProfitStrategy(t, TakeProfit);
takeProfit.BestPriceOffset = 0m.Pips(t.Order.Security);
takeProfit.PriceOffset = 0m.Pips(t.Order.Security);
takeProfit.MaxErrorCount = 2;
takeProfit.UseMarketQuoting = true;
// выставляет стоп-лосс в пунктах
var stopLoss = new MyStopLossStrategy(t, StopLoss);
stopLoss.BestPriceOffset = 0m.Pips(t.Order.Security);
stopLoss.PriceOffset = 0m.Pips(t.Order.Security);
stopLoss.MaxErrorCount = 2;
stopLoss.UseMarketQuoting = true;
s.ChildStrategies.Add(takeProfit);
s.ChildStrategies.Add(stopLoss);
batch.ChildStrategies.Add(s);
}
base.ChildStrategies.Add(batch);
};
}
В результате получаю следующий лог:
Код
VDS 15.06.2011 23:18:19 Стратегия запущена.
VDS 15.06.2011 23:20:01 [MMQS] Стратегия запущена.
VDS 15.06.2011 23:20:01 [MMQS] Регистрация новой заявки на Buy с ценой 9763 и объемом 1.
VDS 15.06.2011 23:20:01 [MMQS] Заявка 83837918 на Buy отправлена с ценой 9763 объемом 1.
VDS 15.06.2011 23:20:17 [MMQS] Позиция изменилась на 1.
VDS 15.06.2011 23:20:17 [MMQS] Заканчиваем котирование с неисполненным объемом равный 0.
VDS 15.06.2011 23:20:17 [MMQS] Стратегия останавливается.
VDS 15.06.2011 23:20:17 [MMQS] Стратегия остановлена.
VDS 15.06.2011 23:21:02 [MMQS] Стратегия запущена.
VDS 15.06.2011 23:21:09 [MMQS] Регистрация новой заявки на Buy с ценой 9763 и объемом 1.
VDS 15.06.2011 23:21:11 [MMQS] Заявка 83837919 на Buy отправлена с ценой 9763 объемом 1.
VDS 15.06.2011 23:21:11 [MMQS] Позиция изменилась на 1.
VDS 15.06.2011 23:21:11 [MMQS] Заканчиваем котирование с неисполненным объемом равный 0.
VDS 15.06.2011 23:21:11 [MMQS] Стратегия останавливается.
VDS 15.06.2011 23:21:11 [BS] Стратегия запущена.
VDS 15.06.2011 23:21:11 [MMQS] Стратегия остановлена.
VDS 15.06.2011 23:21:11 [BS] [BS] Стратегия запущена.
VDS 15.06.2011 23:21:17 [BS] [BS] [MTPS] Стратегия запущена.
VDS 15.06.2011 23:21:17 [BS] [BS] [MTPS] Цена текущей 1 и лучшей 9783.
VDS 15.06.2011 23:21:17 [BS] [BS] [MTPS] Котирование заявки 0 на Sell с ценой 1 объемом 0.
VDS 15.06.2011 23:21:19 [BS] [BS] [MSLS] Стратегия запущена.
VDS 15.06.2011 23:21:19 [BS] [BS] [MTPS] System.ArgumentException: Объем заявки не может быть нулевым.
Parameter name: order
at StockSharp.Algo.TraderHelper.#=qLXaN0algzgDBsw6fL5g3xaIlhhTYVQnmzcQDJXxFOrU=(Order #=qWXq3jB6jTZ2iF22oDzWvHw==)
at StockSharp.Algo.TraderHelper.#=qDFpU1YoTr3fblYauaHBvMg==(Order #=q1610m$u1mmPjgA6udOcZdQ==)
at StockSharp.Algo.BaseTrader.ReRegisterOrder(Order oldOrder, Order newOrder)
at StockSharp.Algo.Strategies.Strategy.ReRegisterOrder(Order oldOrder, Order newOrder)
at StockSharp.Algo.Strategies.QuotingStrategy.#=qMEPRc8S0wl31v01gtQybow==()
at StockSharp.Algo.Strategies.QuotingStrategy.#=qrUj$Ns0mMAxxqh0k0FFJLBiPs_ZjpLzGs4nD7HMEB2Y=.#=qT87pKfV2SNITwCrVPXClEg==()
at StockSharp.Algo.Strategies.StrategyRule.#=qDYUeDT$gBHBaiAb$fAwEix6EMBQFWfxRkrpaRMiTmvs=()
at StockSharp.Algo.Strategies.Strategy.#=qOhBmTMx_CuyhB9VHemT_UQ==(StrategyRule #=qInhSYRIpOjVVx7xao$LOvA==, Action #=qIIVK4c4QTCW6iU5TC2n_LA==)
VDS 15.06.2011 23:21:19 [BS] [BS] [MTPS] Цена текущей 1 и лучшей 9783.
VDS 15.06.2011 23:21:19 [BS] [BS] [MTPS] Котирование заявки 0 на Sell с ценой 1 объемом 0.
VDS 15.06.2011 23:21:19 [BS] [BS] [MTPS] System.ArgumentException: Объем заявки не может быть нулевым.
Parameter name: order
at StockSharp.Algo.TraderHelper.#=qLXaN0algzgDBsw6fL5g3xaIlhhTYVQnmzcQDJXxFOrU=(Order #=qWXq3jB6jTZ2iF22oDzWvHw==)
at StockSharp.Algo.TraderHelper.#=qDFpU1YoTr3fblYauaHBvMg==(Order #=q1610m$u1mmPjgA6udOcZdQ==)
at StockSharp.Algo.BaseTrader.ReRegisterOrder(Order oldOrder, Order newOrder)
at StockSharp.Algo.Strategies.Strategy.ReRegisterOrder(Order oldOrder, Order newOrder)
at StockSharp.Algo.Strategies.QuotingStrategy.#=qMEPRc8S0wl31v01gtQybow==()
at StockSharp.Algo.Strategies.QuotingStrategy.#=qrUj$Ns0mMAxxqh0k0FFJLBiPs_ZjpLzGs4nD7HMEB2Y=.#=qT87pKfV2SNITwCrVPXClEg==()
at StockSharp.Algo.Strategies.StrategyRule.#=qDYUeDT$gBHBaiAb$fAwEix6EMBQFWfxRkrpaRMiTmvs=()
at StockSharp.Algo.Strategies.Strategy.#=qOhBmTMx_CuyhB9VHemT_UQ==(StrategyRule #=qInhSYRIpOjVVx7xao$LOvA==, Action #=qIIVK4c4QTCW6iU5TC2n_LA==)
VDS 15.06.2011 23:21:19 [BS] [BS] Стратегия останавливается.
VDS 15.06.2011 23:21:19 [BS] [BS] [MSLS] Стратегия останавливается.
VDS 15.06.2011 23:21:19 [BS] [BS] Стратегия остановлена.
VDS 15.06.2011 23:21:19 [BS] [BS] [MTPS] Стратегия остановлена.
VDS 15.06.2011 23:21:19 [BS] [BS] [MSLS] Стратегия остановлена.
Баг или я что-то делаю не так?