需要一些帮助

 

我正在尝试根据我自己的策略编写EA,并借助其他一些EA和Indis的代码,但现在卡在一件事上。

(user defined lot sizes for each trade)

extern string LotsProgression="0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1";

extern bool RestartNewCycle = true;

(and the code)

int init()

{

int i,j,k;

string ls;

while (true) {

        j=StringFind(LotsProgression,";",i);

        if (j>0) {

                ls=StringSubstr(LotsProgression,i,j-i);

                i=j+1;

                k++;

                ArrayResize(lots,k);

                lots[k-1]=StrToDouble(ls);

        } else {

                ls=StringSubstr(LotsProgression,i);

                k++;

                ArrayResize(lots,k);

                lots[k-1]=StrToDouble(ls);

                break;

        }

}



plen=ArraySize(lots);

}

我无法理解这个逻辑,也不知道它到底是什么。

PS:一个朋友喜欢我的策略并创建了这个EA。但我失去了这两样东西(EA和那位编码员朋友的联系方式),所以现在我想测试一下我非常基本的编码知识,因为我真的希望这个策略能再次被编码。

 
qgmql:

我正在尝试根据我自己的策略编写EA代码,借助于其他一些EA和Indis的代码,但现在卡在一件事上。

<删除


请使用 SRC按钮 来发布代码。. .
 
qgmql: 我无法理解这种逻辑,也不知道它到底是什么。

extern string LotsProgression="0.1;0.1;0.2;0.3 ...

double lots[];     // [0]=0.1 [1]=0.1 [2]=0.2 [3]=0.3 [34]=661.1
int    plen;       // 35
int init(){ ... }

在分号处拆分字符串,将子串转换为双数,并 数值存入动态数组。
 

你提到的事情是可以的。问题是在代码的其他部分。我得到两个错误(仅在新的元编辑器中)。

'init' - function can be declared only in the global scope

and

'init' - function already defined and has body
 
qgmql:

你提到的事情是可以的。问题是在代码的其他部分。我得到两个错误(仅在新的元编辑器中)。

听起来你在另一个函数 中声明了init(),然后又第二次定义了它 . .
 

是的,我已经知道了,并进行了纠正。现在在时间框架代码中出现了错误。

   //--- EA PARAMETERS
extern int      EA_TF=240;
extern bool     Forced_TF=True;


bool   TF;

     if(Forced_TF != True) TF = EA_TF;     //These two lines i think, have error.
     else TF = Period();                   //New metaeditor is not accepting "TF = EA_TF;" from above line.

如果Forced_TF为真,那么EA应该只从所述的时间框架进行交易并获得信号,即使活动图表(我放置EA的地方)是在不同的时间框架上打开。如果值为假,那么它应该在任何时间框架上工作。

 
qgmql:

是的,我已经知道了,并进行了纠正。现在在时间框架代码中出现了错误。

如果Forced_TF为真,那么EA应该只从所述的时间框架进行交易并获得信号,即使活动图表(我放置EA的地方)是在不同的时间框架上打开。如果值为假,那么它应该在任何时间框架上工作。

你把TF设为bool . .....但你试图把它设为int......试试这个。

   //--- EA PARAMETERS
extern int      EA_TF=240;
extern bool     Forced_TF=True;


int   TF;

     if(!Forced_TF) TF = EA_TF;     //These two lines i think, have error. 
     else TF = Period();            //New metaeditor is not accepting "TF = EA_TF;" from above line.
 
发布所有的代码,或者至少说明截断的情况。那个IF/ELSE必须是在一个函数 里面。
 

@RaptorUK 我找到你了。同样,在旧的编辑器中一切正常,但新的编辑器仍然给出一个警告,在错误行后的代码中引用。

//+------------------------------------------------------------------+
//|                                                   01Multi_EA.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property version   "1.00"
#property strict

//--- input parameters
input int      EA_TF=60;
input bool     Forced_TF=True;
input int      MagicNumber=12345;
input int      FastMA_Period=5;
input int      FastMA_Shift=0;
input int      FastMA_Method=1;
input int      FastMA_Price=0;
input int      SlowMA_Period=34;
input int      SlowMA_Shift=0;
input int      SlowMA_Method=1;
input int      SlowMA_Price=0;
input string   LotsProgression="0.01;0.02;0.03;0.04;0.05;0.06;0.07;0.08;0.09;0.10;0.11;0.12;0.13;0.14;0.15;0.16;0.17;0.18;0.19;0.20";
input bool     NewCycle=True;
input int      Limit_TP=50;
input bool     Use_TP=False;
input int      Limit_SL=50;
input bool     Use_SL=False;
input int      MaxSlippage=3;
input int      OrderTries=10;

int      TF, Plen;
double   TP, SL, pips2dbl, pips2point, pipValue, Slippage, Lots[];
         
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//----
 if(Forced_TF != True) TF = EA_TF;
      else TF = Period();
   int i,j,k;
   string ls;
   while (true) {
        j=StringFind(LotsProgression,";",i);
        if(j>0) {
                ls=StringSubstr(LotsProgression,i,j-i);    // <<<<<"possible use of uninitialized variable 'i'	01Multi_EA.mq4	46	38">>>>>

                i=j+1;
                k++;
                ArrayResize(Lots,k);
                Lots[k-1]=StrToDouble(ls);
        } else {
                ls=StringSubstr(LotsProgression,i);
                k++;
                ArrayResize(Lots,k);
                Lots[k-1]=StrToDouble(ls);
                break;
        }
   }


   Comment("Copyright © 2004, MetaQuotes Software Corp.");
   
   if (Digits == 5 || Digits == 3)
   {            
      pips2dbl = Point*10; pips2point = 10; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
   } 
   else 
   {    
      pips2dbl = Point;   pips2point = 1; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*1;
   }
   
   Slippage = pips2dbl*MaxSlippage;
   TP = pips2dbl*Limit_TP;
   SL = pips2dbl*Limit_SL;
   
//----
   return(INIT_SUCCEEDED);
  }

@WHRoeder 粘贴了整个代码。

 
qgmql:

@RaptorUK 我找到你了。同样,在旧的编辑器中一切正常,但新的编辑器仍然给出一个警告,在错误行后的代码中引用。

@WHRoeder 粘贴了整个代码。

这不是一个错误,是一个警告......为了摆脱这个警告,请初始化这个变量,而不是仅仅声明它。 在mql4中,当你声明一个变量时,它也被初始化了,现在有了mql4.5,你必须明确地初始化这个变量,如果你想 ...

int i = 0, j, k;   //  i initialised to 0
 
pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
不要单独使用tickvalue https://www.mql5.com/en/forum/133792/page3#512466