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

 
novichok2018: 谢谢你!我理解这些惯例,我会考虑到它们。但要理解建议的脚本,唉,我对mcl4的了解还不够。对不起 :( 。

我所有的实验都是用脚本完成的。在你的终端中运行该脚本。改变一些线条,或者把它扔掉。看看会发生什么

 

我想找到指标数据的最小最大值,我已经做了 "一切按照手册",但感觉指标数据没有被写入数组。MQL pro告诉我,我在哪里犯了错误。

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

我想找到指标数据的最小最大值,我已经做了 "一切按照手册",但感觉指标数据没有被写入数组。如果你是一个MQL专家,请告诉我我在哪里犯了错误。

变量极限的值大于零。因此,没有一个循环会运行。因此,ArrayGreen和ArrayRad将继续未被填补。

如果我们将极限值设置为零或更少,程序将循环到第一个循环。

因此,我们需要修改循环条件。最有可能的是,它应该这样做。

 for (int i = 0; i < limit; i++)
 
Corvin85:

我想找到指标数据的最小最大值,我已经做了 "一切按照手册",但感觉指标数据没有被写入数组。我有一个很好的MQL专业人员,请告诉我哪里犯了错误。

另外,在iCustom(...........);最后传递的参数i

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

类似这样的事情。

 
谢谢你!它正在工作
 

下午好!


为了测试的方便,我想去掉启用和禁用条件的按钮,这样我就不必每次都进入代码,也不必把条件改成文本,这样就不会生效了。

换句话说,现在我是这样做的。

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

像这样把它关掉。

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

试着把启用和禁用拉到输入bool Y=True;(其中Y是条件)的设置中,把Y分配给条件,如果条件起作用或不起作用,通过else if分出分支。但有些事情没有成功。

你能建议在这种情况下如何进行吗?

 
YanSay:

下午好!


为了测试的方便,我想去掉启用和禁用条件的按钮,这样我就不必每次都进入代码,也不必把条件改成文本,这样就不会生效了。

换句话说,现在我是这样做的。

像这样把它关掉。

试着把启用和禁用拉到输入bool Y=True;(其中Y是条件)的设置中,把Y分配给条件,如果条件起作用或不起作用,通过else if分出分支。但有些事情没有成功。

请告诉我们在这种情况下该怎么做?

人们可以做以下工作

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

你可以这样做。

原因是该算法忽略了False条件,并继续进行下一个条件。

input bool FLAG =False;

算法将不会进一步发展,而当代码为False时,它应该忽略这个条件,并进入下一个条件。

在我的情况下,唯一的选择是指定2个分支?

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

还是有一个更简单的方法?

 
YanSay:

在你的版本中,事实证明,如果值

算法将不会进一步发展,而如果这个条件是假的,它应该忽略这个条件,并进入下一个条件。

在我的情况下,唯一的选择是写两个分支?

还是有一个更简单的方法?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

在你的变体中,事实证明,如果值

算法将不会进一步发展,而如果这个条件是假的,它应该忽略这个条件,并进入下一个条件。

在我的情况下,唯一的选择是写两个分支?

还是有一个更简单的方法?

只有这种方式

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))
原因: