Domande su MQL5 Wizard e sulla libreria standard di classi di trading - pagina 6

 
uncleVic:
Master e classi per lui si sono spostati finora nella "modalità di manutenzione". Per la creazione delle classi multivarianti più semplici sono già adattati (non sono pronti ora, ma più tardi metterò qui un esempio).

Ho fatto una classe multi-valuta basata su quella generata dalla procedura guidata. Ma ho dovuto correggere la classe EXPERT.

All'inizio di esso nel metodo INIT() c'è un controllo per il simbolo di lavoro e di conseguenza nessuna multicurrency. L'assegno è stato rimosso e tutto è andato bene. Guardate il tempo - l'idea almeno che?

if(symbol!=Symbol() || period!=Period()) 

на

 if(period!=Period())

File:
Master01_ML.mq5  14 kb
 

Ciao Moderatore!

Ho una domanda del genere:

MQL5 Wizard ha 20 moduli di segnali che eseguono analisi per divergenza, ipercomprato, ipervenduto, ecc. Potreste consigliarmi se è possibile prendere in prestito un modulo di segnali dal Wizard MQL5 per eseguire l'analisi dello stesso, ma da un indicatore personalizzato di propria progettazione e cosa si dovrebbe fare per questo? Richiederà molta rilavorazione (redesign) o è sufficiente cambiare qualcosa nel modulo (la sua copia) dalla consegna standard?

Grazie in anticipo!

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

ForexMoneyMaker:

Sapete se è possibile prendere in prestito qualsiasi modulo di segnali dal Wizard MQL5 per eseguire l'analisi dello stesso, ma da un indicatore personalizzato di propria progettazione, e cosa si dovrebbe fare per questo? Richiederà molta rilavorazione (modifica), o sarà sufficiente cambiare qualcosa nel modulo (la sua copia) dalla consegna standard?

Bella domanda! Ed ecco perché - è davvero possibile creare un nuovo modulo con modifiche minime dei moduli standard, semplicemente inserendo un altro indicatore al posto di uno. Non so quando saremo in grado di scrivere noi stessi un articolo su questo argomento, quindi lo suggerisco:

Chi ha conoscenza e desiderio di scrivere un articolo "Come creare il proprio sulla base del modulo standard di segnali" - scrivetemi nel messaggio personale.

 
Erm955:

Ho fatto una classe multi-valuta basata su quella generata dalla procedura guidata. Ma ho dovuto correggere la classe EXPERT.

All'inizio di esso nel metodo INIT() c'è un controllo per il simbolo di lavoro e di conseguenza nessuna multicurrency. L'assegno è stato rimosso e tutto è andato bene. Guarda il tempo - l'idea almeno che?

if(symbol!=Symbol() || period!=Period()) 

на

 if(period!=Period())

L'idea è la stessa, ma:

1. non è bene cambiare la classe CExpert. È bene ereditare da esso sovrascrivendo il metodo Init(...).

2) Non è necessario modificare la classe CExpert. Devi scriverlo:

...
   if(!ExtExpert_EG.Init(Symbol(),PERIOD_M10,Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert_EG.Deinit();
      return(-1);
     }
   ExtExpert_EG.Symbol("NZDUSD");
...

Per ora...

 
ForexMoneyMaker:

Ciao Moderatore!

Ho una domanda del genere:

MQL5 Wizard ha 20 moduli di segnali che eseguono analisi per divergenza, ipercomprato, ipervenduto, ecc. Potreste consigliarmi se è possibile prendere in prestito un modulo di segnali dal Wizard MQL5 per eseguire l'analisi dello stesso, ma da un indicatore personalizzato di propria progettazione e cosa si dovrebbe fare per questo? Richiederà molta rilavorazione (redesign) o è sufficiente cambiare qualcosa nel modulo (la sua copia) dalla consegna standard?

Grazie in anticipo!


Dai un'occhiata al forum inglese qui
 
uncleVic:

L'idea è la stessa, ma:

1. non è bene modificare la classe CExpert. È bene ereditare da esso sovrascrivendo il metodo Init(...).

2. Non è necessario modificare la classe CExpert. Devi scriverlo:

Finora...

Dovresti ridefinire il metodo Init() ed escludere da esso il controllo del simbolo di lavoro. Ma il p. 2 non va bene, poiché il metodo Init(), tra le altre cose, contiene un controllo per il numero di cifre Digits e se il simbolo di lavoro contiene 5 cifre, e quello che viene testato contiene 3 cifre, ci sarà un errore con stop/profitti. Ho ereditato e sovrascritto. Ora tutto funziona.

Naturalmente, non sono un grande esperto di OOP, ma risulta che per configurare in modo flessibile il programma per un numero diverso di simboli testati, bisogna riempire senza mezzi termini, per esempio, 21 pezzi di codice (tutti i simboli), e poi con il metodo della scelta dei parametri di input passare questa o quella sezione di codice. Ho fatto lo stesso senza OOP, ma tutti gli handle e i valori degli indicatori nell'init sono stati scritti in array dinamici, e poi OnTick ha già usato questi array. Quindi, non ho ancora visto nessun vantaggio di OOP?

P S. Non l'ho scritto con precisione. Devo stipare così tanti pezzi di codice, quanti caratteri in una sola volta ho intenzione di testare. Forse c'è un modo per collegare dinamicamente i dati (gestori e valori di indicatori) nel corso della messa a punto per il numero di caratteri che lavorano contemporaneamente. Il problema è che tutto questo dovrebbe essere inserito in Init e utilizzato in OnTic/OnTimer.

File:
Master02_ML.mq5  20 kb
 
Erm955:

È necessario ridefinire il metodo Init(), escludendo il controllo del simbolo di lavoro. E p.2 non va bene, perché il metodo Init(), tra le altre cose, controlla il numero di cifre Digits, e se il simbolo di lavoro ha 5 cifre, e quello che viene testato ha 3 cifre, allora ci sarà un errore con stop/profitti. Ho ereditato e sovrascritto. Ora tutto funziona.

Naturalmente, non sono un grande esperto di OOP, ma risulta che per configurare in modo flessibile il programma per un numero diverso di simboli testati, bisogna riempire senza mezzi termini, per esempio, 21 pezzi di codice (tutti i simboli), e poi con il metodo della scelta dei parametri di input passare questa o quella sezione di codice. Ho fatto lo stesso senza OOP, ma tutti gli handle e i valori degli indicatori nell'init sono stati scritti in array dinamici, e poi OnTick ha già usato questi array. Quindi, non ho ancora visto nessun vantaggio di OOP?

P S. Non l'ho scritto con precisione. Devo stipare così tanti pezzi di codice, quanti caratteri in una sola volta ho intenzione di testare. Forse c'è un modo per collegare dinamicamente i dati (gestori e valori di indicatori) durante la configurazione per il numero di caratteri che lavorano contemporaneamente. Il problema è che tutto questo dovrebbe essere inserito in Init e utilizzato in OnTic/OnTimer.

È così. A proposito, grazie per il consiglio sul punto 2. Aggiungerò il controllo e cambierò il numero di caratteri.
 
uncleVic:
È così. A proposito, grazie per il consiglio sul punto 2. Aggiungerò un controllo e un cambio di cifre.

Merda, ho appena impostato tutto e quando ho aggiornato alla build 485, l'errore è saltato fuori di nuovo:

2011.08.08 17:13:04 Il tester Core 1 si è fermato perché OnInit è un errore critico
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 OnInit: errore nell'inizializzazione degli indicatori
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpert::InitIndicators: errore nell'inizializzare gli indicatori dell'oggetto denaro
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::InitIndicators: i parametri di impostazione non sono controllati
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::SetOtherSeries: cambiare la serie temporale è proibito
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::SetPriceSeries: cambiare la serie temporale è proibito
2011.08.08 17:13:04 Core 1 EURUSD,H4: la storia inizia dal 2009.01.02 04:00
2011.08.08 17:13:04 Core 1 EURUSD,H4: cache storica riservata per 4692 barre stimate

File:
Master02_ML.mq5  20 kb
 
Erm955:

Merda, ho appena impostato tutto e quando ho aggiornato al 485 l'errore è saltato fuori di nuovo:

Gli agenti hanno aggiornato? L'EA è ricompilato nella nuova versione?
 
Rosh:
Gli agenti sono stati aggiornati? L'EA è stato ricompilato nella nuova versione?

È proprio così, ho ricompilato!