Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 682

 

Eu tenho um grande programa com o mesmo tipo de objetos. Refiro-me a muitos tipos. Mas eles são repetidos em diferentes módulos do programa. E nos registros, após a conclusão dos testes, por exemplo, eu recebo xxx objetos não removidos. E assim por diante, vários tipos.

Como posso descobrir onde não estou apagando objetos? Existe algum conjunto de ferramentas para isso?

 
mbjen:

Eu tenho um grande programa com o mesmo tipo de objetos. Refiro-me a muitos tipos. Mas eles são repetidos em diferentes módulos do programa. E nos registros, após a conclusão dos testes, por exemplo, eu recebo xxx objetos não removidos. E assim por diante, vários tipos.

Como posso descobrir onde não estou apagando objetos? Existe algum conjunto de ferramentas para isso?

Bug da construção de 1930.

 
O teste EA, de alguma forma, abriu o BUYSTOP abaixo do preço! Agora eu não posso nem mesmo fechar o pedido manualmente. Como isso é possível?
Arquivos anexados:
 

Fiquei surpreso ao descobrir que o MQl5 suporta OpenCL

Será que ninguém escreveu um otimizador para robôs durante este tempo, para que milhões de corridas não levassem séculos, mas pelo menos anos? :)

 
Igor Makanu:

significa que você está contando com cada tick do código que enviou e não inicializando as variáveisSredRazmax eSredRazmin

É um bom hábito inicializar variáveis antes de usá-las - é isso que ensinam nas universidades, reduz o tempo necessário para encontrar bugs ;)

Eu os inicializei no início, e no comentário você pode ver outro array elemento por elemento (para verificar e 0 não muda, então a fórmula deve funcionar,) Aqui está o código completo:

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 1
//#property indicator_color1 Red
//#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int shift, ww=0;
double zz, SredRazmax, SredRazmin, Sredn; 
double HZZ[];


int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0, HZZ);
 // SetIndexStyle(0, DRAW_SECTION);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++)
       {
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
        }      
   
//---------------------------------------------+
//расчет среднего значения           
//---------------------------------------------+      

   //    for(ww=0;ww<=nn;ww++){
   //    if(HZZ[ww]>HZZ[ww+1]){Sredn += HZZ[ww]-HZZ[ww+1];}     
   //    if(HZZ[ww]<HZZ[ww+1]){Sredn += HZZ[ww+1]-HZZ[ww];}
       
 // Comment("Средний размах = ", Sredn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 

            
         
     
       
//--- return value of prev_calculated for next call
    return(0);

  }
 
Artyom Trishkin:

Bug de build 1930.

O que é isso? Eu tenho o MT4. Construir 1090.

 
mbjen:

O que é isso? Eu tenho o MT4. Construir 1090.

Um objeto criado por meio de novo deve ser anexado a uma matriz de objetos ou excluído por si mesmo no OnDeinit()
 
Dmitry Belov:

Eu os inicializei no início, e o comentário produz outro array elemento por elemento (para verificar a aparência e 0 não muda, então a fórmula deve funcionar,) Aqui está o código completo:

Você não os inicializou no início ou em qualquer outro lugar, você apenas os declarou

Eu escrevi antes de usar, ou seja, se você tem as variáveis SredRazmax, SredRazmin, Sredn são somas de valores de array, então para calcular corretamente a soma, você precisa zerar a variável e então adicionar os valores de array e salvá-los nesta variável

ou seja

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    SredRazmax = 0.0;
    SredRazmin = 0.0;
    Sredn = 0.0;
    .....

E o segundo, o que você tem uma pergunta, no indicador cada tick chamaráOnCalculate() e significa que você contará constantemente os tops do ZigZag a cada tick, ou seja, aproximadamente 40-60 vezes por segundo

 
Artyom Trishkin:
Um objeto criado por novo deve ser anexado a uma matriz de objetos ou excluído por si mesmo no OnDeinit()

Obrigado pelo esclarecimento. Mas você deveria ao menos ler minha pergunta.

 
mbjen:

Obrigado pelo esclarecimento. Mas você deveria ao menos ler minha pergunta.

Eu fiz e eu respondi.
Razão: