错误、漏洞、问题 - 页 823

 
MetaDriver:

95%的零星错误都与初始化错误有关,或缺乏初始化。 所以,一个 代码片段不会有帮助,整个代码也不会,因为它是偏执的;-)

应该在离表现的地方很远的地方寻找原因,对于阿法尔来说,这很无聊--要求对开发商进行行刑更容易。这肯定会有帮助。

// 这确实有帮助,不是吗 法尔科夫?)

很好!看来它应该有帮助!:)

我直截了当地在所有地方都做了初始化,而且始终如此!"。即使我在几行之后给一个变量赋值。我刚刚制定了一条铁律--当你声明一个变量 时,用null或空字符串初始化它 :)

关于偏执狂绝对是对的!

Metadriver,你是一个萨满!

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
falkov:

很好!似乎应该有帮助!:)

:)

初始化在任何地方都是愚蠢的!

我不相信!这次我一定是错过了。 :)

//真的再检查一下,从这个角度看一下整个代码。

// 是对你的 "永远和永远 "的信念,可能会过滤你自己打哈欠的感知,因为 "我永远......!" :) )

 
MetaDriver:
:)

我不相信!这次我肯定错过了。 :)

//真的再检查一下,从这个角度看一下整个代码。

// 正是对你的 "无处不在,无时不在 "的信念,可以过滤你自己打哈欠的感知,因为 "我总是......!" :) )

我告诉你--萨满!在周末,我检查了所有的EA文件(几千行)。而且是真的,我在旧库中发现了两三个未初始化的变量。

我的规则是在函数体 的开头声明所有的变量(这一直是事实),并立即初始化它们(去年,可能)。

我不认为自己是个傻瓜--我已经写了一百多个不同的指数/脚本/顾问 :)

而我在这里就像一条冰上的鱼一样挣扎着--我无法定位!我可以向自己开枪!

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

顺便说一下,这是代码。

//Найти первое adblArray_Short х adblArray_Long  ПОСЛЕ (позже) intShift_PastSearch (поиск от intShift_PastSearch до нулевого бара)
void FindCrossArrays_PastThisShift(structS & structSled) {
    datetime adtmDTM[];
    int intShift=0;
   
    if(structSled.intShift_PastSearch>_cintBarsAmountForCalc) {return;}
    else if(structSled.intShift_PastSearch<=0) {return;}
   
    ArrayResize(adtmDTM,structSled.intBarsAmountForCalc);
    ArrayInitialize(adtmDTM,0);
    ArraySetAsSeries(adtmDTM,true);
   
    CopyTime(structSled.strSymbol,structSled.enumTF,0,structSled.intShift_PastSearch+1,adtmDTM);

    intShift=structSled.intShift_PastSearch;
   

                                    ▼ - вот здесь ошибка - array out of range in '_indMyAO_from_SetPeriod.mq5' (390,37)
    while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}


    if(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift]) {
        while(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
       
        if(intShift>0) {
            structSled.intRet_FindingDirection=-1;
            structSled.intRet_FindingShift=intShift;
        }
        else {
            structSled.intRet_FindingDirection=0;
            structSled.intRet_FindingShift=intShift;
        }
    }   
    else if(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift]) {
        while(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
       
        if(intShift>0) {
            structSled.intRet_FindingDirection=1;
            structSled.intRet_FindingShift=intShift;
        }
        else {
            structSled.intRet_FindingDirection=0;
            structSled.intRet_FindingShift=intShift;
        }
    }   
    structSled.dtmRet_FindingDTM=adtmDTM[structSled.intRet_FindingShift];
    return;
}
//-------------------------------------------------------------------------------------------------

 
falkov: 顺便说一下,这是代码。

hmm,你为什么不检查数组 超限 intShift=structSled.intShift_PastSearch。

如果intShift超出了数组的限制, while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}。

将立即导致错误,因为代码将从左到右执行,对structSled.adblArray_Short[intShift]的引用将发生在&&intShift>1之前。

设置检查后intShift=structSled.intShift_PastSearch;然后输出如果退出阵列外则Print(Hurray! It worked!)

像这样

 
晚上好,能不能有一个这样的函数
void  PositionModify( int PositionTicket= PositionGetInteger(POSITION_IDENTIFIER), double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
      {  MqlTradeRequest request;
         MqlTradeResult result;
        request.action= TRADE_ACTION_SLTP; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol();
        request.sl= stoploss;
        request.tp= takeprofit;
        return (OrderSend( request,   result    ));   
      }
在这种情况下,申报时是否需要将结构归零?
 
谢谢你!!!
 

你知道,我试着用这种形式来编译,它让我感到害怕。

'PositionGetInteger' - 常数预期.mq5 65 44 我看到常数这个词。但它需要什么呢?它在该函数的第一行。

所有其他的变量声明都是这样的,但我已经按照帮助声明了函数,不是吗?

'price' - 缺少参数order.mq5的默认值 65 92

 
谢谢,我现在正在编纂。