MT5 如何把数组传递到子程序

 

大家好,我是MQL5的小白。

我打算把一些MAFast[],MASlow[],Open[],Closes[]这些数据传递到子程序里面去,想知道主程序的那个语句应该怎么写呢,还有子程序开头的地方是否有错误呢?谢谢了。


若大家有时间,也教教我这个子程序是否有优化的地方。

double findSL(string flag,double &closes[i])
{
double closes[];
double opens[];
double highs[];
double lows[];
double tops[];
double buttoms[];
datetime shijians[];
double Lasthigh=0;
double LLasthigh=0;
double Lastlow=0;
double LLastlow=0;
double returnlast=0;
int    jj=200;                        


   Lasthigh=0; Lastlow=SymbolInfoDouble(m_symbol.Name(),SYMBOL_ASKLOW);
   for(int i=jj-2;i>=1;i--)//   for(int i=jj-3;i>=3;i--)
      {
         if(closes[i]>Lasthigh) Lasthigh=closes[i];
         if(closes[i]<Lastlow)  Lastlow=closes[i];
         Print("MAslow "+MAslow[i]);
         if(closes[i]>MAslow[i] && closes[i-1]<MAslow[i-1])
                  {
                  //Print("The Highest: "+Lasthigh+" @ "+shijians[i]);
                  returnlast=Lasthigh;
                  break;
                  }
           
          if(closes[i]<MAslow[i] && closes[i-1]>MAslow[i-1])
                  {
                  //Print("The Lowest: "+Lastlow+" @ "+shijians[i]);
                  returnlast=Lastlow;
                  break;
                  }     
      }      
      return(returnlast);
}
 

如果你所说的 MAFast[], MASlow[] ... 都是外部变量,这样写也无妨,传入参数不需要做额外处理。

子程序(函数)开头写的应该不对,那个"double &closes[i]"会编译出错吧。我估计本意应该是 "double close_at_i;",也就是传入某个柱的close吧。

它和函数内局部变量的"double closes[]"也会混淆,另外有些局部变量以及函数参数flag还没有使用,不确定是写多了还是逻辑不完整。

如果子程序是:

double findSL(string flag, double close_at_i)
{
 ...
}

主程序就是

...
double sl = findSL(some_flag, closes[i]);
...


如果 MAFast[], MASlow[] ... 这些不是外部变量,那就通过函数参数传入了。

比如子程序是:

double findSL(string flag, double & MAFast[], double & MASLow[], double & Opens[], double & Closes[], double close_at_i)
{
 ...
}

主程序就是

...
double sl = findSL(some_flag, MAFast[], MASlow[], Opens[], Closes[], closes[i]);
...

具体应该怎么写还是要看你的逻辑和变量命名之类的。

 
Jian Chen:

如果你所说的 MAFast[], MASlow[] ... 都是外部变量,这样写也无妨,传入参数不需要做额外处理。

子程序(函数)开头写的应该不对,那个"double &closes[i]"会编译出错吧。我估计本意应该是 "double close_at_i;",也就是传入某个柱的close吧。

它和函数内局部变量的"double closes[]"也会混淆,另外有些局部变量以及函数参数flag还没有使用,不确定是写多了还是逻辑不完整。

如果子程序是:

主程序就是


如果 MAFast[], MASlow[] ... 这些不是外部变量,那就通过函数参数传入了。

比如子程序是:

主程序就是

具体应该怎么写还是要看你的逻辑和变量命名之类的。

感谢版主。我先尝试一下。

有关closes[],我在主程序里面已经取了200个数值,我是想把这200个都带到子程序,通过子程序做一次分析/计算的。

原因: