Так тоже не всегда срабатывает.
Работает вот так

// расчитаем уровень, пересечение которого ценой трактуется как сигнал на смещение стопа в безубыток var stopMovePrice = longPos.EntryPrice + Income;

// если мы ушли выше уровня, или в прошлом пересекали уровень, тогда ставим безубыток.
if (high[i] > stopMovePrice || stopMoveFlagL)
{
stopMoveFlagL = true; // не забываем активировать флаг передвижки стопа!
var stop = longPos.EntryPrice + BU;
longPos.CloseAtStop(i + 1, stop, Slippage, "BS");
}
// иначе ставим простой стоп лосс
else
{
var stop = longPos.EntryPrice - StopSL;
longPos.CloseAtStop(i + 1, stop, Slippage, "BS");
}