Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Il 95% degli errori sporadici sono legati a errori di inizializzazione, o mancanza di essa. Quindi, un frammento di codice non aiuterà, e l'intero codice non lo farà, perché è paranoico ;-)
La ragione va cercata molto lontano dal luogo della manifestazione, ed è noioso per aphthar - è più facile chiedere il plotone d'esecuzione per gli sviluppatori. Aiuterà di sicuro.
// Aiuta davvero, vero, falkov? : )
Grande! Sembra che dovrebbe aiutare! :)
Faccio senza mezzi termini l'inizializzazione OVUNQUE e SEMPRE! Anche se assegno un valore a una variabile dopo un paio di righe. Ho appena fatto una regola di ferro - quando dichiari una variabile, inizializzala con null o con una stringa vuota :)
Sulla paranoia assolutamente giusto!
Metadriver, sei uno sciamano!
Grande! Sembra che dovrebbe aiutare! :)
L'inizializzazione è stupida ovunque!
Non ci credo, devo essermelo perso questa volta :)
// Controllate davvero di nuovo, guardate l'intero codice da questa angolazione.
// È la convinzione del tuo "SEMPRE E SEMPRE" che può filtrare la percezione del tuo stesso sbadiglio, perché "IO SEMPRE...!!!" :))
:)
Non ci credo, questa volta mi è sfuggito di sicuro :)
// Controllate di nuovo, guardate l'intero codice da questa angolazione.
// È la convinzione del tuo "OVUNQUE e OVUNQUE" che può filtrare la percezione del tuo stesso sbadiglio, perché "IO SEMPRE...!!!" :))
Te lo dico io - Sciamano! Durante il fine settimana ho controllato tutti i file EA (diverse migliaia di righe). Ed è vero, ho trovato due o tre variabili non inizializzate nelle vecchie librerie.
La mia regola è dichiarare TUTTE le variabili all'inizio del corpo della funzione (è sempre stato così) e inizializzarle immediatamente (l'anno scorso, probabilmente)
Non mi considero uno stupido - ho scritto più di un centinaio di indici/script/consiglieri diversi :)
E qui sto lottando come un pesce sul ghiaccio - non riesco a localizzare! Potrei spararmi!
A proposito, ecco il codice:
//Найти первое 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;
}
//-------------------------------------------------------------------------------------------------
hmm, perché non controllate l'overrun dell'array intShift=structSled.intShift_PastSearch;
se intShift è fuori dai confini dell'array allora while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}
causerà immediatamente un errore perché il codice sarà eseguito da sinistra a destra e il riferimento a structSled.adblArray_Short[intShift] avverrà prima di && intShift>1
impostare il controllo dopo intShift=structSled.intShift_PastSearch; e poi l'uscita se esce fuori dall'array allora Print(Hurray! Ha funzionato!)
come questo
Ho provato a compilare in questa forma, mi fa paura.
'PositionGetInteger' - costante attesa.mq5 65 44 Vedo la parola costante. Ma di cosa ha bisogno? È nella prima riga della funzione.
Ed è così per tutte le altre dichiarazioni di variabili, ma ho dichiarato la funzione secondo l'aiuto, no?
'price' - valore predefinito mancante per il parametro order.mq5 65 92