[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 301

 
rustein:
我在论坛上搜索了一下,但没有找到一个快速的解决方案,帮助解决在测试器中不工作的问题,而在现实生活中却可以。

谢谢你。

如果它挂住了测试器,那么它就应该挂住。(一定要描述出环路的出口)。

像这样

    while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }
 
drknn:


很难说你的问题是什么。在MQL4中,作为一项规则,代码中的负数应该总是放在括号中。有时可能出现没有括号的错误。

虽然,在以extern开头的代码行中,在括号中取负值是没有必要的。我不知道为什么会这样。

谢谢你,但这不起作用,你能不能建议一个结构来摆脱这个循环 if(IsTesting()==true || IsOptimization()==true)
 
rustein:
谢谢,但这不起作用,你能不能建议一个结构来摆脱循环 if(IsTesting()==true || IsOptimization()==true)

 while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }

^^

 
drknn:
它不需要警报--我的理解是,在代码的某个地方,文件可能已经打开,但没有关闭。这可能就是为什么文件不能被重新打开,警报窗口不断弹出的原因。不过,也许我错了--我不是心灵感应俱乐部的成员 :(
情况如下:在某一时刻,专家顾问进入一个csv文件,并检查那里有什么命令(买入、卖出、关闭),这个命令由EXCEL写入文件中。问题是目前,当专家将读取文件时,它可以被EXCEL打开,Ekspert会给出一个错误,就这样,我需要它再去尝试,直到它读取命令。
我不知道, 建设...
请检查我写得是否正确。
 
int init()
{
while(handle<1)
{ 
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t') 
} 

}

 
sanches83:

}

是的,为什么要问,你可以用 "战斗 "来测试它))。
 
rustein:
谢谢,但这不起作用,你能不能建议一个结构来摆脱循环 if(IsTesting()==true || IsOptimization()==true)


试试完全没有循环,像这样说。

double  PR,SL,TP;
PR=NormalizeDouble(Ask,Digits);
SL=NormalizeDouble(PR-StopLoss*Point,Digits);
TP=NormalizeDouble(PR+TakeProfit*Point,Digits);
int Result=0;
Result = OrderSend(Symbol(),OP_BUY,Lots,PR,Slippage,SL,TP,OrderComments,Magic,0,CLR_NONE);
if(Result<=0){
        Print("Ошибка № ",GetLastError()," при открытии бай-ордера. PR = ",PR,"   SL = ",SL,"   TP = ",TP);
}

这至少会有助于理解为什么姿势打不开。

 
costy_:

^^

非常感谢 :)

谢谢大家,修好了,可以用了。

非常感谢您的帮助。

 
costy_:
是的,我们为什么要问,我们可以通过 "战斗 "来检查它))。


一般来说,这是正确的,但为了使其工作,我们需要在循环之前初始化变量。

handle=0

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t')。
}

嗯,这只是为了绝对确保代码的执行会进入循环的主体,而不是忽略它。

 
drknn:


事实上,这是正确的,但为了工作,变量应该在循环之前被初始化。

handle=0

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t')。
}

这是为了确保代码的执行进入了循环体,而不是忽略它。

是的,不幸的是,我必须像算命先生一样,用问题上的部分代码创建脚本,好吧,或者所有的代码,这样会更容易让你指出错误。 咖啡渣zakAchyVeTso)。
 

伙计们,帮我一下吧!!!。

我正试图用早间通道策略编写一个EA。其本质是这样的:在6:01,在EURGBP货币对上,我们确定从0点到早上6点的价格运动通道。我们设置两个挂单,如果被触发的挂单被止损器关闭,我们就开一个相反方向的订单。正是该战略的第二部分不起作用。也就是说,如果一个止损点已经触发,我们就不能在相反的方向上开立一个订单。
附加的文件:
原因: