Ипонамама писал(а):программный стоп и по-моему трейлинг стоп
Ипонамама писал(а):помогите написать
Это не проблема. Просто код будет уже открыт, в конструктор уже такой код не вернешь и все манипуляции с кодом только в исходнике.
Написал. Есть ньюансы:
- стоплосс задается в шагах цены
- после срабатывания стоплосса позиция в том же направлении не переоткрывается и ожидается сигнал в другую сторону
Провел оптимизацию и тестирование для SBER 1H (см. ниже) на 2000 баров, для других ТФ нужно смотреть

Вообщем вот код
Код: Выделить всё
/**Стратегия основана на определении моментов пересечения быстрой экспоненциальной скользящей средней и медленной экспоненциальной скользящей средней (система "ES"). Особенности:
- сигнал на покупку выдается, если быстрая EMA пересекает медленную SMA снизу вверх;
- сигнал на продажу выдается, если быстрая EMA  пересекает медленную SMA  сверху вниз;
- при тестировании цена сделки фиксируется как цена закрытия бара, на котором появился сигнал.
- в роботе заявка выставляется после закрытия бара, на котором появился сигнал.
- стоплосс задается в шагах цены
- после срабатывания стоплосса позиция в том же направлении не переоткрывается и ожидается сигнал в другую сторону
Developed by evge;
Algorithm = ТРЕНД;**/
function Initialize()
{
   StrategyName = "evge_ES_TRS";
   AddParameter("Pfast", 3, "", 1);
   AddParameter("Pslow", 75, "", 0);
   AddParameter("TRS", 0.5, "", 0);  //трейлинг стоп в шагах цены
   AddInput("Input1", Inputs.Candle, 60, true, "SBER=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
   AddGlobalVariable("StopLoss", Types.Double, 0.0); //StopLoss цена
   AddGlobalVariable("P", Types.Int, 0); //позиция 0 - нет, 1 - long, 2 - short
   AddGlobalVariable("NP", Types.Int, 0); //запрет открытия позиции 0 - нет запрета, 1 - long, 2 - short
}
function OnUpdate()
{
   // Определяем стоп
   if (CurrentPosition() > 0 && P != 1) { P = 1; StopLoss = 0; }
   if (CurrentPosition() < 0 && P != 2) { P = 2; StopLoss = 0; }
   if (CurrentPosition() == 0) P = 0;
   if (P == 1 && ((Input1.Close[0] - TRS) > StopLoss || StopLoss == 0)) StopLoss = Input1.Close[0] - TRS;
   if (P == 2 && ((Input1.Close[0] + TRS) < StopLoss || StopLoss == 0)) StopLoss = Input1.Close[0] + TRS;
   //
   /// ПРАВИЛО 1
   if ( NP != 1 && (EMA(Input1.Close, Pfast) > SMA(Input1.Close, Pslow)) )
   {
      NP = 1; 
      EnterLong();
   }
   else
   /// ПРАВИЛО 2
   if ( NP != 2 && (EMA(Input1.Close, Pfast) < SMA(Input1.Close, Pslow)) )
   {
      NP = 2; 
      EnterShort();
   }
   else
   // закрываем Long по StopLoss
   if ( (P == 1) && (Input1.Close[0] < StopLoss)) { 
      CloseLong();
   }
   else
   // закрываем Short по StopLoss
   if ( (P == 2) && (Input1.Close[0] > StopLoss)) { 
      CloseShort();
   }
}
 Изображения (1057)
 Изображения (1057) Архивы (82)
 Архивы (82) Текстовые файлы (9)
 Текстовые файлы (9) Документы (7)
 Документы (7) Скрипты Альфа-Директ 4 (30)
 Скрипты Альфа-Директ 4 (30)