Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1218

 
Pineapple88:

Risolto, tutto sembra funzionare)!

Ho trasferito due indicatori MA alla funzione OnInit.

Capisco che creiamo solo l'handle dell'indicatore nella funzione OnInit ed eseguiamo tutte le altre manipolazioni con gli array nella funzione OnTick e lo controlliamo ad ogni tick?

Sì, creiamo il manico dell'indicatore in OnInit. E tutte le altre operazioni sono implementate in OnTick.

 
Vladimir Karputov:

Sì, la maniglia dell'indicatore viene creata in OnInit. E il resto del lavoro è implementato in OnTick.

Capito, grazie!

 
L'ottimizzazione di un EA in MT5 è una cosa necessaria e utile. Ma ecco la domanda: per quale periodo sono i migliori parametri per l'operazione EA per garantire la sua redditività in futuro? Si ritiene che l'ottimizzazione debba essere eseguita ogni mese. Ma l'ottimizzazione garantisce che il deposito non sarà perso almeno entro il prossimo mese?
 
BORIS GOLICIN:
L'ottimizzazione di un EA in MT5 è una cosa necessaria e utile. Ma ecco la domanda: per quale periodo sono i migliori parametri per il funzionamento dell'EA che garantiscono la sua redditività in futuro? Si ritiene che l'ottimizzazione debba essere condotta ogni mese. Ma l'ottimizzazione garantisce che il deposito non sarà perso almeno entro il prossimo mese?

per una garanzia al settore bancario )

 
BORIS GOLICIN:
L'ottimizzazione di Expert Advisor in MT5 è utile e necessaria. Ma ecco la domanda: per quale periodo i migliori parametri per l'esperto garantiscono il pareggio in futuro? Si ritiene che l'ottimizzazione debba essere eseguita ogni mese. Ma l'ottimizzazione garantisce che il deposito non sarà perso almeno entro il prossimo mese?

Secondo me, l'ottimizzazione è inutile. È buono solo per stimare quante perdite avete fatto in un certo periodo e quanto profitto avreste potuto fare. Inoltre, la situazione del mercato può cambiare da un momento all'altro, e tutta l'ottimizzazione andrà in fumo. Per far funzionare più a lungo una strategia in modalità automatica, non bisogna essere avidi. Non cercare di spremere il massimo dal mercato. La società di intermediazione non lo permetterà.

 

Ecco quello che sono riuscito a trovare sull'ottimizzazione su Internet:

Supponiamo di avere un pezzo di storia di 15 anni (almeno 10), diciamo dal 2000 al 2015. Dividiamo questo pezzo nei seguenti periodi: 2000-2003 è il nostro pezzo di test all'indietro, 2003-2012 è il periodo di ottimizzazione, 2012-2015 è il test in avanti. Dopo l'ottimizzazione conduciamo il solito test in avanti selezionando 10-20 set di maggior successo. Dopodiché eseguiamo i set selezionati su un test a ritroso. I risultati dovrebbero essere simili a quelli ottenuti nei test in avanti. Gli insiemi che hanno superato il test vengono salvati per ulteriori confronti. Poi eseguiamo il test contro gli insiemi rimanenti nell'intero pezzo di storia e selezioniamo quello che mostra risultati migliori degli altri. Di conseguenza, ci rimane un set di impostazioni che è il più adatto.
Come selezioniamo gli insiemi nella prima fase - la prova in avanti? Molto semplice: la cosa più importante per noi in questa fase è il tipo di curva di equilibrio. Idealmente, dovrebbe essere una linea retta che va dal basso a sinistra all'angolo in alto a destra. Detto questo, non ha senso guardare tutti i migliori set di fila - spesso sono quasi identici.

 

Buon pomeriggio a tutti!

Quando si accede al gestore dell'indicatore ATR, i primi 30 secondi danno valori strani.

Non riesci a capire quale sia la causa?

int ATRdefinition = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ATRdefinition = iATR(_Symbol,_Period,14);
   if(ATRdefinition == INVALID_HANDLE)
     {
      Print("Ошибка создания Хендла");
     }

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   string signal = "";

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double ATRarray[];
   ArraySetAsSeries(ATRarray,true);

   CopyBuffer(ATRdefinition,0,0,3,ATRarray);
   
   double ATRValue = NormalizeDouble(ATRarray[0],5);

   Print("ATRVALUE: ",ATRValue);
  }
File:
ATR.png  51 kb
 
Pineapple88:

Buona giornata a tutti!

Quando si accede al gestore dell'indicatore ATR, i primi 30 secondi danno valori strani.

Non riesco a capire qual è la ragione?

Controlla se l'indicatore è pronto?

//--- determine the number of values calculated in the indicator 
   int calculated=BarsCalculated(handle); 

(inserisci il tuo manico al posto di'manico')

 

Risulta che questi dati(402082) non sono sufficienti per calcolare l'indicatore?

Ho pensato che la funzioneBarsCalculated dovrebbe dare un errore (-1) se non ci sono abbastanza dati per il calcolo

File:
ATR2.png  21 kb
 
Pineapple88:

Risulta che questi dati(402082) non sono sufficienti per calcolare l'indicatore?

Ho pensato che la funzioneBarsCalculated dovrebbe dare un errore (-1) se non ci sono abbastanza dati per il calcolo

Sembra che il terminale continui a pompare la storia - rispettivamente, l'indicatore viene ricalcolato di continuo. Oppure, un'altra opzione: nel tuo terminale, hai impostato un numero MOLTO grande di barre da visualizzare sul grafico e il tuo computer è MOLTO debole.


Aggiunto.

Controllato su MetaTrader 5 x64 build 2470 e con l'impostazione "Mostra barre" di 100000 - con la storia lunga scaricata. Il codice ha funzionato perfettamente.

Motivazione: