Я думаю, что проблема в выставлении стоп-лосса может быть связана с тем, как вы определяете переменные longSL и shortSL. Вы используете функцию barssince, которая возвращает количество баров с последнего истинного значения условия. Однако, если условие было истинным на текущем баре, то функция вернет ноль, а не единицу. Это может привести к тому, что стоп-лосс будет выставлен на уровне strategy.position_avg_price, а не на уровне close - close * stopPer или close + close * stopPer. <br/> <br/> Чтобы исправить эту ошибку, вы можете добавить единицу к результату функции barssince, чтобы учитывать текущий бар. Например, вместо: <br/> <br/> longSL := if inLong and barssince(longClose) < barssince(longCondition) strategy.position_avg_price else if inLong longSL1 else close - close * stopPer <br/> <br/> Вы можете написать: <br/> <br/> longSL := if inLong and barssince(longClose) + 1 < barssince(longCondition) + 1 strategy.position_avg_price else if inLong longSL1 else close - close * stopPer <br/> <br/> Аналогично для shortSL. Это должно обеспечить более точное выставление стоп-лосса в соответствии с вашими параметрами.