Errori, bug, domande - pagina 1393

 
galustyan10:

SALVE, POTRESTE CONSIGLIARMI, QUANDO APRO UN CONTO REALE SU MT5, QUANTO TEMPO CI VUOLE PERCHÉ UN IMPIEGATO DELLA COMPAGNIA MI CHIAMI E COMPLETI LA PROCEDURA DI APERTURA DEL CONTO?

Perché stai gridando? Ricevi il tuo login e la tua password quando registri il tuo account. Di solito è un conto personale sul sito web del broker.

 
Errore di compilazione:'a' - non è un membro statico
class A     { int a; };
class B : A { void a(); };
void B::a() {}
altrimenti
class A     { int a; };
class B : A { void a() {} };
va bene. Qual è la differenza?
 

MT5 1159. Disadattamento della scala orizzontale se il carattere medio o grande è impostato in "personalizzazione". Win7, 32b

 

Come fa MT5 a scalare automaticamente gli indicatori in una finestra separata?

Indicatore in una finestra separata

Il terminale fa il massimo di 0,5603, mentre il valore massimo effettivo di qualsiasi indicatore buffer su tutta la storia è 0,0605. Inutile dire che non ci sono questi problemi in MT4.

 
Ilya Malev:

Come fa MT5 a scalare automaticamente gli indicatori in una finestra separata?


Il terminale fa il massimo di 0,5603, mentre il valore massimo effettivo di qualsiasi indicatore buffer su tutta la storia è 0,0605. Inutile dire che non ci sono questi problemi in MT4.

Controlla i valori che hai nel buffer dell'indicatore. Puoi farlo manualmente con "Crosshair", puoi farlo con MQL5.
 
Karputov Vladimir:
Controlla i valori che hai nel buffer dell'indicatore. Puoi farlo manualmente con "Crosshair", puoi farlo con MQL5.

Ti ho detto che il massimo su tutta la storia è 0,0605. Controllato in OnCalculate confrontando il valore massimo di ogni buffer su ogni barra.

P.S. In realtà ho già capito qual è il problema. Algoritmo diverso per il calcolo dei massimi in MT4 e MT5. Vorrei capire la ragionevolezza di cambiare questo algoritmo, ma è una domanda retorica.

Il problema era in MT4 - i valori del buffer dell'indicatore visualizzati nella finestra dei dati influenzano la scala di una finestra separata dell'indicatore, anche se la loro visualizzazione sul grafico è disabilitata (stile DRAW_NONE). Ho risolto il problema rendendoli negativi e fissando il minimo a 0. Tutto è stato visualizzato perfettamente, perché solo i valori dell'indicatore sopra il minimo fissato (0) hanno partecipato al calcolo della scala. Ora i valori al di sotto del minimo fisso partecipano al calcolo della scala. In altre parole, non hanno aggiunto la possibilità di rimuovere i valori del buffer dal calcolo della scala (o non l'ho ancora capito), ma hanno rimosso la possibilità di escluderli dalla scala mettendoli sotto il minimo o il massimo. (tutto questo si applica ai buffer DRAW_NONE non visualizzati)

 
Ilya Malev:

Ti ho detto che il massimo su tutta la storia è 0,0605. Controllato in OnCalculate confrontando il valore massimo di ogni buffer su ogni barra.

P.S. In realtà ho già capito qual è il problema. Algoritmo diverso per il calcolo dei massimi in MT4 e MT5. Vorrei capire la ragionevolezza di cambiare questo algoritmo, ma è una domanda retorica.

Qualsiasi valore venga passato al buffer dell'indicatore, sarà lo stesso. Un'altra variante: all'inizio della partenza non si analizza ogni elemento del buffer dell'indicatore e si ottengono valori casuali nel buffer come risultato.

Quindi, non si può fare a meno di guardare il codice.

 
Karputov Vladimir:

Un'altra opzione: all'inizio dell'avvio non si conta ogni elemento del buffer dell'indicatore e si finisce per avere valori casuali nel buffer.

L'ho già capito. A proposito, è stata anche una sorpresa inaspettata di MT5 :)
 
Karputov Vladimir:

Comunque, non si può fare a meno di guardare il codice qui.

OK, ecco il codice

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_minimum 0
#property  indicator_color1 clrRed
#property  indicator_type1 DRAW_LINE
#property  indicator_label1 "Стд.Откл."

double buffer1[], buffer2[];

int i_std=INVALID_HANDLE;

void OnInit(){
   SetIndexBuffer(0, buffer1);
   SetIndexBuffer(1, buffer2);
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE);
   PlotIndexSetInteger(1, PLOT_SHOW_DATA, true);
   ArraySetAsSeries(buffer1, true);
   ArraySetAsSeries(buffer2, true);
   i_std=iStdDev(Symbol(), Period(), 20, 0, MODE_SMA, PRICE_CLOSE);
}

void OnDeinit(const int reason){
   if(i_std!=INVALID_HANDLE)  IndicatorRelease(i_std);
}

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(int i=rates_total-MathMax(1, prev_calculated); i>=0; i--){
      buffer1[i]=_ind(i_std, 0, i);
      buffer2[i]=-MathRand()%5;
   }
   return(rates_total);
}

double _ind(int hnd, int buf, int index){
   if(index < 0) return(EMPTY_VALUE);
   double Arr[];
   return(CopyBuffer(hnd, buf, index, 1, Arr)==1?Arr[0]:EMPTY_VALUE);
}
 

Non so se è un bug o un comportamento strano, ma nel tester di strategie MT4 i buffer per gli indicatori sono circa 1000 +/- 3 celle.

Con altri tipi di test - demo o reali - il numero di celle nel buffer è circa lo stesso del numero di barre consentito nelle impostazioni del terminale.

Voglio sapere se è un bug o stavo pensando così, ho anche notato che gli indicatori possono essere modificati durante i test senza fermare il tester. Non ho ancora letto nessuna informazione da nessuna parte sugli EAs, ma grazie per questo!

Motivazione: