
Scopri perché e come progettare il tuo sistema di trading algoritmico
Introduzione
Possiamo affermare senza alcun dubbio che l'importanza della programmazione o codifica aumenta ogni giorno in tutti i campi del nostro mondo. Quindi, possiamo osservare come la programmazione o la codifica possono contribuire ad facilitarci la vita e non solo a renderci la vita facile, ma a garantire risultati accurati in base a ciò che desideriamo e che predeterminiamo.
Nel mondo del trading, questo magnifico campo, possiamo dire che la programmazione renda il nostro trading facile e sistematico attraverso programmi creati che contribuiscono a darci quella facilità e automazione, una volta completato un programma accurato e buono con ciò che ci aspettiamo e vogliamo ottenere da questo programma. Quindi, il mondo della codifica può darci molti vantaggi, ma secondo me il vantaggio più importante della codifica per fare trading è aiutarti a essere disciplinato poiché, come tutti sappiamo, da trader c'è sempre la sfida della disciplina nelle decisioni operative. La disciplina è una caratteristica importante, che influenza i nostri risultati di trading e investimento, quindi non si tratta di una semplice opzione nel trading. Come mi piace sempre dire, la disciplina è la chiave del tuo successo nel trading e nella vita stessa. Definire una disciplina in modo semplice, significa fare ciò che devi fare al momento giusto, indipendentemente dalle circostanze. Quindi, quando troviamo uno strumento che aiuta a raggiungere questo obiettivo, dobbiamo prestare attenzione e capire di cosa si tratta. E lo strumento giusto per questo è la codifica.
Come tutti sappiamo, la cosa più popolare che ci impedisce di essere disciplinati durante il trading sono le emozioni, e dobbiamo evitare queste emozioni o evitare gli effetti negativi di queste emozioni sulle nostre decisioni di trading. Voglio che tu immagini di avere un sistema che funzioni per te, con i tuoi parametri predeterminati, senza interferenze umane. Solo così si eviterà l'effetto negativo delle emozioni sulle tue decisioni di trading. La buona notizia è che abbiamo uno strumento che ci aiuta a realizzare tutto ciò. Qui scriverò di MQL (MetaQuotes Language) per la piattaforma MetaTrader. Questo fantastico linguaggio o strumento di programmazione ci aiuterà a progettare il nostro sistema di trading con i nostri parametri specifici che garantiranno azioni specifiche o decisioni di trading specifiche.
Se vuoi saperne di più su questo argomento, citiamo questo esempio. Ipotizziamo di avere due investitori (A&B) e che la loro strategia di trading sia la stessa, ovvero acquistare e tenere durante una tendenza al rialzo e vendere quando si inverte la tendenza, ma che ognuno di loro si comporti in modo diverso: l'investitore A è disciplinato ma l'investitore B no. Guarda le figure sottostanti:
Ora, secondo i dati precedenti, è ovvio che la disciplina è essenziale per un buon risultato, mentre la mancanza di disciplina porterà a scarsi risultati.
Attraverso questo articolo condividerò con te il banale sistema di trading basato sull'incrocio di medie mobili semplici per imparare a progettare il tuo attraverso la condivisione di alcune delle basi della codifica MQL5, con esempi per esercitarti su queste basi e per comprenderle a fondo. Lo scopo è quello di fornirti una panoramica su cosa puoi fare usando questo magnifico strumento.
L'obiettivo principale di questo articolo è guidare i principianti a imparare come progettare il loro sistema di trading algoritmico in MQL5 attraverso l'apprendimento di alcune delle basi di MQL5 per una semplice idea di sistema di trading che sarà codificata passo dopo passo in questo articolo, dopo aver spiegato alcune dellr Nozioni di base su MQL5. Codificheremo tramite script, quindi presenteremo il risultato dopo l'esecuzione del codice. Per migliorare la tua comprensione, ti consiglio di applicare e codificare ciò che leggerai qui da solo in quanto ciò ti aiuterà a comprendere a fondo i concetti dei codici menzionati. E tieni presente che tutti i codici, i programmi e le strategie di trading creati in questo articolo sono progettati solo per scopi educativi, non per altro. E tieni presente che useremo MQL5 per scrivere codici.
Di cosa abbiamo bisogno per progettare il nostro trading algoritmico
In questa parte, menzionerò cosa vorremo avere come strumenti e cosa vogliamo sapere su questi strumenti:
- La piattaforma MetaTrader 5, alias MetaTrader 5 Terminal. Eseguire ordini e testare i nostri codici attraverso il terminale. E MetaTrader è la piattaforma di trading più popolare.
Un conto demo. Puoi aprire un conto demo con il tuo broker per avere denaro virtuale per testare le tue strategie di trading senza rischi ma nello stesso ambiente di mercato. Assicurati di utilizzare questo account demo non il tuo account reale per la codifica poiché dovrai creare ed eseguire programmi che eseguiranno le transazioni sul tuo account.
MetaQuotes Language Editor, su cui scriveremo i nostri codici o programmi. Le schermate seguenti mostreranno come aprirlo su MetaTrader. Ci sono tre modi per aprirlo.
- Fai clic sul menu Strumenti, quindi su MetaQuotes Language Editor:
O clicca sull'Icona dell'Editor di MetaQuotes:
Oppure premi il pulsante F4 da Tastiera mentre sei nel terminale aperto.
Lo screenshot seguente mostra come appare, e qui faremo la maggior parte del nostro lavoro per scrivere i nostri programmi e progettare i nostri sistemi di trading.
Ora dobbiamo usare questo editor per scrivere il nostro primo codice, quindi segui i seguenti passaggi per sapere come farlo.
Clicca su Nuovo quindi troverai diversi tipi di programmi fra cui scegliere:
Quello di cui dobbiamo parlare in questo articolo consiste in: Expert Advisor, Indicatore personalizzato e Script.
- Expert Advisor: EA è un programma nel terminale sviluppato e utilizzato per l'automazione dei processi analitici e di trading in base ai parametri impostati.
- Indicatore personalizzato: è un programma codificato; è fondamentalmente teso alla visualizzazione grafica delle dipendenze calcolate preliminarmente.
- Script: è un programma destinato all'esecuzione di qualsiasi azione, può svolgere sia funzioni analitiche che di trading e, a differenza degli Expert Advisor, viene eseguito su richiesta, non tramite tick.
Il programma The Hello World!
In questa parte impareremo come scrivere il nostro primo programma e il nostro primo codice in MQL5. Tutti i principianti nella programmazione o nella codifica iniziano il loro viaggio codificando il codice 'Hello World'. Quindi, inizieremo scrivendo un programma che renda sullo schermo del terminale 'Hello World'. Facciamolo…
Apri il MetaEditor come mostrato sopra, quindi fai clic su Nuovo, quindi seleziona dalle opzioni (Script), quindi fai clic su Avanti.
Dopo aver fatto clic su Avanti, apparirà la seguente finestra. Inserisci i dati dello script che desideri:
- Nome è il nome dello script
- Autore è il creatore dello script
- Link è il tuo link
- Parametro è l'insieme dei parametri che devi impostare per lo script ma non imposteremo alcun parametro per questo script, quindi lo salteremo.
Dopo aver fatto clic su Fine si aprirà la seguente finestra. E in questa finestra, il nostro programma sarà codificato. Qui, come ho detto, dobbiamo progettare un programma che mostri 'Hello World!' nel terminale. Quindi, inizieremo a scrivere il nostro codice tra le due parentesi graffe.
Qui useremo:
- Avviso: stampa ciò che determino o visualizza un messaggio predeterminato nel programma che, qui nel nostro esempio, è 'Hello World!'
- ( “ ”): per scrivere tra quello che voglio o il messaggio predeterminato 'Hello World!' o qualsiasi altra cosa.
- ; - per separare le frasi.
Il nostro codice sarà lo stesso di:
//+----------------------------------------------------------+ //| Hello World!.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+----------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+----------------------------------------------------------+ //| Script program start function | //+----------------------------------------------------------+ void OnStart() { Alert("Hello World!"); } //+----------------------------------------------------------+
Dopo aver scritto il nostro codice, fai clic su Compila, quindi assicurati che non ci siano errori e avvisi. La scheda Errori deve essere priva di errori dopo aver compilato il codice per assicurarsi che il programma venga eseguito come indicato nella figura seguente. Quindi vai al terminale premendo F4 per testare il nostro codice.
Idea di strategia di trading (incrocio di due medie mobili semplici)
In questa parte, presenterò un'idea di strategia di trading solo a scopo didattico. Ha lo scopo di aiutarti a imparare le basi di MQL5 e come programmare in MQL5.
Disclaimer
Qualsiasi informazione viene fornita 'così com'è' esclusivamente a scopo informativo e non è intesa per scopi di trading o consulenza. La performance passata non è garanzia di risultati futuri. Se scegli di utilizzare questi materiali su qualsiasi conto di trading, lo fai a tuo rischio e pericolo.
Qui, l'idea della strategia sta cercando di fare trading con il trend utilizzando una conferma dal segnale di due semplici indicatori di media mobile:
- La Media Mobile Semplice è un indicatore tecnico "in ritardo" che calcola il prezzo medio di chiusura di un periodo specifico ed è in ritardo poiché il suo segnale arriva dopo il segnale dell'azione del prezzo.
- La Strategia è la seguente:
- Se la media mobile semplice più breve (il suo periodo è 20) incrocia la media mobile semplice più lunga (il suo periodo è 50) portandosi al di sopra di essa, allora il segnale è Buy.
- Se la media mobile semplice più breve (il suo periodo è 20) incrocia la media mobile semplice più lunga (il suo periodo è 50) portandosi al di sotto di essa, il segnale è Sell.
Qui, abbiamo bisogno di progettare un programma per farlo.
Progetto di sistema di trading algoritmico
In questa parte parlerò di un passaggio molto importante che devi fare se vuoi codificare il tuo sistema facilmente e senza intoppi. Questo passaggio serve a creare un progetto per la tua strategia e idea di trading in una sequenza di passaggi di ciò che vuoi che il tuo sistema faccia esattamente, e puoi farlo attraverso un diagramma, ad esempio, che ti darà un progetto chiaro. Ed ecco un esempio per il nostro progetto di sistema (Incrocio di due medie mobili semplici) per vedere in modo chiaro cosa abbiamo bisogno di codificare e cosa ci aspettiamo di ottenere da questo sistema.
Ora, prima di tutto comprendiamo alcune delle basi di MQL5, quindi usiamo ciò di cui abbiamo bisogno per progettare.
Variabili e tipi di esse e come possiamo usarle
In questa parte identificheremo e capiremo:
- Cosa sono le variabili?
- Tipi di variabili.
- Come possiamo usarle?
In generale, in un programma, i valori di un dato possono essere costanti o variabili. Se i valori sono variabili possono essere modificati dal programma e dall'utente. Una variabile è una posizione di memoria. Ha un nome associato a quella posizione. Quindi, la posizione di memoria viene utilizzata per contenere i dati. Un programma in MQL5 può contenere decine e centinaia di variabili. Una proprietà molto importante di ogni variabile è la possibilità di utilizzare il suo valore in un programma. La limitazione di questa possibilità è connessa con l'ambito della variabile che è una posizione in un programma in cui è disponibile il valore della variabile. Ogni variabile ha il suo ambito.
Quindi, in base all'ambito, ci sono due tipi di variabili in MQL5, locali e globali. Una variabile locale è una variabile dichiarata all'interno di una funzione. L'ambito delle variabili locali è il corpo della funzione, in cui viene dichiarata la variabile. Una variabile locale può essere inizializzata da una costante o da un'espressione corrispondente al suo tipo. Le variabili globali sono dichiarate al di là di tutte le funzioni. L'ambito delle variabili globali è l'intero programma. Una variabile globale può essere inizializzata solo da una costante corrispondente al suo tipo (e non espressione). Le variabili globali vengono inizializzate solo una volta prima di dichiarare l'esecuzione di funzioni speciali.
Indipendentemente dall'ambito delle variabili, esamineremo ora i seguenti tipi di variabili:
- int è un tipo numerico; esistono diversi tipi di numeri interi per memorizzare valori numerici di diversa lunghezza.
- double. la creazione di un programma che gestirà i numeri utilizzati nel trading richiede un tipo di dati in grado di gestire i numeri in virgola mobile. Quindi MetaTrader offre i seguenti tipi di dati per gestire questi dati: float e double. La differenza tra loro sono i byte allocati in memoria, 4 per float e 8 per double, risultando nei seguenti valori minimo e massimo:
- float - minimo 1.175494351e-38, massimo 3.402823466e+38
- double - minimo 2.2250738585072014e-308, massimo 1.7976931348623158e+308
Per dichiarare questi tipi di dati, utilizzare le parole chiave float e double. - string è un tipo di dati molto importante, ampiamente utilizzato anche nella codifica MQL5. String permette di memorizzare e manipolare qualsiasi sequenza alfanumerica di caratteri.
- bool - Boolean è un tipo logico che può assumere il valore di true o false..
Facciamo un esempio per l'utilizzo della variabile:
//+------------------------------------------------------------------+ //| Variables.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int myInteger = 5; double myDouble = 10.56; string myString = "My name is Mohamed"; bool myBoolean = true; Alert(myInteger); Alert(myDouble); Alert(myString); Alert(myBoolean); } //+------------------------------------------------------------------+
Dopo aver compilato il codice precedente se scrivi come quello che ho menzionato sopra, non troverai errori o avvisi e devi vedere la finestra di avviso come nella schermata seguente.
Un altro esempio di utilizzo delle variabili.
- Il valore equivalente di message1
- Il valore equivalente di C
- Il valore equivalente del risultato
- Il valore equivalente di message2
//+------------------------------------------------------------------+ //| Variables 2.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int A = 10; int B = 5; int C; double var1 = 2.5; double var2 = 4; double result = var1 / var2; string greeting = "Hello"; string space = " "; string name = "Mohamed"; string message1; string message2; C = A + B; message1 = greeting + space + name; message2 = "Value of A is: " + string(A); Alert(message1); Alert(C); Alert(result); Alert(message2); } //+------------------------------------------------------------------+
Operazioni booleane
Booleano: restituisce semplicemente true o false per un'operazione logica.
- == significa uguale
- != significa non uguale
- < significa minore di
- <= significa minore o uguale
- > significa maggiore di
- >= significa maggiore o uguale
//+------------------------------------------------------------------+ //| Boolean Operations.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { bool result = 4 < 5; Alert (result); //true } //+------------------------------------------------------------------+
Qui deve restituire true al messaggio di avviso come 4 < 5.
Il While loop
L'operatore while è costituito da un'espressione controllata e dall'operatore, che deve essere soddisfatto. Se l'espressione è vera, l'operatore viene eseguito finché l'espressione non diventa falsa. Nell'esempio seguente, possiamo capire che prima avvisando all'inizio per conoscere l'inizio e la fine del ciclo, il programma controllerà il valore del contatore e mostrerà il suo valore se è inferiore a 3. Quindi ne aggiungerà uno a risultato precedente fino a diventare falso in questo caso = o > 3, quindi dare l'ultimo avviso quando il ciclo è terminato. Quindi, vedremo i seguenti messaggi da questo codice nel messaggio di avviso: Inizio dello script, 1, 2, Ciclo terminato.//+------------------------------------------------------------------+ //| While Loop.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //While (Loop) Alert("Start of script"); int counter = 1; while(counter < 3) //true? { Alert(counter); counter = counter + 1; } Alert("Loop has finished"); }
Il For loop
L'operatore for è costituito da tre espressioni e da un operatore eseguibile:
for(expression1; expression2; expression3)
operatore;
Expression1 descrive l'inizializzazione del ciclo. Expression2 verifica le condizioni della terminazione del ciclo. Se è vero, viene eseguito il corpo del ciclo per. Il ciclo ripete expression2 finché non diventa false. Se è false, il ciclo viene terminato e il controllo viene assegnato all'operatore successivo. Expression3 viene calcolato dopo ogni iterazione.
Quindi, in base al seguente esempio di ciclo di for, possiamo aspettarci che l'esecuzione del codice risulterà cinque messaggi di Hello, (I =0, I = 2, …………,I = 4), quindi sarà = 5, quindi il ciclo verrà terminato.
//+------------------------------------------------------------------+ //| For Loop.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { for(int i=0; i<5 ; i++) { Alert("Hello"); } } //+------------------------------------------------------------------+
L'istruzione IF, Else
L'operatore IF - ELSE viene utilizzato quando è necessario effettuare una scelta. Formalmente, la sintassi è la seguente:
if (espressione)
operatore1
else
operatore2 <br7/ >
Se l'espressione è vera, operator1 viene eseguito e il controllo viene assegnato all'operatore che segue operator2 (operator2 non viene eseguito). Se l'espressione è falsa, viene eseguito operator2.
Esempio: secondo il seguente esempio, dobbiamo prima ricevere un avviso con il valore Bid, quindi determiniamo se il valore Bid > 1.146600, quindi saremo avvisati con 'Il prezzo è superiore a 1.146600 -> ACQUISTA'. In caso contrario, verremo avvisati con 'Il prezzo è inferiore a 1,146600 -> VENDI'. E quello che segue è il codice e il suo risultato di esecuzione.
//+------------------------------------------------------------------+ //| If-else statement.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double level = 1.146600; double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); Alert("Bid Price = " + string(Bid)); if(Bid > level) { Alert ("The price is above " + string(level) + " -> BUY"); } // What if the condition is false and we need to take an action also here we can use else function instead of writing another if code else { Alert ("The price is below " + string(level) + " -> SELL"); } } //+------------------------------------------------------------------+
Input del trader
In questa parte impareremo come determinare i nostri input o parametri preferiti per il programma invece di regolare il codice.
Proprietà (#property): Ogni programma MQL5 consente di specificare parametri specifici aggiuntivi denominati #property che aiutano il terminale client nella corretta manutenzione dei programmi senza la necessità di avviarli esplicitamente.
script_show_inputs: visualizza una finestra con le proprietà prima di eseguire lo script e disabilita questa finestra di conferma
Input variabili:</ s5> La classe di archiviazione input definisce la variabile esterna.< /s10> Il modificatore input è indicato prima del tipo di dati.</ s6>
//+------------------------------------------------------------------+ //| Trader Inputs.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property script_show_inputs //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ input int TakeProfit = 10; input int StopLoss = 10; void OnStart() { double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double TakeProfitLevel = Bid + TakeProfit * 0.00001; // 0.00001 (5 digits broker, so multiplied by 10) double StopLossLevel = Bid - StopLoss * 0.00001; Alert("Price now = " + string(Bid)); Alert ("TakeProfitLevel = ", TakeProfitLevel); Alert ("StopLossLevel = ", StopLossLevel); } //+------------------------------------------------------------------+
Apertura degli ordini
In questa parte ti presenterò come scrivere il codice per aprire un ordine:
//+------------------------------------------------------------------+ //| TEST.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property script_show_inputs #include <Trade\Trade.mqh> CTrade trade; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ input int TakeProfit = 150; input int StopLoss = 100; void OnStart() { double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double Balance = AccountInfoDouble(ACCOUNT_BALANCE); double Equity = AccountInfoDouble(ACCOUNT_EQUITY); double TakeProfitLevel = (Ask+TakeProfit*0.00001); double StopLossLevel = (Ask-StopLoss*0.00001); if(Equity >= Balance) trade.Buy(0.01,NULL,Ask,StopLossLevel,TakeProfitLevel,NULL); for (int i=PositionsTotal()-1; i>=0; i--) { ulong ticket = PositionGetTicket(i); ENUM_POSITION_TYPE position = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE)); Alert (" Order Ticket # ", ticket); Alert("TakeProfit = ", TakeProfitLevel); Alert("StopLoss = ", StopLossLevel); } } //+------------------------------------------------------------------+
Tecnica di gestione degli errori
Quando il programma viene eseguito, chiunque può trovare arresti anomali e qualcosa è andato storto. Quindi, dobbiamo includere questa tecnica nel nostro codice per controllare ogni ordine o codice eseguito e avvisare se qualcosa è andato storto. In altre parole, è una tecnica di protezione per il trader per proteggere lui e il suo fondo da qualsiasi situazione inappropriata.
//+------------------------------------------------------------------+ //| TEST.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property script_show_inputs #include <Trade\Trade.mqh> CTrade trade; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ input int TakeProfit = 150; input int StopLoss = 100; void OnStart() { double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double Balance = AccountInfoDouble(ACCOUNT_BALANCE); double Equity = AccountInfoDouble(ACCOUNT_EQUITY); double TakeProfitLevel = (Ask+TakeProfit*0.00001); double StopLossLevel = (Ask-StopLoss*0.00001); if(Equity >= Balance) trade.Buy(0.01,NULL,Ask,StopLossLevel,TakeProfitLevel,NULL); for (int i=PositionsTotal()-1; i>=0; i--) { ulong ticket = PositionGetTicket(i); ENUM_POSITION_TYPE position = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE)); if (ticket <= 0) { Alert("Error!"); //in Case of error and the order did not open, appears "Error!" } else { Alert("Your ticket # is: " + string(ticket)); Alert("TakeProfit = ", TakeProfitLevel); Alert("StopLoss = ", StopLossLevel); } } } //+------------------------------------------------------------------+
Ordini di chiusura
In questa parte creeremo il codice per aprire e chiudere un ordine per imparare a chiudere un ordine.//+------------------------------------------------------------------+ //| TEST.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property script_show_inputs #include <Trade\Trade.mqh> CTrade trade; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ input int TakeProfit = 150; input int StopLoss = 100; void OnStart() { double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double Balance = AccountInfoDouble(ACCOUNT_BALANCE); double Equity = AccountInfoDouble(ACCOUNT_EQUITY); double TakeProfitLevel = (Ask+TakeProfit*0.00001); double StopLossLevel = (Ask-StopLoss*0.00001); trade.Buy(0.01,NULL,Ask,StopLossLevel,TakeProfitLevel,NULL); for (int i=PositionsTotal()-1; i>=0; i--) { ulong ticket = PositionGetTicket(i); ENUM_POSITION_TYPE position = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE)); Alert (" Order Ticket # ", ticket); Alert("TakeProfit = ", TakeProfitLevel); Alert("StopLoss = ", StopLossLevel); Sleep(2000); trade.PositionClose(ticket,-1); Alert("Order Closed..."); } } //+------------------------------------------------------------------+
Modifica degli ordini tramite OrderModify
In questa parte impareremo come creare codice che aiuti a modificare l'ordine. Modificherà le caratteristiche degli ordini precedentemente aperti o pendenti.
//+------------------------------------------------------------------+ //| TEST.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property script_show_inputs #include <Trade\Trade.mqh> CTrade trade; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ input int TakeProfit = 150; input int StopLoss = 100; void OnStart() { double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double Balance = AccountInfoDouble(ACCOUNT_BALANCE); double Equity = AccountInfoDouble(ACCOUNT_EQUITY); double TakeProfitLevel = (Ask+TakeProfit*0.00001); double StopLossLevel = (Ask-StopLoss*0.00001); double TakeProfitLevel2 = (TakeProfitLevel+0.00100); double StopLossLevel2 = (StopLossLevel-0.00050); trade.Buy(0.01,NULL,Ask,StopLossLevel,TakeProfitLevel,NULL); for (int i=PositionsTotal()-1; i>=0; i--) { ulong ticket = PositionGetTicket(i); ENUM_POSITION_TYPE position = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE)); Alert (" Order Ticket # ", ticket); Alert("TakeProfit = ", TakeProfitLevel); Alert("StopLoss = ", StopLossLevel); Sleep(5000); trade.PositionModify(ticket,StopLossLevel2,TakeProfitLevel2); Alert("Order Modified..."); Alert("Modified TakeProfit = ", TakeProfitLevel2); Alert("Modified StopLoss = ", StopLossLevel2); } } //+------------------------------------------------------------------+
Il sistema di incrocio di due medie mobili semplici
In questa parte, metteremo insieme tutto per codificare due semplici incroci di medie mobili. Tutti faranno tutto il necessario secondo il progetto di cui sopra.
Qui, sceglieremo un Expert Advisor quando inizieremo un nuovo progetto facendo clic su Nuovo da MetaEditor.
Per ricordare tutto, ecco il nostro progetto dettagliato del sistema di trading:
- Se la media mobile semplice più breve (il suo periodo è 20) incrocia la media mobile semplice più lunga (il suo periodo è 50) portandosi al di sopra di essa, il segnale è Buy.
- Se la media mobile semplice più breve (il suo periodo è 20) incrocia la media mobile semplice più lunga (il suo periodo è 50) portandosi al di sotto di essa, il segnale è Sell.
//+------------------------------------------------------------------+ //| SMA crossover.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //create an array for several prices double myMovingAverageArray1[], myMovingAverageArray2[]; //define the properties of MAs - simple MA, 1st 20 / 2nd 50 int movingAverage1 = iMA(_Symbol, _Period, 20, 0, MODE_SMA, PRICE_CLOSE); int movingAverage2 = iMA(_Symbol,_Period,50,0,MODE_SMA,PRICE_CLOSE); //sort the price arrays 1, 2 from current candle ArraySetAsSeries(myMovingAverageArray1,true); ArraySetAsSeries(myMovingAverageArray2,true); //Defined MA1, MA2 - one line - currentcandle, 3 candles - store result CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1); CopyBuffer(movingAverage2,0,0,3,myMovingAverageArray2); //Check if we have a buy entry signal if ( (myMovingAverageArray1[0]>myMovingAverageArray2[0]) && (myMovingAverageArray1[1]<myMovingAverageArray2[1]) ) { Comment("BUY"); } //check if we have a sell entry signal if ( (myMovingAverageArray1[0]<myMovingAverageArray2[0]) && (myMovingAverageArray1[1]>myMovingAverageArray2[1]) ) { Comment("SELL"); } } //+------------------------------------------------------------------+
Dopo aver eseguito il programma, visualizzerà i commenti sul grafico con il segnale corrente (compra o vendi) secondo questa strategia. Questo è mostrato nell'immagine seguente:
Abilita l'opzione 'Consenti Trading Algoritmico', quindi fai clic su OK. Dopodiché, l'Expert Advisor sarà allegato al grafico e apparirà un messaggio nella scheda Giornale poiché è stato caricato correttamente:
Quindi, abbiamo creato ed eseguito il nostro programma di automazione Incrocio di due medie mobili semplici. E quello che voglio menzionare qui è che questo è un semplice esempio di ciò che possiamo codificare per il nostro trading. Tuttavia, possiamo codificare e automatizzare qualsiasi altra strategia di trading utilizzando questo magnifico strumento MQL5.
Ancora una volta, l'obiettivo principale di questo articolo non è usare questa strategia, ma l'obiettivo principale è imparare alcune delle basi di MQL5 e imparare cosa possiamo creare per immaginare cosa possiamo fare e per rendere il nostro trading più facile e redditizio. Quindi, questa strategia ha bisogno di molti miglioramenti e se la usi, sarà solamente tua la responsabilità.
Conclusione
MQL5 è uno strumento valido e magnifico per aiutarci a rendere il nostro trading più facile e redditizio attraverso la progettazione di sistemi di trading algoritmici buoni e redditizi. Quindi, il tuo investimento nell'apprendimento e nell'utilizzo di questo magnifico strumento sarà un investimento altamente gratificante.
Tradotto dall’inglese da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/en/articles/10293






- 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