Praticamente MQL. Algo Trader cz. I [Corso di programmazione]
Nell'episodio di oggi, inizieremo a lavorare su un software che ti consentirà di sfruttare le opportunità offerte dal trading algoritmico mantenendo il massimo controllo nel corso degli eventi. Ci concentreremo su idee che ti consentono di impegnarti nel trading reale massimizzando l'operatività intuitiva e la flessibilità della funzione. Nel software utilizziamo un'interfaccia, la cui forma è considerata da molti come uno standard nel settore del trading giornaliero e viene spesso chiamata scala dei prezzi.
Piano di progetto
Divideremo il lavoro in più fasi, perché oltre alla vasta gestione degli ordini, Algo Trader ti consentirà di eseguire algoritmi che gestiranno automaticamente la posizione in base alle varie combinazioni che puoi creare a seconda della situazione che incontrerai sul mercato.
Nella parte di oggi, faremo il primo passo nel mondo della programmazione orientata agli oggetti e lanceremo una parte elementare del nostro progetto relativa all'interfaccia e al funzionamento delle operazioni di base.
Nei prossimi episodi inizieremo a lavorare sui primi algoritmi. All'inizio creeremo un algoritmo GTP che garantirà che la posizione si chiuda con il profitto atteso indipendentemente dal numero di ordini effettuati. Successivamente, creeremo l'algoritmo OOO (One Opens the Other, così esattamente, non è stato ancora), e infine un algoritmo che abilita lo scalping durante la presentazione di importanti dati macro. Insieme agli algoritmi, qua e là, aggiungeremo dei simpatici gadget.
Background tecnico
Troverete il pacchetto con i file necessari per oggi seguendo questo link:
Utilizzare il software significa accettare la licenza allegata al set di file.
Per il corretto funzionamento del software, è necessaria una versione di Microsoft NET Framework di min. 4.6.1 Runtime, che puoi scaricare qui:
Programmazione orientata agli oggetti
Creeremo il nostro software utilizzando programmazione di oggetti, un metodo di programmazione che consente l'ordinamento logico di frammenti di algoritmo nel cosiddetto oggetti il cui compito è di eseguire funzioni separate e comunicare con altri oggetti al fine di implementare il compito del programma nel suo complesso. Per andare oltre, avremo bisogno di capire quali oggetti sono in pratica e come vengono creati. A tale scopo, dai un'occhiata al seguente articolo in Wikibooks, che - basato sull'esempio del linguaggio C ++ su cui è basato MQL4 - ti permette di capire le basi.
Prima classe
Come puoi vedere, tutto ruota intorno alla parola chiave classe. Ti consente di definire un oggetto che puoi quindi creare con una parola chiave nuovi. Apri il file contenente la definizione di una delle classi che useremo oggi, il file ChartOperations.mqhche troverai nel catalogo MQL4 \ Include \ AlgoTrader_v10.
Ogni classe ha un costruttore, che in pratica è una funzione chiamata automaticamente quando viene creato l'oggetto. Il costruttore ha lo stesso nome dell'oggetto e può assumere parametri. Nel nostro frammento di codice sopra, creiamo un costruttore come segue:
Dopo aver creato il costruttore, possiamo definire i componenti della classe, cioè funzioni e variabili. Sono definiti esattamente come nel caso di funzioni e variabili ordinarie con la differenza che nel corpo della classe. Presta attenzione alle tue parole chiave pubblico: e privato:. Tutte le funzioni e le variabili dopo la parola pubblico: sarà disponibile per funzioni che si trovano in altre parti del software, ad esempio nella funzione API OnTick () o altri oggetti. Privata tuttavia, informa il compilatore che gli elementi definiti in questa parte sono strettamente confidenziali e che nessuno, a parte un determinato oggetto, ha naturalmente accesso ad essi.
Applicazioni di oggetti
Cosa crea oggetti così utili? Tra l'altro, è possibile che una volta definito l'oggetto possa essere creato in un numero qualsiasi di copie e, a seconda dei parametri passati a loro, si comporteranno in modo diverso, ma in un modo che siamo in grado di analizzare e controllare. Inoltre, gli oggetti consentono l'organizzazione leggibile del codice dividendo i componenti dell'algoritmo in elementi estratti e un oggetto progettato correttamente può essere utilizzato in un software completamente diverso, che consente di creare in modo efficace applicazioni complesse.
Iniziamo il primo oggetto
Passiamo al file principale del nostro software, file AlgoTrader_v10.mq4che troverai nel catalogo MQL4 \ Esperti \.
Diamo un'occhiata alla definizione dell'API di seguito OnInit ():
Pointer
Nella parte del file responsabile della definizione delle variabili globali utilizzando un frammento di codice ...
... creiamo il cosiddetto pointer cioè, un puntatore che conterrà un indirizzo in una posizione nella memoria del computer, dove il nostro oggetto verrà creato in seguito. Usando il puntatore potremo fare riferimento all'oggetto e richiamarne le funzioni. puntatori definiamo in modo simile alle variabili, il primo elemento della notazione è il tipo di oggetto, quindi posizioniamo l'asterisco * , dopo di che impostiamo un nome univoco per l'oggetto, che utilizzeremo in seguito per i riferimenti. Alla nostra pointer assegniamo una variabile NULL, che dice che allo stato attuale non indica ancora alcun oggetto.
costruttore
Più tardi nel codice, nel corpo della funzione OnInit () creiamo l'oggetto giusto usando una parola chiave nuovi.
Po nuovi chiamiamo il costruttore dell'oggetto, che nel nostro caso prende due variabili che informano l'oggetto sulle dimensioni del nostro grafico, perché ne abbiamo bisogno per posizionare correttamente la nostra interfaccia. Il costruttore chiamato inoltra l'indirizzo dell'oggetto appena creato nella memoria del computer al nostro pointer detto ChartOperations.
distruttore
Gli oggetti sono un tipo speciale di dati, che se lo creiamo, dobbiamo assicurarci che sia finalmente rimosso dalla memoria del computer. Tutto questo in modo che davanti al tuo laptop non sia necessario essere un server enorme che raccoglie dati creati in precedenza che non sono più necessari a nessuno.
Per eliminare oggetti, usiamo la parola chiave delete, dopo di che abbiamo posto il nostro nome poinera indicando quale oggetto intendiamo. Rimuoviamo il nostro oggetto solo nella funzione API OnDeinit (...)perché ne abbiamo bisogno per tutto il ciclo di vita dell'applicazione, fino a quando il software non viene spento.
Lavora con gli oggetti
Vediamo ora come possiamo usare il nostro oggetto creato per le esigenze della nostra applicazione. Per questo scopo nel corpo della classe cChartOperations Abbiamo definito diverse funzioni. Diamo un'occhiata a uno di loro:
funzione Al clic (...) ne abbiamo bisogno per comunicare alla nostra interfaccia quali livelli di prezzo sono attualmente interessanti per noi. Facendo doppio clic sul grafico, l'algoritmo imposterà la nostra scala dei prezzi nel luogo indicato. Per far funzionare la nostra funzione, dobbiamo rilevare il momento in cui clicchiamo sul grafico, e qui la funzione API aiuta OnChartEvent (...)
Lo snippet di codice sopra riportato riconosce il momento in cui l'utente fa clic sul grafico e quindi chiama la funzione che si trova all'interno dell'oggetto creato in precedenza. Chiamare una funzione consiste nel posizionare un punto dopo il nostro nome pointer all'oggetto, quindi passando il nome della funzione a cui siamo interessati insieme ai parametri necessari, che nel nostro caso indicano le coordinate xey del luogo nel grafico in cui è stato fatto il clic.
Primi effetti
Le procedure da noi create hanno lanciato la prima funzionalità del software, che possiamo testare compilando il nostro programma e facendo clic su un grafico diverso. Di seguito troverai un grafico che presenta alcune funzioni che ti permettono di manipolare i livelli di prezzo visualizzati nella nostra interfaccia grafica.
Seconda classe
Dato che sei stato promosso alla seconda elementare e il nostro clic non va sprecato, progetteremo una seconda struttura che ti consentirà di effettuare ordini dal livello della nostra scala. A tale scopo, abbiamo preparato la classe appropriata, che troverai nel file MQL4 \ Include \ AlgoTrader_v10 \ OrderOperations.mqh
Nel codice sopra puoi vedere la definizione completa dell'oggetto cOrderOperationsche verrà utilizzato per gestire gli ordini che inseriremo nella nostra scala dei prezzi. Prestare attenzione alla funzione ProcessOrderRequests ()in cui il nostro programma comunica con la biblioteca dll usando la funzione ReadOrderRequest ().
strutture
funzione ReadOrderRequest () come risultato della sua azione restituisce una struttura di tipo sOrderRequest, che è un insieme di dati da noi definiti con un ordine effettuato tramite l'interfaccia.
Le strutture sono sorelle più giovani di classi che consentono di creare un blocco di dati contenente molte variabili. Ciò consente l'ordinamento logico delle informazioni relative a un determinato problema. Nel nostro caso, la struttura raccoglie dati sull'ordine inviato dalla nostra interfaccia grafica, come il prezzo di apertura o il volume. Definiamo una struttura precedendo il suo nome con una parola chiave structe quindi impostiamo un elenco dei dati di cui abbiamo bisogno.
La definizione sopra può essere trovata nel file MQL4 \ Include \ AlgoTrader_v10 \ Definitions.mqh.
Usiamo le strutture in modo simile alle variabili, nel primo passo abbiamo bisogno di crearlo specificando il tipo di struttura, e quindi dargli un nome univoco, al quale possiamo riferirci in seguito. Nell'esempio seguente, creiamo una struttura di tipo sOrderRequest e gli diamo un nome unico richiestae quindi assegniamo i dati dalla nostra interfaccia usando le funzioni ReadOrderRequest ().
L'accesso ai dati memorizzati nella struttura è analogo all'utilizzo di variabili, perché in pratica la struttura è solo un insieme di variabili nascoste sotto un identificatore comune. Per leggere o scrivere dati nella struttura è sufficiente dopo il nome che abbiamo dato per mettere un punto, e quindi indicare il nome della variabile che ci interessa. Nel seguente frammento del codice, leggiamo i dati memorizzati nella struttura per inviare l'ordine e quindi salviamo le informazioni sul risultato dell'operazione.
Esecuzione di ordini
Affinché il nostro software possa inviare ordini, dobbiamo implementare l'oggetto creato sulla base della classe cOrderOperations. Poiché avremo bisogno dell'oggetto dal lancio del nostro programma, lo creiamo nella funzione API OnInit ().
Nel costruttore cOrderOperations poniamo una variabile Position_id, che fa parte delle impostazioni della nostra applicazione disponibile nella finestra della piattaforma MetaTrader predefinita. L'identificatore consente al nostro software di riconoscere i propri ordini in modo tale da non creare confusione con gli ordini provenienti da altre fonti.
Abbiamo anche lanciato il codice sopra Timer con l'intervallo ms 200, poiché il nostro oggetto dovrebbe controllare periodicamente se l'interfaccia invia informazioni sull'ordine in entrata.
La funzione dell'oggetto OnTimer200ms () chiamerà una funzione ProcessOrderRequests ()chi effettuerà l'ordine quando riceverà i dati appropriati dall'interfaccia.
effetti
Il nostro software può già comunicare con l'interfaccia grafica e possiamo fare ciò che ci piace fare di più, cioè compilare l'algoritmo e inviare un nuovo ordine. Per aiutarti a iniziare i primi passaggi seguenti troverai alcuni suggerimenti che illustrano quali funzioni sono nascoste sotto chiavi diverse.
Controllo del volume
Tipi di ordini
Somma
Per oggi è tutto, ma è solo l'inizio dell'avventura con Commerciante Algo. Nella prossima puntata si passerà all'implementazione di funzioni avanzate legate al supporto degli algoritmi. Algo Trader verrà creato insieme a te e ti saremo grati per eventuali idee e commenti che potrebbero renderlo migliore per te. Ci piacerebbe sentirti a biuro@expertadvisors.pl .