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

 
Reshetov:

Tre domande:

  1. Come far funzionare il modulo dei segnali solo sui prezzi di apertura e non su ogni tick?
  2. Come posso ottenere i valori di voto del modulo di segnale nel modulo di inseguimento della posizione? Devi pescare su un segnale già calcolato e non inventare un altro modulo di segnale da seguire.
  3. Come ottenere i valori di voto del modulo di allarme nel modulo di gestione del denaro e del rischio? È necessario aprire i volumi secondo i segnali di trading già calcolati, non comporre un altro modulo di segnale per il calcolo del volume.

Teoricamente, possiamo ovviamente costruire l'EA usando la procedura guidata e poi aggiungere tutte queste caratteristiche manualmente al codice. Ma è auspicabile che tutto questo sia stato implementato sotto forma di metodi standard, cioè per i dummies che vogliono usare la procedura guidata, in modo che non debbano entrare nel codice e modificare, per esempio, nel caso in cui vogliano sostituire un modulo di segnale con un altro.

Lei risponde a tutte le sue domande: "... costruire l'EA con l'aiuto di una procedura guidata, e poi... manualmente ...". Non ci sono ancora altre opzioni. Il mago, molto probabilmente, non sarà sviluppato nel prossimo futuro. Le classi della Libreria Standard non sono un dogma, ma un tentativo di fornire un insieme di soluzioni tipiche (secondo me). Ereditare (per l'uso nel Wizard), sovraccaricare i metodi, aggiungere i propri. E tu sarai "felice"...
 
uncleVic:
Lei stesso ha risposto a tutte le sue domande: "... ...costruire l'EA con l'aiuto di una procedura guidata e poi... manualmente ...". Non ci sono ancora altre opzioni. Il mago, molto probabilmente, non sarà sviluppato nel prossimo futuro.

È un peccato che un'impresa così buona sia abbandonata in un angolo lontano.

Se fosse stato aggiornato, si sarebbe potuto fare molto, cioè si sarebbero potuti creare moduli pronti da cui i dummies e gli altri utenti avrebbero potuto assemblare vari EA già pronti senza dover passare per i codici. Ma in questo caso si ottiene lo stesso casino che con mql4 algoritmico, cioè si prende un algoritmo, si entra nel codice e lo si usa manualmente. Di nuovo, il principio OOP è violato. Per esempio, se volete sostituire un modulo con un altro, dovrete tornare nel codice e cambiare tutto manualmente da capo. Si ottengono un sacco di sciocchezze, perché solo "strisciando" tra i codici, per capire almeno dove e cosa modificare, si ucciderebbe un sacco di tempo.

È stato un buon inizio. Peccato. Ho appena creato un modulo di segnale ieri, ma sono ancora perplesso su come far funzionare l'intero EA senza andare ogni volta al codice sorgente. Volevo scrivere un articolo su come usarlo. Ho appena inserito e aggiunto la gestione delle posizioni, la gestione del denaro e la gestione del rischio, e tutto funziona. Ma no, non funzionerà. Se un utente costruisce un EA usando la procedura guidata, non funzionerà. Dovrà scrivere un'intera risma di istruzioni dove guardare nel codice e cosa cambiare. Per non parlare del fatto che devo ancora affrontare tutto questo da solo prima di scrivere un'istruzione.

Quindi ora non resta altro per gli utenti che imparare mql5, OpenCL, ecc. per affrontare l'autotrading. Altrimenti non avranno fortuna.

Bene, visto che questo progetto è stato abbandonato, ora penserò in un'altra direzione.

 
Reshetov:

È un peccato che un'impresa così buona sia abbandonata in un angolo lontano.

Speriamo che non sia abbandonato, ma accantonato. Io stesso ho molti pensieri interessanti sullo sviluppo del Maestro. Ma...
 
uncleVic:
Speriamo che non sia abbandonato ma rimandato. Anch'io ho molti pensieri interessanti sullo sviluppo del Mago. Ma...

La speranza muore per ultima (c) proverbio popolare

Alla prima domanda, cioè come testare il modulo dei segnali aprendo i prezzi e scambiando in tick, ho trovato una soluzione per non dover entrare nei codici, e anche migliore di quella generalmente accettata.

Non ho ancora capito come leggere le indicazioni del modulo dei segnali nella gestione delle posizioni e nei moduli di gestione delle azioni e del rischio. Ho cercato il codice sorgente e ho dato un'occhiata in giro. Il modulo dei segnali ottiene i suoi risultati attraverso il metodo direction(), cioè devo solo accedere a un'istanza di quella stessa classe di modulo nei moduli di gestione delle posizioni e di gestione delle azioni e dei rischi e chiamare questo stesso metodo per leggere i suoi valori. Come questo possa essere fatto senza cambiare il codice, non è ancora chiaro.

 
Reshetov:

La speranza sgorga eterna (c) proverbio popolare

Alla prima domanda, cioè come testare il modulo dei segnali aprendo i prezzi e scambiando in tick, ho trovato una soluzione per non dover entrare nei codici, e anche migliore di quella generalmente accettata.

E non riesco a capire come leggere le letture del modulo dei segnali nella gestione delle posizioni e nei moduli di gestione delle azioni e del rischio, senza scavare i codici. Ho cercato il codice sorgente e ho dato un'occhiata in giro. Il modulo dei segnali ottiene i suoi risultati attraverso il metodo direction(), cioè devo solo indirizzare un'istanza di questa stessa classe di modulo nei moduli di gestione delle posizioni e di gestione delle azioni e dei rischi e chiamare questo stesso metodo per leggere i suoi valori. Come questo possa essere fatto senza cambiare il codice, non è ancora chiaro.

Senza cambiare i codici probabilmente non funzionerà.

 
uncleVic:

Non cambiare i codici probabilmente non funzionerà.

Non tutto è ancora perduto. Potete creare classi ereditate da CExpert, CExpertMoneu e CExpertTrailing e aggiungervi i metodi necessari per accedere a un'istanza della classe del modulo dei segnali. Ma anche qui c'è un problema, poiché la procedura guidata scrive nell'EA creato #include <Expert\Expert.mqh> e non il suo discendente.

Abbiamo ancora bisogno di pensarci.

Se gli sviluppatori avessero capito subito che un modulo di segnale può essere usato per tutti gli altri moduli come quello principale e che i segnali aggiuntivi (come in questa versione della procedura guidata) possono essere aggiunti al supporto delle posizioni e ai moduli di gestione delle azioni e del rischio e lo avessero previsto nei codici, sarebbe molto più facile. Ma nel nostro caso, ogni modulo richiede di specificare condizioni aggiuntive per i segnali e quindi hanno bisogno di ulteriori impostazioni esterne, il che risulta in un tale mostro con un sacco di parametri da ottimizzare. Per non parlare del fatto che i segnali di un modulo possono entrare in conflitto, cioè un modulo di segnale può aprire una posizione e un modulo assistente - chiuderla al prossimo tick, se le condizioni di entrata e uscita dal mercato sono contraddittorie.

 
Reshetov:

Non tutto è ancora perduto. Dopotutto, potete creare classi ereditate da CExpert, CExpertMoneu e CExpertTrailing e aggiungervi i metodi necessari di accesso a un'istanza della classe del modulo dei segnali. Ma anche qui c'è un problema, poiché la procedura guidata scrive nell'EA creato #include <Expert\Expert.mqh> e non il suo discendente.

Dobbiamo ancora pensarci.

Se gli sviluppatori avessero capito subito che un modulo di segnale può essere usato per tutti gli altri moduli come quello principale e che i segnali aggiuntivi (come in questa versione della procedura guidata) possono essere aggiunti al supporto delle posizioni e ai moduli di gestione delle azioni e del rischio e lo avessero previsto nei codici, sarebbe molto più facile. Ma nel nostro caso, ogni modulo richiede di specificare condizioni aggiuntive per i segnali e quindi hanno bisogno di ulteriori impostazioni esterne, il che risulta in un tale mostro con un sacco di parametri da ottimizzare. Senza menzionare il fatto che i segnali di un modulo possono essere in conflitto, cioè un modulo di segnale può aprire una posizione e un modulo assistente - chiuderla al prossimo tick, se le condizioni di entrata e uscita dal mercato sono contraddittorie.



È così che è stato progettato. La procedura guidata crea il "pesce" dell'EA. Più in là:

  • sostituire l'inclusione non è un problema;
  • il segnale principale è intenzionalmente creato all'esterno (per comodità di sostituzione);
  • aggiungere alcuni ints e chiamate di metodo al setup?
 
uncleVic:

Questo è il modo in cui è stato inteso. Il maestro crea il "pesce" del consigliere. Il prossimo:

  • La sostituzione dell'in linea non è un problema;
  • il segnale principale è intenzionalmente creato all'esterno (per facilità di sostituzione);
  • aggiungere alcune chiamate di metodo intuts e setting?


Questa è la cosa brutta, cose come:

  1. L'accesso ai metodi delle classi di moduli inclusi nel sistema di trading è negato anche per la lettura, il che esclude completamente la possibilità di coordinare il loro lavoro.
  2. I moduli di segnale possono facilmente entrare in conflitto con i moduli di tracciamento della posizione, perché hanno segnali diversi, e quindi l'incompatibilità non può essere esclusa.
  3. Segnali diversi nei moduli, e quindi hanno tutti impostazioni separate, il che si traduce in non poche, ma molte impostazioni di ingresso per un EA. Più diverse sono le impostazioni, maggiore è la probabilità di adattamento alla storia.
  4. Dopo l'operazione della procedura guidata, a volte è necessario passare attraverso i sorgenti per risolvere i problemi. Per l'utente finale che non ha familiarità con la programmazione non è affatto adatto, perché ha bisogno di plug-and-play. Tali confusioni creano anche problemi per un programmatore, perché è molto più facile lavorare con il proprio codice che con il codice impilato con un wizard. Un'ulteriore difficoltà è che le classi sono ereditate, vale a dire che la causa del malinteso raramente può essere trovata a livello dei discendenti, ma si deve guardare più in profondità nelle classi genitori.

Volevamo il meglio. Risulta essere lo stesso di sempre (c) Chernomyrdin

In generale, la maggior parte dei malintesi possono essere corretti, ma questo deve essere fatto a livello della classe madre principale e poi le classi corrette possono essere distribuite attraverso gli aggiornamenti della piattaforma. Cioè dovete aprire l'accesso al metodo Direction() del modulo dei segnali dai moduli di supporto delle posizioni e di gestione delle azioni e dei rischi. Perché se i singoli sviluppatori di moduli modificano il codice sorgente delle classi madri, l'incompatibilità del codice sorgente risultante sarà incompatibile e i moduli creati non funzioneranno su altri computer. Se gli sviluppatori di moduli creano classi madri con metodi sovrascritti, l'incompatibilità sarà ancora a livello di master, perché quest'ultimo scrive i propri inludi, e, di conseguenza, gli utenti finali devono scrivere di nuovo le istruzioni, e difficilmente vorranno entrare nei sorgenti, e se lo fanno, allora errore in un singolo simbolo o da qualche altra parte, etc...

 
Reshetov:

Questo è il problema, perché fin dall'inizio ci sono cose che non sono state considerate:

  1. L'accesso ai metodi delle classi di moduli inclusi nel sistema di trading è negato anche per la lettura, il che esclude completamente la possibilità di coordinare il loro lavoro.
  2. I moduli di segnale possono facilmente entrare in conflitto con i moduli di tracciamento della posizione, perché hanno segnali diversi e quindi non si può escludere un'incompatibilità.
  3. Segnali diversi nei moduli, e quindi hanno tutti impostazioni separate, il che si traduce in non poche, ma molte impostazioni di ingresso per l'EA. Più diverse sono le impostazioni, maggiore è la probabilità di adattamento alla storia.
  4. Dopo l'operazione della procedura guidata, a volte è necessario passare attraverso i sorgenti per risolvere i problemi. Per l'utente finale che non ha familiarità con la programmazione non è affatto adatto, perché ha bisogno di plug-and-play. Tali confusioni creano anche problemi per un programmatore, perché è molto più facile lavorare con il proprio codice che con il codice impilato con un wizard. Un'ulteriore difficoltà è che le classi sono ereditate, vale a dire che la causa del malinteso raramente può essere trovata a livello dei discendenti, ma si deve guardare più in profondità nelle classi genitori.

Volevamo il meglio. Risulta essere lo stesso di sempre (c) Chernomyrdin

In generale, la maggior parte dei malintesi possono essere corretti, ma è auspicabile farlo a livello della classe madre principale e poi distribuire le classi corrette attraverso gli aggiornamenti. Perché se il codice sorgente delle classi genitori viene corretto dagli sviluppatori di moduli, l'incompatibilità del codice sorgente risultante sarà incompatibile e i moduli creati non funzioneranno su altri computer. Se lo sviluppatore crea classi madri con metodi sovrascritti, allora l'incompatibilità è già a livello di master, perché scrive le proprie inclusioni, e quindi di nuovo bisogno di scrivere istruzioni per gli utenti finali, ed è improbabile che vogliano entrare nel codice sorgente, e se ci entrano, allora errore in un singolo carattere o da qualche altra parte, e così via.

Facciamo dei suggerimenti specifici. Li prenderemo in considerazione.
 
uncleVic:
Permetteteci di darvi alcuni suggerimenti. Li rivedremo.

Finora, c'è solo una cosa che affronta gli svantaggi di cui sopra:

Aprire l'accesso alla lettura dei valori restituiti dal metodo Direction() del modulo dei segnali dai moduli di gestione delle posizioni e di gestione del capitale e del rischio.

Aggiungete un altro metodo, per esempio, con identificatore double getMainSingnal(), che si riferisce a un'istanza della classe del modulo segnali e restituisce il risultato del metodo Direction() del modulo segnali. Poiché questo scambio di informazioni avviene in modalità di sola lettura, la sicurezza non sarà infranta in alcun modo.

Per fare questo

  1. Allocare alcuni campi nelle classi CExpertMoney e CExpertTrailing per memorizzare un'istanza di CExpertSignal, cioè il modulo principale dei segnali.
  2. Un'istanza di CExpertSignal, cioè il modulo segnali, dovrebbe essere passata ai moduli di gestione delle posizioni e di gestione del capitale e del rischio durante l'inizializzazione delle istanze di questi moduli e memorizzata nei campi specificati nel passo 1. Ovviamente, prima di fare questo, dovremmo anche controllare (assicurarci) che ci sia già un'istanza della classe del modulo dei segnali, cioè che sia stata creata.
  3. Creare nelle classi CExpertMoney e CExpertTrailing metodi addizionali, con identificatore double getMainSingnal(), che indirizzano ad un'istanza della classe signals module, memorizzata nei campi corrispondenti di queste classi e restituiscono il risultato del metodo signals module Direction().

P.S. La classe CExpert ha un riferimento a un'istanza della classe Signal Module.

CExpertSignal    *m_signal;                   // trading signals object
Dovete creare campi analoghi per le classi CExpertMoney e CExpertTrailing e passare loro lo stesso valore dal campo sopra menzionato nella classe CExpert durante l'inizializzazione
Motivazione: