English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
preview
Scopri perché e come progettare il tuo sistema di trading algoritmico

Scopri perché e come progettare il tuo sistema di trading algoritmico

MetaTrader 5Trading | 10 maggio 2022, 09:19
653 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

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:


2- Investitore_B


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.



3- Piattaforma MT5

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:

4- Apertura del MetaEditor  

                   

O clicca sull'Icona dell'Editor di MetaQuotes:

   5- Apertura del MetaEditor

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.

   6- Finestra del MetaEditor

 

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:

7- Finestra del MetaEditor



8- MetaEditor - Nuovo



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.


9- MetaEditor - Nuovo file - Script


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.
Quindi fai clic su Fine.

10- MetaEditor - Informazioni sullo script


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.


 11 - Spazio per il codice

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.

12- Codice Hello World

Dopodiché nella finestra Navigatore del terminale, sotto gli script, troverai il tuo programma con il nome che hai determinato prima (Hello World!), trascinalo e rilascialo sul grafico o fai doppio clic su di esso . Quindi vedrai che appare un messaggio di avviso con ciò che hai determinato nel tuo codice. Dovrebbe essere lo stesso della schermata seguente.

13- Avviso Hello World



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.

15- Idea di trading1


14- Idea di trading


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.

    16- Progetto 2MA semplice-–-MQL5


      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.

      18- Variabili

      Un altro esempio di utilizzo delle variabili.

        Qui abbiamo bisogno di memorizzare o memorizzare le variabili e il loro valore, A e il suo valore 10, B = 10, C = 10 + 5, var1 = 2.5, var2 = 4, result = 2.5/4, message1 = Hello Mohamed e message2 = Il valore di A è: 10. Quindi, quando eseguiamo questo codice, il messaggio di avviso conterrà 4 elementi:
        • 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);
          }
        //+------------------------------------------------------------------+
        


         19- Variabili 2

        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.

         20- Operazioni booleane

        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");
          }
        


         21- While Loop


        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");
           }
          }
        //+------------------------------------------------------------------+
        


        22- For Loop

        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");
           } 
            
          }
        //+------------------------------------------------------------------+
        


         23- Istruzione If-Elset


        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);
          }
        //+------------------------------------------------------------------+
        

        24- Input del trader 1


        24- Input del trader 2


         24- Input del trader 3


        24- Input del trader 4


        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);
           }
          }
        //+------------------------------------------------------------------+
          Dopo l'esecuzione dello script, il risultato sarà il seguente:

          25- Ordini di apertura


          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);
                  }
                }
            }
          //+------------------------------------------------------------------+
          

          26- Errori nelle tecniche di programmazione 1


          27- Errori nelle tecniche di programmazione 2


          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...");
             }
          
            }
          //+------------------------------------------------------------------+


           28- Ordini in chiusura

          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);
             }
          
            }
          //+------------------------------------------------------------------+
          

          29- Modifica degli ordini



          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:

          16- Progetto 2MA semplice-–-MQL5


          Quello che dobbiamo fare ora è codificare questa strategia:
          • 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.
          E quello che segue è il codice di questo programma e come eseguirlo.
          //+------------------------------------------------------------------+
          //|                                                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:


          30- SMA - commento


           31- SMA - commento del Sell

          Ora le seguenti immagini spiegheranno come possiamo trovare il nostro sistema progettato dal terminale e come eseguirlo:

          32- Posizione del programma Simple MA

          Dopo aver trascinato e rilasciato o fatto doppio clic sul programma, verrà visualizzata la seguente finestra:

          33- Interfaccia del programma Simple MA

          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:


           34- Programma Simple MA program attivato1


          35- Programma Simple MA program attivato2

          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

          Sviluppo di un Expert Advisor di trading da zero Sviluppo di un Expert Advisor di trading da zero
          In questo articolo, discuteremo come sviluppare un robot di trading con una programmazione minima. Naturalmente, MetaTrader 5 offre un elevato livello di controllo sulle posizioni di trading. Tuttavia, utilizzare solo la capacità manuale di effettuare ordini può essere piuttosto difficile e rischioso per gli utenti meno esperti.
          Programmatore Migliore (Parte 07): Note su come diventare uno sviluppatore freelance di successo Programmatore Migliore (Parte 07): Note su come diventare uno sviluppatore freelance di successo
          Desideri diventare uno sviluppatore freelance di successo su MQL5? Se la risposta è sì, questo articolo fa per te.
          Scopri come progettare diversi sistemi di Media Mobile Scopri come progettare diversi sistemi di Media Mobile
          Esistono molte strategie che possono essere utilizzate per filtrare i segnali generati in base a qualsiasi strategia, anche utilizzando la stessa media mobile oggetto di questo articolo. Quindi, l'obiettivo di questo articolo è condividere con te alcune delle strategie di media mobile e come progettare un sistema di trading algoritmico.
          Programmazione di una rete neurale profonda da zero utilizzando il linguaggio MQL Programmazione di una rete neurale profonda da zero utilizzando il linguaggio MQL
          Questo articolo ha lo scopo di insegnare al lettore come creare una rete neurale profonda da zero utilizzando il linguaggio MQL4/5.