Стратегии и роботы > Пример использования индикатора Fractal

Обсуждение, описание стратегий и роботов, идеи для стратегий
Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Пример использования индикатора Fractal

Непрочитанное сообщение evge » 16 дек 2016, 13:32

Пример постановки стоп заявки на уровне последнего минимума по индикатору Fractal

Код: Выделить всё

/**TestFractalStop
Developed by evge;**/

function Initialize()
{
   StrategyName = "TestFractalStop";
   AddParameter("Period", 5, "", 1);
   AddParameter("Take", 1, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "SBER=МБ ЦК");
   LongLimit = 100;
   ShortLimit = 100;

   AddGlobalVariable("L", Types.Double, 0.0);
}

function OnUpdate()
{
   var F = MY.Fractal(Input1, Period)["L"];

   if (!Double.IsNaN(F[Period])) L = F[Period];
   
   if ( (Input1.Close[1] < Input1.Close[0]) && CurrentPosition() == 0 )
   {
      EnterLong();
      if (L != 0) StopLoss(L, SignalPriceType.Price);
   }

   if (CurrentPLper() >= Take && CurrentPosition() > 0) CloseLong();
}


Скачать код

TestFractalStop.ads
(670 байт) 2261 скачивание


Пример работы

TestFractalStop-01.png
TestFractalStop-01.png (36.86 КБ) 22429 просмотров
никогда такого не было и вот опять

ilya0610
Сообщения: 16
Зарегистрирован: 03 май 2018, 21:20

Re: Пример использования индикатора Fractal

Непрочитанное сообщение ilya0610 » 21 май 2018, 21:05

А можете показать, как ставить стоп-лосс на максимум, когда открываешь шорт, в этом же коде
И для чего нужен параметр Take?

ilya0610
Сообщения: 16
Зарегистрирован: 03 май 2018, 21:20

Re: Пример использования индикатора Fractal

Непрочитанное сообщение ilya0610 » 21 май 2018, 21:17

И как в конечном итоге это объединить с индикаторов HeikenAshi

Код: Выделить всё

/**

**/

function Initialize()
{
   StrategyName = "HeikenAshi_withfractal";
   AddParameter("Bars_Blue", 3, "", 1);
   AddParameter("Bars_Magenta", 2, "", 1);
   //AddParameter("delta_short", 2, "", 1);
   //AddParameter("delta_long", 2, "", 1);
   AddParameter("Period", 5, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 10;
   ShortLimit = -10;
   AddChartIndicator("MY.HeikenAshi", new Dictionary <string, double>{});
   
   AddGlobalVariable("L", Types.Double, 0.0);
   
   AddGlobalVariable("H", Types.Double, 0.0);
}

function OnUpdate()
{

   var Hei = MY.HeikenAshi(Input1);
   
   var F = MY.Fractal(Input1, Period)["L"];
   var F2 = MY.Fractal(Input1, Period)["H"];
   
   var HO = Hei["Open"];
   var HC = Hei["Close"];
   int x = 0, y = 0;
   bool isLong = true, isShort = true;
   
   if (!Double.IsNaN(F[Period])) L = F[Period];
   if (!Double.IsNaN(F2[Period])) H = F2[Period];
   
   while( x != Bars_Blue)
   {
      if (HO[x] > HC[x]) isLong = false;
      if (!isLong) break;
      x++; 
   }
    while( y != Bars_Magenta)
   {
      if (HO[y] < HC[y]) isShort = false;
      if (!isShort) break;
      y++; 
   }
   if ( isLong )
   {
      EnterLong();
     if(L!=0) StopLoss(L, SignalPriceType.Price);
   }

   if ( isShort )
   {
      EnterShort();
      if(H!=0) StopLoss(H, SignalPriceType.Price);
   }
}



Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Пример использования индикатора Fractal

Непрочитанное сообщение evge » 22 май 2018, 08:46

ilya0610 писал(а):А можете показать, как ставить стоп-лосс на максимум, когда открываешь шорт, в этом же коде


тоже самое, только смотрим в серию "H" индикатора Fractal, а открываем позицию EnterShort(). Стоп ставим по уровню фрактала из глоб. переменной "H", куда ранее сохранили фрактал.

Код: Выделить всё

/**TestFractalStop
Developed by evge;**/

function Initialize()
{
   StrategyName = "TestFractalStop";
   AddParameter("Period", 5, "", 1);
   AddParameter("Take", 1, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "SBER=МБ ЦК");
   LongLimit = 100;
   ShortLimit = 100;

   AddGlobalVariable("H", Types.Double, 0.0);
}

function OnUpdate()
{
   var F = MY.Fractal(Input1, Period)["H"];

   if (!Double.IsNaN(F[Period])) H = F[Period];
   
   if ( (Input1.Close[1] > Input1.Close[0]) && CurrentPosition() == 0 )
   {
      EnterShort();
      if (H != 0) StopLoss(H, SignalPriceType.Price);
   }

   if (CurrentPLper() >= Take) CloseShort();
}


ilya0610 писал(а):И для чего нужен параметр Take?


Для фиксации прибыли. Задается в данном примере в %.
Условие закрытия позиции в последней строке приведенного выше кода:

Код: Выделить всё

   if (CurrentPLper() >= Take) CloseShort();


Из документации:

CurrentPLper() – возвращает изменение цены в процентах относительно учетной цены по открытой позиции в процентах.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Пример использования индикатора Fractal

Непрочитанное сообщение evge » 22 май 2018, 08:58

ilya0610 писал(а):И как в конечном итоге это объединить с индикаторов HeikenAshi


Будут ситуации, когда индикатор HeikenAshi будет показывать сигнал на вход по стратегии, а фрактал ещё не определен из ближайшего и он будет, например, при открытии EnterLong() сам стоп по L будет выше чем вход в позицию.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Пример использования индикатора Fractal

Непрочитанное сообщение evge » 22 май 2018, 09:16

Как пример для установки стопов на уровнях H, L, который не претендует на рабочий вариант стратегии.

Условие для isLong:

Если текущая цена выше L, то открываем Long + Stop на уровне L. Если цена ниже или равна L проверяем текущую позицию, если шорт, то закрываем его.

И для противоположной позиции isShort всё наоборот.

Код: Выделить всё

/**

**/

function Initialize()
{
   StrategyName = "HeikenAshi_withfractal";
   AddParameter("Bars_Blue", 3, "", 1);
   AddParameter("Bars_Magenta", 2, "", 1);
   //AddParameter("delta_short", 2, "", 1);
   //AddParameter("delta_long", 2, "", 1);
   AddParameter("Period", 5, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 10;
   ShortLimit = -10;
   AddChartIndicator("MY.HeikenAshi", new Dictionary <string, double>{});
   
   AddGlobalVariable("L", Types.Double, 0.0);
   
   AddGlobalVariable("H", Types.Double, 0.0);
}

function OnUpdate()
{

   var Hei = MY.HeikenAshi(Input1);
   
   var F = MY.Fractal(Input1, Period);
   
   var HO = Hei["Open"];
   var HC = Hei["Close"];
   int x = 0, y = 0;
   bool isLong = true, isShort = true;
   
   if (!Double.IsNaN(F["L"][Period])) L = F["L"][Period];
   if (!Double.IsNaN(F["H"][Period])) H = F["H"][Period];
   
   while( x != Bars_Blue)
   {
      if (HO[x] > HC[x]) isLong = false;
      if (!isLong) break;
      x++; 
   }
    while( y != Bars_Magenta)
   {
      if (HO[y] < HC[y]) isShort = false;
      if (!isShort) break;
      y++; 
   }
   if ( isLong )
   {
       if (L != 0)
       {
         if (Input1.Close[0] > L)
            {
          EnterLong();
          StopLoss(L, SignalPriceType.Price);
            } else
            if (CurrentPosition() < 0) CloseShort();
       }
   }

   if ( isShort )
   {
       if (H != 0)
       {
         if (Input1.Close[0] < H)
            {
          EnterShort();
          StopLoss(H, SignalPriceType.Price);
            } else
            if (CurrentPosition() > 0) CloseLong();
       }
   }
}
никогда такого не было и вот опять

Аватара пользователя
Tyler_Durden
Сообщения: 68
Зарегистрирован: 01 дек 2017, 20:42
Благодарил (а): 6 раз

Re: Пример использования индикатора Fractal

Непрочитанное сообщение Tyler_Durden » 23 май 2018, 22:08

Дело за малым - отучить АД ждать закрытия бара.

arego
Сообщения: 5
Зарегистрирован: 24 фев 2024, 07:44

Re: Пример использования индикатора Fractal

Непрочитанное сообщение arego » 30 сен 2024, 19:36

Воскрешу тему.

Если мне нужно чтобы для тестирования в момент прорисовки фрактала советник выдавал сообщение, то код можно переписать так?
И мне нужно ещё одно сообщение - когда цена становится ниже фрактального минимума - отправлять ещё одно сообщение?


Код: Выделить всё

function OnUpdate()
{
   var F = MY.Fractal(Input1, Period)["L"];

   if (!Double.IsNaN(F[Period])) L = F[Period];
   
   if ( (Input1.Close[1] < Input1.Close[0]) && CurrentPosition() == 0 )
   {
      EnterLong();
      if (L != 0) StopLoss(L, SignalPriceType.Price);
   }

   if (CurrentPLper() >= Take && CurrentPosition() > 0) CloseLong();
   
}


Код: Выделить всё

function OnUpdate()
{
   var F = MY.Fractal(Input1, Period)["L"];

   if (!Double.IsNaN(F[Period])) L = F[Period];
   
   if ( (Input1.Close[1] < Input1.Close[0]) && CurrentPosition() == 0 )
   {
     ShowMessage ("Точка открытия по закрытию фрактала");
     LCurrent=L;
   }

   if (Input1.Low[0]<LCurrent) ShowMessage ("Точка ниже точки предыдущего минимума");
}


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя