Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 682

 

Ho un grande programma con lo stesso tipo di oggetti. Intendo molti tipi. Ma si ripetono in diversi moduli del programma. E nei registri, al termine del test, per esempio, ottengo xxx oggetti non cancellati. E così via diversi tipi.

Come posso scoprire dove non sto cancellando gli oggetti? C'è qualche toolkit per questo?

 
mbjen:

Ho un grande programma con lo stesso tipo di oggetti. Intendo molti tipi. Ma si ripetono in diversi moduli del programma. E nei registri, al termine del test, per esempio, ottengo xxx oggetti non cancellati. E così via diversi tipi.

Come posso scoprire dove non sto cancellando gli oggetti? C'è qualche toolkit per questo?

Bug della build 1930.

 
L'EA di prova ha in qualche modo aperto BUYSTOP sotto il prezzo! Ora non posso nemmeno chiudere l'ordine manualmente. Com'è possibile?
File:
 

Sono stato sorpreso di scoprire che MQl5 supporta OpenCL

Non c'è nessuno che ha scritto un ottimizzatore per i robot in questo periodo, in modo che i milioni di corse non andassero avanti per secoli, ma almeno per anni? :)

 
Igor Makanu:

significa che state contando su ogni tick il codice che avete presentato e non inizializzando le variabiliSredRazmax eSredRazmin

È una buona abitudine inizializzare le variabili prima di usarle - è quello che insegnano nelle università, riduce il tempo necessario per trovare i bug ;)

Li ho inizializzati all'inizio, e nel commento potete vedere un altro array elemento per elemento (per controllare e 0 non cambia, quindi la formula dovrebbe funzionare,) Ecco il codice 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 della build 1930.

Che cos'è? Ho MT4. Costruire 1090.

 
mbjen:

Che cos'è? Ho MT4. Costruire 1090.

Un oggetto creato per mezzo di new deve essere collegato a un array di oggetti o cancellato da solo in OnDeinit()
 
Dmitry Belov:

Li ho inizializzati all'inizio, e il commento emette un altro array elemento per elemento (per controllare look e 0 non cambia, quindi la formula dovrebbe funzionare,) Ecco il codice completo:

Non li hai inizializzati all'inizio o da qualche altra parte, li hai solo dichiarati

Ho scritto prima di usare, cioè se avete le variabili SredRazmax, SredRazmin, Sredn sono somme di valori di array, allora per calcolare correttamente la somma, dovete azzerare la variabile e poi aggiungere i valori di array e salvarli in questa variabile

cioè

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 il secondo, quello che avete una domanda, nell'indicatore ogni tick chiameràOnCalculate() e significa che conterete costantemente le cime di ZigZag ad ogni tick, cioè circa 40-60 volte al secondo

 
Artyom Trishkin:
Un oggetto creato da new deve essere collegato a un array di oggetti o cancellato da solo in OnDeinit()

Grazie per l'illuminazione. Ma dovresti almeno leggere la mia domanda.

 
mbjen:

Grazie per l'illuminazione. Ma dovresti almeno leggere la mia domanda.

L'ho letto e ho risposto.