文章 "用 MQL5 语言编写的 20 种交易信号" - 页 4

 

感谢作者的文章!

不要按照 1CMaster 的建议去做,这简直是胡闹。

做点别的吧,在图表上画一条垂直线,移动哪些指标来显示此时此刻的状态(垂直线在哪里),而不是当前的状态?

 

代码可能很有价值,但有些指标是多余的:

BB 和标准偏差通道- 相同;

价格、Donchian 和 Gallagher 通道--同理;

无论如何,感谢您的文章...

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);
  }


考虑到指标线 的移动,复制这些缓冲区是必要的,但在这里却没有必要。

其次,如果只比较一个条形图,为什么要复制两个指标值,即每个缓冲区(线)复制一个值就足够了。

来自 AO 的信号:大量数据也被复制(它们不参与分析)。

     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:

鳄鱼信号形成错误


考虑到指标线 的移动,复制这些缓冲区是必要的,但在这里却没有必要。

其次,如果只比较一个条形图,为什么要复制两个指标值,即每个缓冲区(线)复制一个值就足够了。

来自 AO 的信号:大量数据也被复制(它们不参与分析)。

文章开头提到,为了消除异响,我们分析的不是零点,而是历史上的第一条柱形图, 为什么要复制零点柱形图呢?

我们并没有节省资源 ....



首先,帮助中写得很清楚。

Необходимо помнить, что смещение линии является чисто визуальным для отображения и значения в индикаторном буфере хранятся без смещения. 
При получении значений буфера функцией 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:
我不打算说出来,但我认为并不是每个人都使用偏置鳄鱼夹。因此,在这种情况下是没有错误的。你需要偏置,你就加了,需要的钢材也可以加。我再重复一遍,这篇文章的目的是说明如何正确处理指标及其数据,至于指标的多少和数量,则因人而异。

参考资料...

技术指标"鳄鱼 "是平衡线(移动平均线)与分形几何和非线性动力学的结合。

  • 蓝线(鳄鱼下巴) 是构建图表所用时间段的平衡线(13 期平滑移动平均线,向未来移动 8 条)
  • 红线(鳄鱼的牙齿) 是低一个数量级的有意义时间段的平衡线(8 期平滑移动平均线,向未来移动 5 个柱状图)
  • 绿线(鳄鱼嘴唇) 是另一个低一个数量级的有意义时间段的平衡线(5 期平滑移动平均线向未来移动 3 个柱状图)。


关键词以粗体显示。

您代码的结果是分析平均线

我提出的代码结果是分析鳄鱼线。

 
这些对学习非常有用,谢谢。
 
谢谢。