Erros, bugs, perguntas - página 823

 
MetaDriver:

95% dos erros esporádicos estão relacionados com erros de inicialização, ou falta deles. Assim, um fragmento de código não ajudará, e o código inteiro não servirá, porque é paranóico ;-)

A razão deve ser procurada muito longe do local de manifestação, e é aborrecido para aphthar - é mais fácil exigir um pelotão de fuzilamento para os promotores. Ajudará com certeza.

// Realmente ajuda, não é, falkov ? : )

Óptimo! Parece que deve ajudar! :)

Faço a inicialização TUDO AQUI e SEMPRE! Mesmo que eu atribua um valor a uma variável após um par de linhas. Acabei de fazer uma regra de ferro - quando declara uma variável, inicialize-a com um fio nulo ou um fio vazio :)

Sobre a paranóia absolutamente correcta!

Metadriver, você é um xamã!

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

Óptimo! Parece que deve ajudar! :)

:)

Inicializar é estúpido em TODO o lado!

Não acredito! Desta vez, devo ter falhado :)

// Verifique-o realmente de novo, olhe para todo o código a partir deste ângulo.

// É a crença no seu "SEMPRE E SEMPRE" que pode filtrar a percepção do seu próprio bocejo, por "SEMPRE...!!" :))

 
MetaDriver:
:)

Não acredito! Desta vez, não acreditei de certeza :)

// Realmente verificar novamente, ver todo o código a partir deste ângulo.

// É a crença no vosso "TUDO e TUDO" que pode filtrar a percepção do vosso próprio bocejo, por "SEMPRE...!!" :))

Estou a dizer-vos - Shaman! Durante o fim-de-semana verifiquei todos os ficheiros da EA (vários milhares de linhas). E é verdade, encontrei duas ou três variáveis não inicializadas em bibliotecas antigas.

A minha regra é declarar TODAS as variáveis no início do corpo funcional (sempre foi o caso) e inicializá-las imediatamente (provavelmente no ano passado)

Não me considero um boneco - já escrevi mais de uma centena de índices/scrições/conselheiros diferentes :)

E aqui estou eu a lutar como um peixe no gelo - não consigo localizar! Eu próprio poderia disparar!

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

A propósito, aqui está o 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: A propósito, aqui está o código:

hmm, porque não verifica se há ultrapassagens de matriz intShift=structSled.intShift_PastSearch;

se intShift estiver fora dos limites do array então while(structSledSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}

irá causar imediatamente um erro porque o código será executado da esquerda para a direita e a referência a structSled.adblArray_Short[intShift] ocorrerá antes de && intShift>1

definir verificação após intShift=structSled.intShift_PastSearch; e depois sair se sair fora da matriz e depois Print(Hurray! Funcionou!)

como esta

 
Boa noite, poderia haver uma função 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    ));   
      }
As estruturas precisam de ser zeradas ao declarar neste caso?
 
OBRIGADO!!!
 

Sabem, tentei compilar sob esta forma, assusta-me.

PositionGetInteger' - constante esperada.mq5 65 44 Vejo a palavra constante. Mas de que é que precisa? Está na primeira linha da função.

E é assim para todas as outras declarações variáveis, mas eu declarei a função de acordo com a ajuda, não declarei?

'preço' - valor por defeito em falta para o parâmetro order.mq5 65 92

 
Obrigado, estou a compilar agora.