Здравствуйте, коллеги.
Помогите пожалуйста разобраться, почему не активируется StopLoss при тестировании на истории. Пытаюсь выставлять минимальный stoploss следующим кодом:
private void ProtectTrades(IEnumerable<MyTrade> trades)
{
if (StopLoss > 0)
{
var protectiveStrategies = trades.Select(t =>
{
var stoploss = new StopLossStrategy(t, Security.MinStepSize);//new Unit(StopLoss, UnitTypes.Percent));
stoploss.WaitAllTrades = true;
return stoploss;
}
});
ChildStrategies.AddRange(protectiveStrategies);
}
}
Код выполняется, StopLoss добавляется, но при достижении порога защита не активируется. Кусочек лога с запуском стратегии:
2012.10.18 12:26:00.043| |TestStrategy|Opening long position...
2012.10.18 12:26:00.043| |TestStrategy|Открываем позицию. finishPosition=1
2012.10.18 12:26:00.043| |TestStrategy|Снятие всех активных заявок.
2012.10.18 12:26:00.360| |SLS_RIZ2@RTS_TEST|Стратегия запущена. [0,3]. Позиция при старте 0.
2012.10.18 12:26:00.360| |SLS_RIZ2@RTS_TEST|Защита сделки 5 заявки 43943107.
2012.10.18 12:26:00.360| |SLS_RIZ2@RTS_TEST|Котирование на Sell объема 1.
2012.10.18 12:26:00.360| |SLS_RIZ2@RTS_TEST|Приостановка правил. _rulesSuspendCount 1.
2012.10.18 12:26:00.360| |SLS_RIZ2@RTS_TEST|Возобновление правил. _rulesSuspendCount 0.
2012.10.18 12:26:00.360| |TestStrategy|Новая Buy сделка 5 по цене 151560 на 1 заявки 43943107.
2012.10.18 12:26:00.360| |TestStrategy|Long position opened. #2
2012.10.18 12:26:00.360| |TestStrategy|Новая позиция: TEST-RIZ2@RTS=1.
2012.10.18 12:27:00.297| |TestStrategy|Candle: 18.10.2012 12:26:00, 151560, 151570, 151530, 151540, 456
Как видим, после покупки по 151560 со StopLoss'ом 10 появилась свечка с low price 151530, т.е. stoploss должен был сработать.
Обратил внимание, что если вручную инициализировать поле Security, то ActivationPrice для стратегии будет равна 0.
StockSharp обновлен с Codelex только что (4.1.6, commit 20868).
Comentários (4)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Обнаружил, что StopLoss активируется, но только для первой сделки. В аттаче - тест, который иллюстрирует проблему. Тестовые данные - тики RIU9, которые идут со StockSharp.
А на реале такой код работает?
Проверил на тестовой плазе - StopLoss'ы работают. Проблема только с EmulationTrader.
Соберите пожалуйста логи EmulationTrader с уровнем логирования Debug воспроизводяший не -исполнение стоплосса.
Лучше всего использовать FileLog с единым файлом под логи всего - так проще увидеть последовательность.
Несрабатывание стоплосса может быть связано как с неверным расчетом pnl так и с неправильным (не)поступлением трейдов/бид-асков в стратегию стоплосса.
Вы при тестировании используете какие стаканы? pnl считается по bestbid/bestask. Если у вас непонятно по каким причинам стаканов нет, а bestbid/bestask не null, то будет считаться неправильный pnl и стоплосс не сработает.