新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1361

 
azolotta:

谢谢,这真的解决了问题!!!。

如果你不介意的话,你能告诉我应该添加什么样的结构,使其不显示连续的两个高/低点,而是显示一个变化性(高-低-高)?我明白我需要一个检查,比如 "如果前一个数组元素 是高,那么第二个连续的高就不应该包括在数组中,而要等待低",但是应该如何做呢?

我已经向你解释过了。

 
DanilaMactep:

大家下午好。我已经开了检查,但我忘了测试。好在我今天想起了这件事......这里是对MOD停止水平的检查

当测试这个检查时,出现了下面截图中的错误

而有趣的是 我被建议在此基础上增加了1.5的检查支配权,具体如下


这一补充并没有解决问题,出现了如下截图中的测试错误。

如果这个对MOD停止级别的检查被注释掉,就不会有错误。检查中的错误是什么,请告知?没有它,你就不能在现实世界中启动圣杯--将被立即禁止L O_o

我认为错误不在测试中,而是在你规定的地方。

还有,在这里你可以删除 "*1,5"

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
 
DanilaMactep:

大家下午好。我已经开了检查,但我忘了测试。好在我今天想起了这件事......这里是对修改停止水平的这种检查

当测试这个检查时,出现了下面截图中的错误

而有趣的是 我被建议在此基础上增加了1.5的检查支配权,具体如下


这一补充并没有解决问题,出现了如下截图中的测试错误。

如果这个对MOD停止级别的检查被注释掉,就不会有错误。检查中的错误是什么,请告知?没有它,你就不能在现实世界中启动圣杯--将被立即禁止L O_o

检查它是否返回一个停止的水平,它通常是0

   int    Stoplevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
   int    Spread = (int)MarketInfo(Symbol(), MODE_SPREAD);

   if (Stoplevel == 0) Stoplevel = 2 * Spread;

   

所以像这样。

 
Alekseu Fedotov:

检查停止水平 的回报,它通常是0

像这样。

他不需要这个,是 "如果低于水平"。

 
DanilaMactep:

大家下午好。

严重的错误......没有直接看到它。

if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

它应该是DOTS。

 
azolotta:
不显示连续的两个高/低,但要有变化(高-低-高)。

你可以用一个简单的方法来做。声明一个全局变量 并根据事件改变它。

int direction=0;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {


   for(n=0; n<=limit; n++)
     {
      if(direction>=0 && ((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3])))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
         direction=-1;
        }
      else
         if(direction<=0 && ((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3])))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
            direction=1;
           }
      }
.......

在指标中,使用OnCalculate 函数和它的所有变量

而 "开始 "已经是不时尚的了:)

 
Aleksei Stepanenko:

你可以用一个简单的方法来做。声明一个全局变量 并根据事件改变它。

在指标中,使用OnCalculate 函数和它的所有变量

而 "开始 "已经不流行了:)

谢谢!这是个很酷的方法!)

得到了 关于OnCalculate 的消息,我将加入其中))

 
Aleksei Stepanenko:

你可以用一个简单的方法来做。声明一个全局变量 并根据事件改变它。

在指标中,使用OnCalculate 函数和它的所有变量

而 "开始 "已经是不时尚的了:)

不起作用,新的高/低点将不会考虑到它们。
 

下午好。当我在我的专家顾问中调用该指标时,方框中显示有一个错误。 为什么会出现这种情况?而且并不总是如此。它在下列情况下工作正常

终端,它工作得很好。


 
Sergey Fionin:

下午好。当我在我的专家顾问中调用该指标时,方框中显示有一个错误。 为什么会出现这种情况?而且并不总是如此。它在下列情况下工作正常

终端,它工作得很好。


这是一个写入的违规行为,一个系统写入的禁令。