Трейл-стоп начинает работать со следующего бара, на которым было открытие позиции. А мне надо чтобы он работал сразу после открытия позиции - как это реализовать???
Стоп ордер по трейл стопу может появиться только при наличии открытой позиции. Скрипт об этом (о том, что имеется открытая им позиция) узнает только после очередного пересчёта. Приказ, поданный на открытие позиции ещё не открытая позиция (скрипт только отправляет приказ на открытие, позицию открывает брокер, или ещё точнее биржа по указанию брокера). Так что единственный выход это ставить интервал пересчёта "сделка". Чтобы такой интервал пересчёта нормально работал, копите на мощное железо (например сервер в арендованной у брокера ячейке) + на быстрый канал связи, например Plaza 2.
Есть и альтернативное решение, которое частично решает проблему.
Если интервал пересчёта алгоритма (таймфрейм) выбран от 5-минут и выше, то работайте от "сжатия". Интервал выбираете минутный, а все расчёты в скрипте от сжатия. В этом случае скрипт будет пересчитывать себя каждую минуту, а алгоритм будет работать по большему (заданному в сжатии) интервалу. И тогда стоп ордер у вас появится через минуту после обнаружения скриптом открытой позиции (данные о наличии открытой позиции присылает в скрипт брокер, скрипт их только распознаёт как свои).
Вот примерно так. Если посылать приказ на стоп ордер одновременно с приказом на открытие позиции, то может произойти ситуация, когда позиция не будет открыта, а стоп ордер выставлен. Правила выставления стоп ордеров у разных брокеров тоже несколько отличаются. Например в Алоре можно поставить стоплосс выше текущих цен, у Айти стоплосс только ниже текущих котировок.