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
是的,我已经知道了,并进行了纠正。现在在时间框架代码中出现了错误。
//--- 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.
@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。
我正在尝试根据我自己的策略编写EA,并借助其他一些EA和Indis的代码,但现在卡在一件事上。
我无法理解这个逻辑,也不知道它到底是什么。
PS:一个朋友喜欢我的策略并创建了这个EA。但我失去了这两样东西(EA和那位编码员朋友的联系方式),所以现在我想测试一下我非常基本的编码知识,因为我真的希望这个策略能再次被编码。