同时运行一个以上的EA - 页 2

 

首先,确保你用一些有意义的默认值初始化了所有的变量。例如,你在初始化BuyTicket之前 使用它,所以在第一次运行时它可以是任何值。

摘自MQL4参考文件(MQL4参考/语言基础知识/变量/变量的初始化)。

If a variable is not initialized explicitly, the value stored in this variable can be any. Implicit initialization is not used.

所以,在下面的部分中,给变量添加默认值。

//Global Variables
int BuyTicket;
int SellTicket;
double InternalStopLoss;
double CalcDigits;
double CalcPoint;
bool MABuyFanning;
bool MASellFanning;
int SelectedOrder;
bool Closed;
int ErrorCode;
string ErrLog;
double BuyStopLoss;
double SellStopLoss;
bool NewBar;
double ThisBarOpen;
double SmallMA;
double MediumMA;
double LargeMA; 
 

而且,是的,MQL4有错误和怪癖,但大部分的错误只需阅读参考手册中的基本知识就可以避免了。

另外,有一篇关于MQL4程序中常见错误的文章。查看 论坛的顶部,你会发现链接。

 
drazen64:

首先,确保你用一些有意义的默认值初始化了所有的变量。例如,你在初始化BuyTicket之前 使用它,所以在第一次运行时它可以是任何值。

摘自MQL4参考文件(MQL4参考/语言基础知识/变量/变量的初始化)。

所以,在下面的部分中,给变量添加默认值。



这是真的,但是,这取决于使用情况。有时你只想声明它,因为你知道值将来自哪里,而有时你确实需要用一些东西来初始化它,因为如果它没有用特定的默认值初始化,它可能无法正常工作。
 
deysmacro:

这是真的,然而,这取决于使用情况。有时你只想声明它,因为你知道值将从哪里来,而有时你确实需要用一些东西来初始化它,因为如果它没有用特定的默认值初始化,它可能无法正常工作。


他不需要在定义的地方初始化变量,但他绝对应该在使用变量之前将其初始化为某个值。

如果他在初始化之前使用它们,值是不可预知的。他的错误也是如此。在进行更深入的代码分析 之前,他应该先处理好这个问题。

如果你试图使用未初始化的变量,现代编译器会引发错误。不幸的是,MQL4不会这样做,所以编码者必须确保所有的东西都被正确初始化。

 
你可以向他指出 1点,他使用var时没有适当的初始化。
 
deysmacro:
你可以向他指出 一件事,他在使用var时没有适当的初始化。


请阅读https://www.mql5.com/en/forum/151167/page2#954612 第一行中的第二句话

你可以在批评之前先看看 答案。

BTW,你在这里有什么帮助?"聪明 "的言论并没有什么帮助。

 
for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
                  {
                 // while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red);
                  if(Closed == true) BuyTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine");                  
                  }
            Counter--;               
                }
 

我在发我的帖子之前确实读过。我的意思是,给他看一个与var有关的东西,而那个var没有被正确初始化。


嘿嘿。GumRai打败了它。XD

 

如果我没有理解错的话,你是说他使用了未初始化的变量这一事实不需要担心,只是因为我没有准确指出在程序启动时BuyTicket和其他一些变量包含一些未知的值而可能发生什么?

好吧,那就这样吧。让他使用未初始化的变量。有什么可能出错呢?

 
我已经按照建议初始化了所有的变量,并从布尔运算中删除了"==true"。此外,我还删除了代码行内的所有银行空间。我在两个不同的符号上使用调试器进行了测试--一个在笔记本上,一个在电脑上,大约2个小时,它们都运行良好,在正确的时间卖出、买入和关闭,没有任何错误。然而,随后我将EA添加到PC和笔记本电脑上的另外3个符号上,这样,所有4个符号都在两个终端上工作,从那时起,所有符号都开始错过进场和退场。在测试结束时,在一个终端上,我在关闭未结头寸之前删除了EA,在另一个终端上,我在关闭未结头寸之后删除了EA。仍有未平仓头寸的终端花了很长的时间来移除EA,但没有未平仓头寸的终端则立即移除了所有4个EA。修订后的代码在下面单独发布。