Обсуждение статьи "20 торговых сигналов на MQL5" - страница 4

 

Спасибо автору за статью!

Не делайте то, что советует 1CMaster это просто бред.

Сделайте лучше другое, выведите на график вертикальную линию  сдвигая которую индикаторы показывали состояние именно этого момента (где находится вертикальная линия), а не текущего?

 

Код может быть полезен, но некоторые индикаторы излишни:

BB и Standard Deviation Channel - одно и то же;

Price , Donchian и Gallagher Channels - одно и то же;

В любом случае, спасибо за статью...

Documentation on MQL5: Standard Constants, Enumerations and Structures / Objects Constants / Object Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Objects Constants / Object Properties - Documentation on MQL5
 

Ошибка в формировании сигнала от Аллигатора

.....
      if(CopyBuffer(h_al,0,0,2,al1_buffer)<2)
         return(0);
      if(CopyBuffer(h_al,1,0,2,al2_buffer)<2)
         return(0);
      if(CopyBuffer(h_al,2,0,2,al3_buffer)<2)
         return(0);
      if(!ArraySetAsSeries(al1_buffer,true))
         return(0);
      if(!ArraySetAsSeries(al2_buffer,true))
         return(0);
      if(!ArraySetAsSeries(al3_buffer,true))
         return(0);
     }
//--- проводим проверку условия и устанавливаем значение для sig
   if(al3_buffer[1]>al2_buffer[1] && al2_buffer[1]>al1_buffer[1])
      sig=1;
   else if(al3_buffer[1]<al2_buffer[1] && al2_buffer[1]<al1_buffer[1])
      sig=-1;
   else sig=0;

//--- возвращаем торговый сигнал
   return(sig);
  }


Копирование данных буферов необходимо с учетом сдвига линий индикатора а тут нет

Второе зачем копировать два значения индикатора если сравнивается только на одном баре то есть достачно одного значения на каждый буфер (линию)

Сигнал от АО : тоже копируется много данных (они не участвуют  в анализе)

     if(CopyBuffer(h_ao,1,0,20,ao_buffer)<20)
         return(0);
      if(!ArraySetAsSeries(ao_buffer,true))
         return(0); 

причем в начале статьи было сказано что бы убрать дребезг будем анализировать не нулевой а первый бар  в историю то зачем копировать нулевой ?

Не экономим ресурсы ....

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 
olyakish:

Ошибка в формировании сигнала от Аллигатора


Копирование данных буферов необходимо с учетом сдвига линий индикатора а тут нет

Второе зачем копировать два значения индикатора если сравнивается только на одном баре то есть достачно одного значения на каждый буфер (линию)

Сигнал от АО : тоже копируется много данных (они не участвуют  в анализе)

причем в начале статьи было сказано что бы убрать дребезг будем анализировать не нулевой а первый бар  в историю то зачем копировать нулевой ?

Не экономим ресурсы ....



Во первых в справке ясно написано

Необходимо помнить, что смещение линии является чисто визуальным для отображения и значения в индикаторном буфере хранятся без смещения. 
При получении значений буфера функцией CopyBuffer() значение смещения никакого эффекта иметь не будет.

Во вторых возможно я и допустил где - то ошибки с копированием данных, но это не влияет на основную суть задачи. Цель статьи показать как правильно обращаться к индикаторам и данным.

 

Кстати лично я использую такую конструкцию, в данном случае данные от функции можно передавать сразу в торговый запрос.

ENUM_ORDER_TYPE ind_01()
  {
   ENUM_ORDER_TYPE sig=WRONG_VALUE;

   if(IND01_handle==INVALID_HANDLE || IND01_handle==0)
     {
      IND01_handle=iAC(_Symbol,TF_01);
      return(WRONG_VALUE);
     }
   else
     {
      if(CopyBuffer(IND01_handle,1,0,AC_shift+3,IND01_buffer1)<AC_shift+3) return(WRONG_VALUE);
      if(!ArraySetAsSeries(IND01_buffer1,true)) return(WRONG_VALUE);

      if(CopyBuffer(IND01_handle,0,0,AC_shift+1,IND01_buffer2)<AC_shift+1) return(WRONG_VALUE);
      if(!ArraySetAsSeries(IND01_buffer2,true)) return(WRONG_VALUE);
     }

   if(IND01_buffer2[AC_shift]>0.0 && IND01_buffer1[AC_shift]==0 && IND01_buffer1[AC_shift+1]==0)sig=ORDER_TYPE_BUY;
   else if(IND01_buffer2[AC_shift]<0.0 && IND01_buffer1[AC_shift]==0 && IND01_buffer1[AC_shift+1]==0 && IND01_buffer1[AC_shift+2]==0)sig=ORDER_TYPE_BUY;
   else if(IND01_buffer2[AC_shift]<0.0 && IND01_buffer1[AC_shift]==1 && IND01_buffer1[AC_shift+1]==1)sig=ORDER_TYPE_SELL;
   else if(IND01_buffer2[AC_shift]>0.0 && IND01_buffer1[AC_shift]==1 && IND01_buffer1[AC_shift+1]==1 && IND01_buffer1[AC_shift+2]==1)sig=ORDER_TYPE_SELL;
   else sig=WRONG_VALUE;

   return(sig);
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
sergey1294:

Во первых в справке ясно написано

Во вторых возможно я и допустил где - то ошибки с копированием данных, но это не влияет на основную суть задачи. Цель статьи показать как правильно обращаться к индикаторам и данным.

ДА верно визуальное но и ориентируемся мы на визуальное значение при входе в сделку а не на то как они лежат в памяти терминала по этому и нужно  это учитывать

Правильно будет так для аллигатора 13 на 8, 8 на 5, 5 на 3 (стандартные значения)

int TradeSignal_17()
  {
   int sig=0;

   if(h_al==INVALID_HANDLE)
     {
      h_al=iAlligator(Symbol(),Period(),13,0,8,0,5,0,MODE_SMMA,PRICE_MEDIAN);
      return(0);
     }
   else
     {
      if(CopyBuffer(h_al,0,8,2,al1_buffer)<2)
         return(0);
      if(CopyBuffer(h_al,1,5,2,al2_buffer)<2)
         return(0);
      if(CopyBuffer(h_al,2,3,2,al3_buffer)<2)
         return(0);
      if(!ArraySetAsSeries(al1_buffer,true))
         return(0);
      if(!ArraySetAsSeries(al2_buffer,true))
         return(0);
      if(!ArraySetAsSeries(al3_buffer,true))
         return(0);
     }
//--- проводим проверку условия и устанавливаем значение для sig
   if(al3_buffer[1]>al2_buffer[1] && al2_buffer[1]>al1_buffer[1])
      sig=1;
   else if(al3_buffer[1]<al2_buffer[1] && al2_buffer[1]<al1_buffer[1])
      sig=-1;
   else sig=0;

//--- возвращаем торговый сигнал
   return(sig);
  }
 
olyakish:

ДА верно визуальное но и ориентируемся мы на визуальное значение при входе в сделку а не на то как они лежат в памяти терминала по этому и нужно  это учитывать

Правильно будет так для аллигатора 13 на 8, 8 на 5, 5 на 3 (стандартные значения)

Не буду утверждать, но я не думаю что все используют алигатора со смещением. Так что ошибок в этом случае нет. Вам понадобилось смещение вы его и добавили, так же могут и стальные сделать кому это необходимо. Повторюсь еще раз, цель стати показать как правильно обращаться к индикаторам и их данным, а сколько и  в каком количестве их получать это дело каждого индивидуально.
 
sergey1294:
Не буду утверждать, но я не думаю что все используют алигатора со смещением. Так что ошибок в этом случае нет. Вам понадобилось смещение вы его и добавили, так же могут и стальные сделать кому это необходимо. Повторюсь еще раз, цель стати показать как правильно обращаться к индикаторам и их данным, а сколько и  в каком количестве их получать это дело каждого индивидуально.

Справка...

Технический Индикатор Alligator — это комбинация Линий Баланса (Скользящих Средних, Moving Averages) , использующих фрактальную геометрию и нелинейную динамику.

  • Синяя линия (Челюсть Аллигатора) — это Линия Баланса для временного периода, который использовался для построения графика (13-периодное сглаженное скользящее среднее, сдвинутое на 8 баров в будущее);
  • Красная линия (Зубы Аллигатора) — это Линия Баланса для значимого временного периода на порядок ниже (8-периодное сглаженное скользящее среднее, сдвинутое на 5 баров в будущее);
  • Зеленая линия (Губы Аллигатора) — это Линия Баланса для значимого временного периода, который ниже еще на один порядок (5-периодное сглаженное скользящее среднее, сдвинутое на 3 бара в будущее).


Ключевые слова выделены жирным.

Итог Вашего кода это анализ средних

Итог мною предложенного кода это анализ линий аллигатора.

 
Это действительно полезно для обучения, спасибо.
 
Очень полезно для начинающих, как я, спасибо.