Errores, fallos, preguntas - página 823

 
MetaDriver:

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!

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

¡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!!!" :))

 
MetaDriver:
:)

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!

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

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;
}
//-------------------------------------------------------------------------------------------------

 
falkov: Por cierto, aquí está el código:

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í

 
Buenas noches, ¿podría haber una función como esta
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    ));   
      }
¿Es necesario poner a cero las estructuras al declarar en este caso?
 
¡¡¡GRACIAS!!!
 

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

 
Gracias, ahora estoy compilando.
 
Razón de la queja: