Erreurs, bugs, questions - page 823

 
MetaDriver:

95% des erreurs sporadiques sont liées à des erreurs d'initialisation, ou à l'absence d'initialisation. Donc, un fragment de code n'aidera pas, et le code entier ne fera pas l'affaire, car il est paranoïaque ;-)

Il faut chercher la raison très loin du lieu de manifestation, et c'est ennuyeux pour aphthar - il est plus facile de demander le peloton d'exécution pour les développeurs. Cela aidera certainement.

// Ça aide vraiment, n'est-ce pas, Falkov ? : )

Super ! Il semble que cela devrait aider ! :)

Je fais carrément de l'initialisation PARTOUT et TOUJOURS ! Même si j'assigne une valeur à une variable après quelques lignes. Je viens d'établir une règle d'or : lorsque vous déclarez une variable, initialisez-la avec null ou une chaîne vide :)

A propos de la paranoïa, c'est tout à fait vrai !

Metadriver, vous êtes un chaman !

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

Super ! Il semble que ça devrait aider ! :)

:)

L'initialisation est stupide PARTOUT !

Je n'y crois pas ! J'ai dû le manquer cette fois-ci. :)

// Vérifiez encore une fois, regardez le code entier sous cet angle.

// C'est la croyance en votre "TOUJOURS ET EN TOUT TEMPS" qui peut filtrer la perception de votre propre bâillement, car "JE TOUJOURS... !!" :))

 
MetaDriver:
:)

Je n'y crois pas ! Je l'ai manqué cette fois-ci, c'est sûr. :)

// Vérifiez encore une fois, regardez le code entier sous cet angle.

// C'est la croyance en votre "partout et partout" qui peut filtrer la perception de votre propre bâillement, car "je suis TOUJOURS... !!" :))

Je vous le dis - Shaman ! Pendant le week-end, j'ai vérifié tous les fichiers EA (plusieurs milliers de lignes). Et c'est vrai, j'ai trouvé deux ou trois variables non initialisées dans de vieilles bibliothèques.

Ma règle est de déclarer TOUTES les variables au début du corps de la fonction (cela a toujours été le cas) et de les initialiser immédiatement (l'année dernière, probablement).

Je ne me considère pas comme un imbécile - j'ai écrit plus d'une centaine d'indices/scripts/conseillers différents :)

Et là, je me débats comme un poisson sur la glace - je n'arrive pas à localiser ! Je pourrais me tirer dessus !

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

Voici le code, au fait :

//Найти первое 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: Voici le code, d'ailleurs :

hmm, pourquoi ne pas vérifier les dépassements de tableau intShift=structSled.intShift_PastSearch ;

si intShift est hors des limites du tableau, alors while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}

provoquera immédiatement une erreur car le code sera exécuté de gauche à droite et la référence à structSled.adblArray_Short[intShift] se produira avant && intShift>1

vérifier après intShift=structSled.intShift_PastSearch ; et ensuite sortir si sortie en dehors du tableau alors Print(Hurray ! ça a marché !)

comme ceci

 
Bonsoir, pourrait-il y avoir une fonction comme celle-ci
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    ));   
      }
Les structures doivent-elles être mises à zéro lors de la déclaration dans ce cas ?
 
MERCI ! !!
 

Tu sais, j'ai essayé de compiler dans ce formulaire, ça me fait peur.

'PositionGetInteger' - constant attendu.mq5 65 44 Je vois le mot constant. Mais de quoi a-t-il besoin ? C'est sur la première ligne de la fonction.

Et il en est de même pour toutes les autres déclarations de variables, mais j'ai déclaré la fonction conformément à l'aide, n'est-ce pas ?

price' - valeur par défaut manquante pour le paramètre order.mq5 65 92

 
Merci, je suis en train de compiler.