
MQL5 - Anche voi potete diventare maestri di questo linguaggio
Introduzione
In questo articolo farò qualcosa di diverso da quello che ho fatto negli articoli precedenti. Fondamentalmente, questo materiale è destinato a coloro che hanno poca o nessuna conoscenza di MQL5 o della programmazione in generale. Quindi, l'articolo sarà come un'intervista con me stesso, in cui spiegherò un po' come imparare MQL5 da zero e diventare un professionista.
Un po' di storia
Da quando ho iniziato a scrivere articoli per la community MQL5, ho ricevuto molti feedback. Molte persone mi contattano chiedendomi come ho imparato a programmare in MQL5 per poter fare le cose che descrivo negli articoli. La maggior parte di queste persone sono appassionati alla ricerca di una guida di base per muovere i primi passi nella programmazione. Quindi, questo articolo è dedicato a tutti voi, appassionati e programmatori MQL5 novizi, che volete imparare la programmazione MQL5.
Prima di procedere con questo argomento, devo dire una cosa. Lo scopo di questo materiale non è quello di demotivarvi ma, al contrario, di aumentare ancora di più la vostra motivazione.
Si potrebbe pensare che io abbia molti anni di esperienza nella programmazione MQL5. Tuttavia, al momento di scrivere questo articolo, ho utilizzato il linguaggio MQL5 solo per un anno e mezzo. Esatto, ho meno di due anni di esperienza come programmatore MQL5. Probabilmente vi starete chiedendo come una persona con così poca esperienza nella programmazione MQL5 possa riuscire a fare le cose per MetaTrader 5 che sono state mostrate negli articoli.
Questo perché gli sviluppatori del linguaggio di programmazione MQL5 hanno avuto la grande idea di rendere il linguaggio simile al C/C++ in molti aspetti. Quindi, se un programmatore ha una grande esperienza di C/C++, sarà alquanto facile imparare MQL5, poiché non è necessario reimparare tutti i concetti, la sintassi e i comandi.
Perché lo dico? Perché sono un programmatore professionista di C/C++ dall'inizio degli anni 2000, cioè ho programmato in C/C++ per oltre 23 anni. Se dovessi imparare un nuovo linguaggio per fare qualcosa per MetaTrader 5, molto probabilmente rinuncerei definitivamente.
Molti pensano che per diventare un buon programmatore sia necessario seguire dei corsi. Tuttavia, per imparare davvero a programmare, non bisogna avere paura di commettere errori. Non bisogna mai affezionarsi a un codice o a un'idea. Dovete sempre cercare di sperimentare e provare cose nuove.
Può suonare un po' strano, perché a molte persone nuove piace fare sempre le stesse cose e nello stesso modo. Ma una persona che desidera diventare un grande programmatore è sempre alla ricerca di modi diversi per fare la stessa cosa. Inoltre, molte persone non capiscono che un programmatore sarà sempre ispirato da altri. Possono prendere il codice sorgente funzionante sviluppato da un programmatore più esperto e modificarlo poco a poco, sperimentando e osservando il risultato. In questo modo imparano come il programma viene effettivamente costruito.
Alcuni pensano che per imparare MQL5 si debba iniziare a studiare qualcosa. Infatti, se qualcuno che non ha conoscenze pregresse mi chiede come imparare, consiglio sempre di iniziare con le cose più semplici. In altre parole, imparate un po' di C per conoscere davvero la sintassi e la logica di programmazione, oltre ai comandi. Una volta comprese le basi del linguaggio C, iniziate a studiare il C++ e allo stesso tempo a fare pratica con l'MQL5. Il semplice fatto che abbiate già una conoscenza di base del C vi aiuterà molto nell’iniziare a programmare in MQL5.
Alcuni potrebbero pensare che il C sia obsoleto, ma la verità è che il C è un linguaggio estremamente ben documentato e ampiamente utilizzato. Si può trovare tanto materiale per imparare a usare il C. Notate che non sto dicendo che dovreste approfondire il C. Al contrario, se si imparano alcuni comandi di base e la sintassi, questo sarà sufficiente per iniziare con MQL5.
Questo può sembrare un po' scoraggiante: imparare il C per progredire lo sviluppo in MQL5? Forse, se vi impegnate a fondo e trovate qualcuno disposto a insegnarvi, potete iniziare direttamente con MQL5. Ma dalla mia prima esperienza e dalle opinioni di altre persone, posso dire che il compito non sarà così facile. Quasi tutto il materiale di qualità è concentrato qui, nella community MQL5. Nel resto di Internet, il materiale è sparso e può essere di qualità scadente, il che fa più male che bene. Per quanto riguarda i linguaggi C e C++, esiste un'enorme quantità di materiale eccellente e molto accessibile. Quindi, sta a voi scegliere da dove iniziare.
Il mio primo codice in MQL5
Molti pensano che, poiché so già come programmare in C/C++, ho iniziato immediatamente con progetti complicati ed elaborati in MQL5. Vorrei poter dire che tutto è iniziato così. Tuttavia, la realtà si è rivelata alquanto differente.
Quando muoviamo i primi passi nello sviluppo delle nostre soluzioni, spesso partiamo da ciò che pensiamo di sapere già. Nel mio caso, quando ho iniziato a usare MQL5, tutto ciò che avevo a disposizione era la documentazione del linguaggio. Non sapevo nemmeno che esistesse una community dedicata ad aiutare altri programmatori interessati.
Così, studiando la documentazione ed esaminando i codici sorgente forniti con MetaEditor, ho iniziato a sperimentare. Di seguito è riportato il mio primo codice reale che ho creato sulla base di ciò che ho capito.
01. //+------------------------------------------------------------------+ 02. #property copyright "Daniel Jose" 03. #property version "1.00" 04. #property description "Modify special chart properties" 05. #property script_show_inputs 06. //+------------------------------------------------------------------+ 07. enum eWhat { 08. eScaleDate = CHART_SHOW_DATE_SCALE, //Time scale 09. eScalePrice = CHART_SHOW_PRICE_SCALE //Price scale 10. }; 11. enum eOp { 12. eFalse, //Makes hidden 13. eTrue //Makes visible 14. }; 15. //+------------------------------------------------------------------+ 16. input eWhat user00 = eScaleDate; //Graphic property 17. input eOp user01 = eFalse; //What to do? 18. //+------------------------------------------------------------------+ 19. void OnStart() 20. { 21. ChartSetInteger(0, (ENUM_CHART_PROPERTY_INTEGER) user00, user01); 22. } 23. //+------------------------------------------------------------------+
Codice sorgente del mio primo programma MQL5
Non c'è nulla di straordinario o innovativo. Si tratta principalmente di codice, il cui scopo era verificare se avevo compreso correttamente la documentazione e come gli elementi potevano essere definiti e utilizzati. Il video seguente mostra il risultato dell'esecuzione del codice.
Video dimostrativo
Si tratta di qualcosa di estremamente elementare. Ma essere in grado di creare questo codice in modo completamente autonomo, senza l'aiuto di nessuno a parte la documentazione e i codici sorgente di MetaEditor, mi ha dimostrato che posso fare qualcos'altro. Tutto ciò che dovevo fare era adattare le mie conoscenze di C e C++ a MQL5. Questo è il momento in cui le cose hanno veramente cominciato a progredire.
Forse, guardando questo semplice codice qui sopra, non si trova nulla di utile in esso. Ma come al solito, il primo compito di ogni principiante di un linguaggio di programmazione è quello di creare un codice noto come "HELLO WORLD", in cui l'idea è quella di visualizzare un messaggio sullo schermo.
Ma ho superato la fase del codice "HELLO WORLD". Quindi ho provato qualcosa di un po' più complicato. Tuttavia, poiché non avevo molta esperienza e comprensione del funzionamento effettivo di MQL5, ho iniziato sviluppando uno script. Per me è stato molto più facile, data la poca esperienza e conoscenza di come le cose effettivamente vanno.
Solo dopo un po di tempo ho iniziato a realizzare che MQL5 non è in realtà un linguaggio procedurale, ma un linguaggio basato sugli eventi. Questa scoperta ha cambiato radicalmente il mio approccio alla programmazione e all'analisi del codice. Volendo migliorare le mie capacità, ho iniziato a studiare e a leggere articoli qui nella community MQL5 e mi sono reso conto che, sebbene molti riuscissero a far funzionare il loro codice, stavano imparando MQL5 in modo relativamente elementare, almeno secondo la mia opinione. Pertanto, ho iniziato a sviluppare e sperimentare soluzioni più complesse che esplorassero in modo più approfondito le capacità della piattaforma MetaTrader 5 e del linguaggio MQL5.
E a un certo punto ho deciso di iniziare a condividere i risultati dei miei esperimenti. Ecco come comparve il mio primo articolo. Una cosa è costruire codice e un'altra cosa è spiegare come è stato costruito e progettato. Sapevo che sia gli esperti che i principianti avrebbero letto questi articoli.
Gli articoli hanno subito modifiche sia nella forma che nei contenuti. L'ho fatto in modo che anche chi ha poca esperienza può comprendere le informazioni. E anche se non riuscite ad assorbire immediatamente tutte le nozioni presentate nel materiale, col tempo, man mano che migliorate le vostre capacità di programmazione, sarete in grado di assimilare correttamente ciò che sto cercando di trasmettere in un determinato articolo.
La conoscenza deve essere condivisa. Non vedo alcuna gloria nel morire con tutta la propria saggezza senza lasciare qualcosa di prezioso, qualcosa che possa cambiare la visione del mondo di qualcuno, risvegliando qualcosa di cui molti non si rendono conto, perché tengono sempre la testa bassa.
Ma torniamo al codice. Voglio dimostrarvi che anche poche righe di codice possono contenere molte più informazioni e nozioni di mille righe di codice. Anche se in origine tutte le informazioni, che non fanno parte della sintassi C/C++ e quindi di MQL5, non erano in inglese. Ma questo è un mero dettaglio. Vediamo questo piccolo codice e capiamo come funziona. E principalmente: Perché funziona.
Analisi del codice
Le righe due, tre e quattro potrebbero essere eliminate dal codice. In realtà, servono a MetaTrader 5 solo per informare l'utente sullo scopo del codice. Come utente, potete semplicemente rimuovere queste righe dal vostro codice di apprendimento.
La riga cinque è molto importante perché senza di essa MetaTrader 5 non capirà che lo script può essere personalizzato dall'utente attraverso un qualche tipo di struttura di input, che in questo caso è 'inputs' mostrato nelle righe 16 e 17. Ci arriveremo presto.
Ora arriva qualcosa che molti potrebbero non capire. Soprattutto se hanno studiato solo MQL5 o se provengono da altri linguaggi molto diversi dal C/C++. Mi riferisco alle enumerazioni, presenti nelle righe 07 e 11.
È molto probabile che siate confusi quando guardate queste costruzioni. Potreste persino pensare che siano qualcosa di troppo complicato per voi. Ma proprio perché MQL5 è stato costruito per avvicinare i programmatori C/C++, lo rende così piacevole da essere usato da chi ha già anche solo una piccola esperienza in C/C ++. Ma cerchiamo di capire le enumerazioni, almeno superficialmente.
Un'enumerazione può essere più o meno intesa come una sequenza di dati a cui è possibile assegnare o meno un valore. Se non si assegna un valore, il conteggio inizierà sempre con il primo valore possibile, che in questo caso è zero. Pertanto, l'enumerazione definita nella riga 11 segue lo stesso principio dei valori 0 o 1. In C/C++, come in MQL5, il valore zero è considerato falso e il valore uno è considerato vero.
Pertanto, alla riga 12, dove viene definito il valore eFalse, abbiamo l'indicazione di zero, mentre alla riga 13, che è il secondo valore dell'enumerazione, avremo il valore di uno. Se avessimo più cose definite, queste seguirebbero la sequenza, quindi la successiva sarebbe due, tre e così via. Questo è il caso più semplice.
Voglio attirare la vostra attenzione su un’altra cosa. Alla fine della riga 12 abbiamo qualcosa che in C/C++ sarebbe un commento. Abbiamo lo stesso tipo di cose anche in altre linee. Concentriamoci sulla riga 12, ma questo vale anche per tutti gli altri punti.
Se osserviamo lo script quando viene lanciato sul grafico, vedremo la Figura 01. In esso, ho evidenziato ciò che corrisponde esattamente al commento della riga 12.
Figura 01 - Finestra di interazione con l'utente
Queste cose semplificano notevolmente la codifica di MQL5. In altri linguaggi, dovremmo fare alcune cose per ottenere ciò che viene fatto qui in MQL5 in modo così semplice e pratico. Pertanto, è necessario comprendere che scrivere un commento nel codice è la cosa giusta da fare, perché consente non solo di rendere il codice più comprensibile, ma anche di personalizzare il messaggio che verrà visualizzato all'utente.
Facciamo un passo indietro alla riga 07, dove abbiamo un'altra enumerazione. Tuttavia, questa enumerazione è diversa da quella appena spiegata. Non si tratta di cose completamente diverse: la differenza è che ora assegniamo dei valori a ciascuno degli elementi. Cioè, il compilatore userà i valori da noi specificati, che in questo caso sono costanti definite in MQL5. Potreste chiedere: Perché non usare direttamente le costanti invece di assegnarle a un'enumerazione? Il motivo è la facilità di implementazione. Se dovessimo usare direttamente le costanti, dovremmo creare qualcos'altro, come un array o una struttura, e questo è molto più difficile. Utilizzando il mio approccio, è possibile inserire qualsiasi valore in qualsiasi posizione o sequenza. E se nella sequenza dichiarata compare una costante di interesse, non è necessario assegnare o dichiarare quella costante; basta aggiungere altro contenuto all'enumerazione e il linguaggio si occuperà di garantire che i valori corretti siano usati e assegnati in modo appropriato.
Vedete come avendo una base solida e ben costruita in un linguaggio come il C/C++ ci aiuti nella scrittura del codice MQL5. Ciò che mostriamo qui non si trova spesso nel codice MQL5. In effetti, ho notato che molti ricorrono a costruzioni molto più complesse e lunghe per ottenere lo stesso risultato che ho ottenuto qui. E notate che ho finito per scrivere una sola riga di codice (riga 21).
Ora fate attenzione a quanto segue: nella stessa riga 21, che effettivamente è l'unica che verrà eseguita, dobbiamo effettuare una conversione di tipo esplicita. Questo è necessario affinché il compilatore capisca e di conseguenza, generi correttamente il codice finale. Ma perché la conversione esplicita è così importante? Il motivo risiede nel compilatore. Per il processore non è importante, perché stiamo usando solo numeri e questo è ciò che il processore vede effettivamente. I tipi non interessano al processore, si limita a osservare i numeri. Ma il secondo argomento della riga 21, pur essendo un valore numerico, non è esattamente quello atteso dalla funzione ChartSetInteger. Questa funzione si aspetta un certo tipo, non un valore numerico. Anche se il valore rappresenta il tipo previsto, cioè il valore è esattamente la costante che stiamo usando, il compilatore lo vedrà come un errore. Quindi, per risolvere questo problema, forziamo esplicitamente la conversione del valore numerico nel tipo previsto dalla funzione ChartSetInteger. In questo modo, il compilatore sarà in grado di capire che siamo consapevoli dei valori che stiamo passando alla funzione.
Alcune riflessioni su Python
Prima di concludere la nostra conversazione, caro lettore e programmatore novizio, voglio condividere alcune riflessioni finali, frutto della mia esperienza e delle conoscenze acquisite in diversi anni di lavoro con vari linguaggi di programmazione. Il mio scopo è quello di prevenire qualsiasi frustrazione futura che possa sorgere quando si cerca di eseguire determinate azioni in MetaTrader 5.
Sebbene il nostro argomento principale sia MQL5, viene spesso posta la seguente domanda: se studiare o meno Python. Soprattutto per quelli che stanno iniziando a imparare la programmazione per operare sui mercati finanziari, sorge la domanda se valga la pena approfondire la loro conoscenza di Python per lavorare con MetaTrader 5. Questa domanda è molto pertinente, poiché imparare Python è molto più facile e veloce che affrontare le difficoltà dell'apprendimento del C, poi del C++ e infine ottenere una base solida e consolidata per il lavoro professionale con MQL5. Tuttavia, c'è un punto da tenere a mente per non pensare di aver sprecato il proprio tempo imparando (o non imparando) Python.
Il linguaggio di programmazione Python (anche se alcuni preferiscono definirlo un linguaggio di scripting) non è paragonabile a ciò che si può fare in MQL5 - forse è per questo che alcuni non lo considerano un linguaggio di programmazione, ma non entreremo in questo dibattito qui. Se il vostro obiettivo è imparare ed essere in grado di generare codici solo per testare, verificare e analizzare qualcosa in modo puramente matematico, allora la soluzione più breve e più semplice è imparare Python. Questo perché è più facile eseguire backtest e simili in Python, interagendo direttamente con MetaTrader 5, piuttosto che provare a fare la stessa cosa utilizzando MQL5.
Può sembrare strano per alcuni, ma con un po' di formazione e molta dedizione, è possibile creare facilmente uno script Python che può fare le stesse cose che un programmatore con molta più esperienza può fare con MQL5. Molte volte il programmatore deve creare indicatori, Expert Advisor, oltre a dover configurare il tester di strategia, per verificare se un determinato sistema operativo, il cosiddetto SETUP, è profittevole o meno. Per non parlare del rischio di mettere tutto a repentaglio non impostando tutto correttamente.
Si potrebbe pensare che, utilizzando MetaTrader 5, abbiamo accesso ai grafici e ad una bella presentazione dei risultati, che ci renderanno più facile l'analisi. Tuttavia, considera quante conoscenze saranno necessarie per programmare tutte le funzioni richieste per eseguire un semplice backtest direttamente in MetaTrader 5.
Lavorando con Python, è possibile usare il pacchetto per accedere ai dati di MetaTrader 5. Utilizzando tutto quello che si può fare in Python, è più facile effettuare le stesse ricerche che fa un programmatore MQL5. Una volta completata la ricerca, è possibile esportare i dati in Excel o in un altro programma per eseguire tutte le rappresentazioni grafiche che possono essere fatte in MetaTrader 5, rendendo più facile l'analisi dei risultati.
Devo aggiungere qualche breve spiegazione qui. Perché usare Python invece di Excel correttamente, visto che i risultati verrebbero tracciati in Excel? Il motivo è semplice: Il VBA (Visual Basic for Application) non ci permette di accedere direttamente agli stessi dati che avremmo attraverso Python, dato l'utilizzo dei dati di MetaTrader 5. Per farlo in Excel, è necessario creare una DLL che supporti questo tipo di cose oppure esportare molti file in formato CVS in modo da ottenere gli stessi dati.
Una volta entrati in Excel, avrete forse ancora più lavoro per produrre tutti i calcoli che verrebbero eseguiti in Python. Il lato negativo è che se si decide di cambiare il database, in Excel si dovrà rifare tutto il lavoro. Ma se si utilizza Python, è sufficiente indicare a Python di modificare il database e lo fornirà direttamente a MetaTrader 5 senza alcuno sforzo aggiuntivo da parte dell'utente.
Il mio consiglio è quindi di cercare di imparare il più possibile, perché ogni strumento ha i suoi vantaggi e svantaggi. Sebbene Python sia molto utile, non consente di creare un indicatore da visualizzare su un grafico o un Expert Advisor che aiuti a fare trading. Questo può essere implementato solo tramite MQL5. Pertanto, non esiste uno strumento migliore o peggiore. Si completano a vicenda e servono a differenti scopi. In ogni caso, studiate entrambe le cose, perché non sapete mai quando avrete bisogno di usare una o l'altra.
Conclusioni
Nonostante tutta la semplicità, bisogna sempre ricordare quanto segue: Siete solo all'inizio. Non cercate di fare subito qualcosa di complicato. Provate a creare qualcosa che funzioni. Anche se a prima vista possa sembrare del tutto inutile, iniziate con qualcosa di semplice.
Iniziate a sperimentare le funzioni un po' alla volta. Studiate il linguaggio C/C++ per ampliare le vostre capacità di programmazione MQL5. Esercitatevi sempre e cercate di fare le cose a modo vostro, in modo diverso da quello che fanno sempre gli altri, perché non importa quanto complicato possa sembrare un compito, c'è sempre un modo per farlo meglio.
Imparate a semplificare i vostri codici, siate pazienti e persistenti. Non arrendetevi se incontrate un problema che va leggermente oltre le vostre conoscenze. In una situazione del genere, imparate ancora di più e provate a creare una soluzione basata su ciò che già sapete. Se avete già risolto un problema, cercate una soluzione migliore. La vostra ricompensa finale sarà una conoscenza vasta e profonda, una ricchezza che nessuno potrà portarvi via. La conoscenza può essere presa in prestito, ma non può mai essere rubata.
Siate umili e cercate di condividere le vostre conoscenze con gli altri. Così facendo, si imparano cose nuove e si mostrano anche nuove possibilità per coloro che sono focalizzati su altre soluzioni. Per oggi è tutto.
Tradotto dal portoghese da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/pt/articles/12071





- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso