Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
El 95% de los errores esporádicos están relacionados con errores de inicialización, o con la falta de ella. Por lo tanto, un fragmento de código no servirá de nada, y el código completo tampoco, porque es paranoico ;-)
Hay que buscar la causa muy lejos del lugar de la manifestación, y es aburrido para el aftar - es más fácil exigir que se dispare a los promotores. Seguro que le ayudará.
// Realmente ayuda, ¿no es así, falkov? : )
¡Genial! Parece que debería ayudar. :)
Yo hago la inicialización en todas partes y SIEMPRE. Incluso si asigno un valor a una variable después de un par de líneas. Acabo de establecer una regla de hierro: cuando declares una variable, iníciala con null o una cadena vacía :)
Acerca de la paranoia, ¡tiene toda la razón!
Metadriver, ¡eres un chamán!
¡Genial! Parece que debería ayudar. :)
La inicialización es una estupidez en todas partes.
¡No lo puedo creer! Debo haberme perdido esta vez. :)
// Compruébalo de nuevo, mira todo el código desde este ángulo.
// Es la creencia en tu "SIEMPRE Y SIEMPRE" la que puede filtrar la percepción de tu propio bostezo, pues "¡¡¡Siempre!!!" :))
:)
No me lo creo, esta vez me lo he perdido seguro :)
// Comprueba de nuevo, revisa todo el código desde este ángulo.
// Es la creencia en tu "TODO y TODOS" la que puede filtrar la percepción de tu propio bostezo, pues "¡Siempre...!" :))
Te lo digo, ¡chamán! Durante el fin de semana revisé todos los archivos de EA (varios miles de líneas). Y es cierto, he encontrado dos o tres variables no inicializadas en bibliotecas antiguas.
Mi regla es declarar TODAS las variables al principio del cuerpo de la función (siempre ha sido así) e inicializarlas inmediatamente (el año pasado, probablemente)
No me considero un tonto - he escrito más de cien índices/scripts/asesores diferentes :)
Y aquí estoy luchando como un pez en el hielo: ¡no puedo localizar! ¡Podría dispararme!
Por cierto, aquí está el código:
//Найти первое 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, por qué no compruebas los desbordamientos del array intShift=structSled.intShift_PastSearch;
si intShift está fuera de los límites del array entonces while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}
causará inmediatamente un error porque el código se ejecutará de izquierda a derecha y la referencia a structSled.adblArray_Short[intShift] ocurrirá antes de && intShift>1
establecer la comprobación después de intShift=structSled.intShift_PastSearch; y luego la salida si la salida fuera de la matriz entonces Print(Hurra! Funcionó!)
así
Ya sabes, he tratado de compilar en esta forma, me asusta.
'PositionGetInteger' - constante esperada.mq5 65 44 Veo la palabra constante. ¿Pero qué necesita? Está en la primera línea de la función.
Y así es para todas las demás declaraciones de variables, pero he declarado la función según la ayuda, ¿no?
'price' - falta el valor por defecto del parámetro order.mq5 65 92