Здравствуйте, коллеги.
Помогите пожалуйста разобраться, почему не активируется 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).
Kommentare (4)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Обнаружил, что StopLoss активируется, но только для первой сделки. В аттаче - тест, который иллюстрирует проблему. Тестовые данные - тики RIU9, которые идут со StockSharp.
А на реале такой код работает?
Проверил на тестовой плазе - StopLoss'ы работают. Проблема только с EmulationTrader.
Соберите пожалуйста логи EmulationTrader с уровнем логирования Debug воспроизводяший не -исполнение стоплосса.
Лучше всего использовать FileLog с единым файлом под логи всего - так проще увидеть последовательность.
Несрабатывание стоплосса может быть связано как с неверным расчетом pnl так и с неправильным (не)поступлением трейдов/бид-асков в стратегию стоплосса.
Вы при тестировании используете какие стаканы? pnl считается по bestbid/bestask. Если у вас непонятно по каким причинам стаканов нет, а bestbid/bestask не null, то будет считаться неправильный pnl и стоплосс не сработает.