EA: 5_8 MACross - 页 3

 
Shara1:

你好,弗拉基米尔。是否可以在您的 Expert Advisor 中将买入和卖出分开,并按趋势进行分配?

谢谢。

我还没有对这段代码进行白金化 编辑。

 
Vladimir Karputov:

我还没有对这段代码进行白金化编辑。

弗拉基米尔,请给我一点提示。在测试器中运行后,报告中的参数不知为何颠倒了:mafastperiod-42 和 maslowperiod-12。事实上,快的参数应该小于慢的参数。我运行了两次,两次都得到了这样的结果。

谢谢。

 
Shara1:

弗拉基米尔,请给我一点提示。在测试器中运行后,报告中的参数不知为何颠倒了:mafastperiod-42 和 maslowperiod-12。事实上,快的参数应该小于慢的参数。我运行了两次,两次都得到了这样的结果。

谢谢。

"快"、"慢"--这些只是标签,是对参数的口头标注。但归根结底,所有参数都是数字。既然你开启了基因优化功能,并在成千上万的结果中进行了搜索,就不能排除这种意识逆转的可能:)。数字可以是任何东西,无论你如何称呼它--"慢 "或 "快"。

有时我会特别设置一个限制条件,比如 "慢 "不能大于或等于 "快",而有时我又不设置限制条件,结果就会很有趣。

 
Vladimir Karputov:

"快"、"慢"--这些都只是标签,是参数的口头标签。但归根结底,所有参数都是数字。既然你开启了基因优化,并在成千上万的结果中进行搜索,但也不排除这种意识上的逆转:)。数字可以是任何数字,无论你如何称呼它--"慢 "或 "快"。

有时我会设置一个禁令,比如 "慢 "不能大于或等于 "快",而有时我不设置禁令,却会得到有趣的结果。

如何在 EA 中设置这样的禁令?

谢谢。

 
Shara1:

如何在 EA 中实施这样的禁令?

谢谢。

在 OnInit() 中写入两个参数的比较。如果不符合条件,则卸载 EA,并提示错误。

 
Vladimir Karputov:

在 OnInit() 中写入两个参数的比较。如果不符合条件,则卸载 EA 并提示错误。

谢谢。

对我来说,现在还不可行。您完全不打算编辑这段代码吗?

 
弗拉基米尔,请告诉我在你的 EA:https://www.mql5.com/zh/code/19578 中是否有"慢 "不能大于或等于 "快 "的禁令。如果没有,请给我一个链接。
ma-shift Puria method
ma-shift Puria method
  • 投票: 14
  • 2017.12.13
  • Vladimir Karputov
  • www.mql5.com
В основу советника положен метод Пуриа с небольшими вольностями. Используется сигнал не пересечения быстрой MA медленной, а их движение в одну сторону, подтверждение при пересечении MACD своей нулевой линии и крутизной движения быстрой MA, выраженной в количестве пипсов на тик (параметр Shift (vertically) between MA Fast and MA Slow). Обычный...
 
Shara1:
弗拉基米尔,请告诉我在你的 EA:https://www.mql5.com/zh/code/19578 中是否有"慢 "不能大于或等于 "快 "的禁令。如果没有,请给我一个链接。

这个 EA 有这样的保护:

//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
  {
   if(InpTrailingStop>0 && InpFractalTrailing)
     {
      Print("If we use \"Fractal trailing\" - we do not use \"Trailing stop\"!");
      Print("If we use \"Trailing stop\" - we do not use fractal \"Fractal trailing\"!");
      return(INIT_PARAMETERS_INCORRECT);
     }

在这里,它会检查参数是否大于零,并且有一个标志。

 

但在EMA Cross Contest 对冲 代码中,已经保护了两个移动平均线指标的两个平均周期:

   if(InpShort_ma_period>=InpLong_ma_period)
     {
      Print("\"MA short: averaging period\" can not be greater and equal to \"MA long: averaging period\"");
      return(INIT_PARAMETERS_INCORRECT);
     }
 
Vladimir Karputov:

但在EMA Cross Contest 对冲 代码中,已经保护了两个移动平均线指标的两个平均周期:

也就是说,我需要在这一行之后 -int OnInit()

插入以下内容

 if(InpShort_ma_period>=InpLong_ma_period)
     {
      Print("\"MA short: averaging period\" can not be greater and equal to \"MA long: averaging period\"");
      return(INIT_PARAMETERS_INCORRECT);
     }

这样看起来就像这样了

//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
  {
 if(InpShort_ma_period>=InpLong_ma_period)
     {
      Print("\"MA short: averaging period\" can not be greater and equal to \"MA long: averaging period\"");
      return(INIT_PARAMETERS_INCORRECT);
     }

谢谢。