English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
preview
Impara come progettare un sistema di trading tramite Fractals

Impara come progettare un sistema di trading tramite Fractals

MetaTrader 5Trading | 7 febbraio 2024, 13:42
349 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introduzione

Un nuovo articolo con un nuovo indicatore tecnico nella nostra serie: impareremo a progettare un sistema di trading basato su uno degli indicatori tecnici più popolari, l'indicatore Fractals. Lo scopriremo in dettaglio attraverso i seguenti argomenti:

  1. Definizione di Fractals
  2. Strategia Fractals
  3. Schema della strategia con Fractals
  4. Sistema di trading Fractals
  5. Conclusioni

Impareremo cos'è, cosa misura e come calcolarlo manualmente per capirne il concetto principale alla base. Impareremo a farlo funzionare in nostro favore attraverso semplici strategie di trading basate sul concetto principale dell'indicatore. Successivamente, creeremo un sistema di trading basato su queste strategie da utilizzare nel terminale di trading MetaTrader 5 per generare segnali automatici.

Per scrivere i nostri codici utilizzeremo l'MQL5 (MetaQuotes Language 5) che è integrato nell'IDE del terminale di trading MetaTrader 5. Se non sai come scaricare e utilizzare MetaTrader 5 e MQL5, puoi leggere l'argomento Scrivere codice MQL5 in MetaEditor per saperne di più. A proposito, vi consiglio di provare ad applicare da soli ciò che imparate se volete migliorare le vostre capacità di codifica.

Dovete testare qualsiasi strategia menzionata prima di utilizzarla sul vostro conto reale, poiché l'obiettivo principale di questo articolo è di tipo educativo. Inoltre, non c'è nulla di adatto a tutti. Pertanto, è necessario assicurarsi che sia adatto al proprio trading.

Avvertenza: Tutte le informazioni sono fornite "così come sono" solo a scopo didattico e non sono preparate per scopi commerciali o di consulenza. Le informazioni non garantiscono alcun tipo di risultato. Se scegliete di utilizzare questi materiali su uno qualsiasi dei vostri conti di trading, lo farete a vostro rischio e pericolo e sarete gli unici responsabili.

Definizione di Fractals

L'indicatore Fractals è stato sviluppato da Bill Williams. È stato progettato per cercare di anticipare i potenziali movimenti dell'azione del prezzo fornendo segnali rialzisti o ribassisti. Il segnale rialzista indica un potenziale movimento verso l'alto, mentre il segnale ribassista indica un potenziale movimento verso il basso. Possiamo anche dire che questo indicatore cerca di anticipare i massimi e i minimi sul grafico. Possiamo vedere questi segnali visualizzando le frecce generate sul grafico sotto e sopra i prezzi.

Forma due frecce diverse, la freccia Fractals verso l'alto e la freccia Fractals verso il basso. Se ti stai chiedendo il metodo di calcolo di queste due frecce, la risposta a questa domanda è la seguente:

L'indicatore Fractals ha bisogno che sul grafico si formi un modello specifico di azione del prezzo in entrambe le direzioni, verso l'alto o verso il basso.

Per Fractals al rialzo, sull'azione del prezzo abbiamo bisogno di quanto segue:

  • Almeno cinque candele o barre consecutive.
  • Il massimo più alto nella candela centrale (la terza).
  • Massimi inferiori su ciascun lato di questo massimo.
  • Dopo la chiusura della quinta candela con le stesse condizioni precedenti, la freccia Fractals verso l'alto si formerà sopra la candela (terza).

Per Fractals al ribasso, sull’azione del prezzo abbiamo bisogno di quanto segue:

  • Almeno cinque candele o barre consecutive.
  • Il minimo più basso nella candela centrale (la terza).
  • minimi più alti su ciascun lato di questo minimo.
  • Dopo la chiusura della quinta candela con le stesse condizioni precedenti, la freccia Fractals al ribasso si formerà sotto la candela (terza).

Fortunatamente, non abbiamo bisogno di eseguire i passaggi precedenti per disegnare l'indicatore Fractals sul nostro grafico, perché è già pronto per noi in MetaTrader 5. Tutto ciò che dobbiamo fare è scegliere l'indicatore Fractals tra gli indicatori disponibili. Per farlo basta aprire il terminale MetaTrader 5 e premere,

Inserisci --> Indicatori --> Bill Williams --> Fractals

 Frac Inserito

Dopo aver scelto Fractals, troveremo la seguente finestra dei parametri dell'indicatore:

 Frac param

1- Per determinare il colore delle frecce.

2- Per determinare lo spessore.

Dopo aver premuto "OK",troveremo l'indicatore allegato al grafico come segue:

 Frac attaccato

Come possiamo vedere, abbiamo frecce sopra e sotto le candele che si riferiscono al potenziale movimento dell'azione del prezzo. Abbiamo frecce al ribasso sotto le candele che mostrano un potenziale movimento al rialzo e frecce al rialzo sopra le candele che mostrano un potenziale movimento al ribasso.

Strategia Fractals

Impareremo come utilizzare questo indicatore Fractals in base a semplici strategie improntate sul concetto principale di questo indicatore tecnico. Utilizzeremo l'indicatore Fractals come strumento a sé stante e poi impareremo il concetto di utilizzo con altri indicatori tecnici per ottenere maggiori approfondimenti e migliorare i suoi segnali.

Strategia uno: Fractals massimi e minimi

    Secondo questa strategia, dobbiamo ottenere segnali di massimo e minimo basati sulle posizioni dei massimi e dei minimi di Fractals. Se l'indicatore ha generato la freccia inferiore, sarà un segnale di ribasso. Se Fractals ha generato la freccia superiore, il segnale sarà di rialzo.

    Semplicemente,

    Freccia inferiore --> Fractals ribasso

    Freccia superiore --> Fractals rialzo

    Strategia due: Fractals con MA

      Secondo questa strategia, dobbiamo ottenere segnali di acquisto e di vendita basati sulla direzione dell'azione del prezzo secondo la posizione del prezzo e della media mobile, oltre ai segnali generati dall'indicatore Fractals. Se il prezzo di chiusura è superiore alla media mobile e l'indicatore Fractals ha generato una freccia inferiore, sarà un segnale di acquisto. Se il prezzo di chiusura è inferiore alla media mobile e l'indicatore Fractals ha generato la freccia superiore, sarà un segnale di vendita.

      Semplicemente,

      Il prezzo di chiusura > MA e freccia inferiore generata --> segnale di acquisto

      Il prezzo di chiusura < MA e freccia superiore generata --> segnale di vendita

      Strategia tre: Fractals con Alligator

        Secondo questa strategia, dobbiamo ottenere segnali di acquisto e di vendita basati sulla direzione dell'azione del prezzo secondo la sua posizione nei confronti dell'indicatore Alligator, oltre ai segnali generati dall'indicatore Fractals. Se la linea delle labbra dell'Alligator si trova al di sopra dei denti e delle mascelle, la linea dei denti si trova al di sopra delle mascelle, il prezzo di chiusura si trova al di sopra dei denti e il segnale dell'indicatore Fractals è una freccia inferiore, si tratterà di un segnale di acquisto. Nell'altro scenario, se la linea delle labbra è inferiore a quella dei denti e delle mascelle, i denti sono inferiori alle mascelle, il prezzo di chiusura è inferiore ai denti e il segnale Fractals è una freccia superiore, si tratterà di un segnale di vendita.

        Semplicemente,

        Le labbra > dei denti e delle mascelle, i denti > delle mascelle, il prezzo di chiusura > dei denti, e il segnale Fractals è una freccia inferiore --> segnale di acquisto

        Le labbra < dei denti e delle mascelle, i denti < delle mascelle, il prezzo di chiusura < dei denti, e il segnale Fractals è una freccia superiore --> segnale di vendita

        Schema della strategia con Fractals

        Per ogni strategia menzionata, progetteremo uno schema passo-passo che ci aiuterà a creare facilmente e in modo fluido, il nostro sistema di trading organizzando le nostre idee.

        1. Fractals massimi e minimi

          Sulla base di questa strategia, dobbiamo creare un sistema di trading che possa essere utilizzato per restituire i massimi e i minimi dell'indicatore Fractals come commento sul grafico, controllando continuamente fracUpValue e fracDownValue. Se il fracUp è maggiore di zero o non ha un valore vuoto e il fracDown ha un valore vuoto, il sistema di trading deve restituire un segnale sul grafico come commento con il seguente valore:

            • Fractals Massimo intorno a: n

          Nell'altro caso, se il fracDown è maggiore di zero o non ha un valore vuoto e il fracUp ha un valore vuoto, il sistema di trading deve restituire un segnale sul grafico come commento con il seguente valore:

            • Fractals Minimo intorno a: n

          Di seguito è riportato lo schema di questa strategia:

          Schema Fractals massimi e minimi

          2. Fractals con MA

            Sulla base di questa strategia, dobbiamo creare un sistema di trading che possa essere utilizzato per restituire segnali di acquisto e di vendita sotto forma di commento sul grafico in base al controllo continuo dei seguenti valori:

              • Il prezzo di chiusura
              • Il valore EMA (Media Mobile Esponenziale)
              • Il valore fracDown
              • Il valore fracUp

            Se il prezzo di chiusura è maggiore al valore EMA e il valore fracDown non è uguale a un valore vuoto, il sistema di trading deve restituire i seguenti valori:

              • Buy
              • EMA corrente
              • Valore Fractals Minimo: n

            Nell'altro caso, se il prezzo di chiusura è minore al valore EMA e il valore fracUp non è uguale a un valore vuoto, il sistema di trading deve restituire i seguenti valori:

              • Sell
              • EMA corrente
              • Valore Fractals Massimo: n

            Il seguente grafico si riferisce a questo schema:

            Schema Frac con MA

            3. Fractals con Alligator

              Sulla base di questa strategia di trading, dobbiamo creare un sistema che possa essere utilizzato per generare segnali di acquisto e vendita controllando continuamente le posizioni per i seguenti valori:

                • Il valore delle labbra
                • Il valore dei denti
                • Il valore delle mascelle
                • Il prezzo di chiusura
                • Il valore di fracDown
                • Il valore di fracUp

              Se il valore delle labbra è maggiore del valore dei denti e delle mascelle, il valore dei denti è maggiore del valore delle mascelle, il prezzo di chiusura è maggiore del valore dei denti e il valore fracDown non è uguale a un valore vuoto, il sistema di trading deve restituire un commento sul grafico con i seguenti valori:

                • Buy
                • Valore delle mascelle: n
                • Valore dei denti: n
                • Valore delle labbra: n
                • Fractals Minimo intorno a: n

              Nell'altro caso, se il valore delle labbra è inferiore ai valori dei denti e delle mascelle, la linea dei denti è inferiore al valore delle mascelle, il prezzo di chiusura è inferiore ai denti e il valore di fracUp non è uguale a un valore vuoto, il sistema di trading deve restituire i seguenti valori:

                • Sell
                • Valore delle mascelle: n
                • Valore dei denti: n
                • Valore delle labbra: n
                • Fractals Massimo intorno a: n

              Il seguente grafico si riferisce a questo schema:

              Schema Frac con Alligator

              Sistema di trading Fractals

              In questo argomento, impareremo come creare un sistema di trading basato sulle strategie citate, passo-passo, per eseguirle nel terminale MetaTrader 5. Inizieremo a creare un semplice sistema Fractals che può essere utilizzato per restituire commenti sul grafico con i valori dell'indicatore Fractals, ecco come procedere.

              Creazione di array per fractals su e giù utilizzando la funzione double.

                 double fracUpArray[];
                 double fracDownArray[];

              Ordinare i dati utilizzando la funzione "ArraySetAsSeries". I suoi parametri sono:

              • array[]: utilizzeremo gli array creati fracUpArray e fracDownArray.
              • flag: useremo true.
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);

              Definire l'indicatore Fractals utilizzando la funzione "iFractals" che restituisce l'handle (gestore) dell'indicatore Fractals. I suoi parametri sono:

              • symbol: useremo _Symbol da applicare al grafico corrente.
              • period: utilizzeremo _Period da applicare al timeframe corrente.
              int fracDef=iFractals(_Symbol,_Period);

              Ottenimento dei dati e memorizzazione dei risultati mediante la funzione "CopyBuffer". I suoi parametri sono:

              • indicator_handle: per determinare l'handle dell'indicatore, utilizzeremo (fracDef).
              • buffer_num: per determinare il numero di buffer dell'indicatore, utilizzeremo (UPPER_LINE per fracUp), (LOWER_LINE per fracDown).
              • start_pos: per determinare la posizione iniziale, determineremo (1).
              • count: per determinare la quantità da copiare, utilizzeremo (3).
              • buffer[]: per definire l'array di destinazione da copiare, useremo (fracUpArray, fracDownArray).
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);

              Ottenere i valori di fractals su e giù.

                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);

              Restituzione del valore zero in caso di valore vuoto per fracUpValue e faceDownValue.

                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;

              Utilizzo della funzione "Comment" per restituire i commenti sul grafico con i valori di fractals.

                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);

              Quello che segue è il codice completo per creare questo sistema di trading.

              //+------------------------------------------------------------------+
              //|                                       Simple Fractals System.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"
              //+------------------------------------------------------------------+
              void OnTick()
                {
              //creating price array
                 double fracUpArray[];
                 double fracDownArray[];
              //Sorting data
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);
              //define frac
                 int fracDef=iFractals(_Symbol,_Period);
              //define data and store result
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
              //get values of fracUp and fracDown
                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);
              //returning zero if there is empty value of fracUp
                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
              //returning zero if there is empty value of fracDown
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;
              //comment on the chart
                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);
                }
              //+------------------------------------------------------------------+

              Dopo aver compilato questo codice lo troveremo nella cartella del navigatore uguale al seguente:

               Frac Nav

              Trascinando e rilasciando questo file sul grafico, troveremo la sua finestra uguale alla seguente.

               Finestra del sistema Frac semplice

              Dopo aver premuto "OK" dopo aver messo il segno di spunta accanto a "Consenti Algo Trading", troveremo l'expert allegato al grafico come di seguito riportato:

              Sistema Frac semplice allegato

              Come si può vedere nell'angolo in alto a destra del grafico, l'expert è allegato e siamo pronti a ricevere i segnali desiderati come nell’esempio del test:

               Segnale del sistema Frac semplice

              Come possiamo vedere nell'angolo in alto a sinistra sono presenti i seguenti valori:

              • Valore Fractals Su = n
              • Valore Fractals Giù = 0

              È chiaro che Valore Fractals Giù è pari a zero, dato che abbiamo il Valore Fractals Su.

               Sistema Frac semplice segnale 2

              Abbiamo due valori:

              • Valore Fractals Su = 0
              • Valore Fractals Giù = n

              Ma Valore Fractals Su è pari a zero, poiché abbiamo un valore in Fractals Giù.

              1. Fractals massimi e minimi

                Di seguito viene riportato il codice completo per creare un sistema di trading dei massimi e minimi di Fractals.

                //+------------------------------------------------------------------+
                //|                                      Fractals highs and lows.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"
                //+------------------------------------------------------------------+
                void OnTick()
                  {
                //creating arrays
                   double fracUpArray[];
                   double fracDownArray[];
                //Sorting data
                   ArraySetAsSeries(fracUpArray,true);
                   ArraySetAsSeries(fracDownArray,true);
                //define frac
                   int fracDef = iFractals(_Symbol,_Period);
                //define data and store result
                   CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                   CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                //define values
                   double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                   double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                //returning zero in case of empty values
                   if(fracUpValue ==EMPTY_VALUE)
                      fracUpValue = 0;
                   if(fracDownValue ==EMPTY_VALUE)
                      fracDownValue = 0;
                //conditions of the strategy and comment on the chart with highs and lows
                //in case of high
                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }
                //in case of low
                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }
                  }
                //+------------------------------------------------------------------+

                Differenze in questo codice.

                Condizioni della strategia:

                In caso di massimo,

                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }

                In caso di minimo

                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }

                Dopo aver compilato questo codice e averlo allegato al grafico come abbiamo imparato prima, scopriremo che l'expert Fractals massimi e minimi è allegato come segue:

                 Fractals massimi e minimi allegato

                Ora possiamo ottenere i risultati desiderati per i massimi e i minimi. Nel caso di minimi:

                 Fractals massimi e minimi - segnale minimo

                Nel grafico precedente, nell'angolo in alto a sinistra, possiamo notare il valore di Fractals minimo, poiché l'indicatore Fractals ha formato un minimo.

                Nel caso di massimo:

                Fractals massimi e minimi - segnale massimo

                Come si può vedere, abbiamo il valore Fractals massimo, poiché l’indicatore ha formato un massimo sul grafico.

                2. Fractals con MA

                  Di seguito è riportato il codice completo per creare un sistema di trading per la strategia Fractals con MA:

                  //+------------------------------------------------------------------+
                  //|                                             Fractals with MA.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"
                  //+------------------------------------------------------------------+
                  void OnTick()
                    {
                  //creating arrays
                     double fracUpArray[];
                     double fracDownArray[];
                     MqlRates priceArray[];
                     double maArray[];
                  //Sorting data
                     ArraySetAsSeries(fracUpArray,true);
                     ArraySetAsSeries(fracDownArray,true);
                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);
                  //define values
                     int fracDef = iFractals(_Symbol,_Period);
                     int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                  //define data and store result
                     CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                     CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                     CopyBuffer(maDef,0,0,3,maArray);
                  //get values
                     double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                     double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                     double closingPrice = priceArray[0].close;
                     double maValue = NormalizeDouble(maArray[0],6);
                     bool isBuy = false;
                     bool isSell = false;
                  //conditions of the strategy and comment on the chart
                  //in case of buy
                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }
                  //in case of sell
                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }
                    }
                  //+------------------------------------------------------------------+

                  Differenze in questo codice.

                  Creare altri due array: priceArray utilizzando la funzione "MqlRates" per memorizzare le informazioni su prezzi, volumi e spread e maArray utilizzando la funzione "double".

                     MqlRates priceArray[];
                     double maArray[];

                  Ordinamento dei dati di questi due array.

                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);

                  Ottenere i dati storici di MqlRates utilizzando la funzione "CopyRates". I suoi parametri sono:

                  • symbol_name: per determinare il nome del simbolo, utilizzeremo (_Symbol).
                  • timeframe: per determinare il periodo, utilizzeremo (_period).
                  • start_pos: per determinare la posizione iniziale, useremo (0).
                  • count: per determinare il conteggio dei dati da copiare, utilizzeremo (3).
                  • rates_array[]: per determinare l'array di destinazione in cui copiare, useremo (pArray).

                  Definizione della media mobile mediante la funzione "iMA". I suoi parametri:

                  • symbol: per determinare il nome del simbolo.
                  • period: Per determinare il periodo.
                  • ma_period: per determinare il periodo di media, utilizzeremo (50).
                  • ma_shift: per determinare lo scostamento orizzontale, useremo (0).
                  • ma_method: per determinare il tipo di media mobile, useremo EMA (Media Mobile Esponenziale).
                  • applied_price: per determinare il tipo di prezzo, useremo il prezzo di chiusura.
                     int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

                  Ordinamento dei dati.

                  CopyBuffer(maDef,0,0,3,maArray);

                  Definizione del prezzo di chiusura e del valore MA.

                  double closingPrice = priceArray[0].close;
                  double maValue = NormalizeDouble(maArray[0],6);

                  Creazione di due variabili bool per isBuy e isSell per evitare conflitti tra i segnali di acquisto e di vendita della stessa candela.

                     bool isBuy = false;
                     bool isSell = false;

                  Condizioni della strategia.

                  In caso di segnale di acquisto:

                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }

                  In caso di segnale di vendita:

                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }

                  Dopo aver compilato ed eseguito questo codice, troveremo l'expert allegato.

                   Frac con MA allegato

                  Come possiamo vedere, l'expert Fractals con MA è allegato al grafico nell'angolo in alto a destra. Riceveremo i segnali desiderati come negli esempi seguenti:

                  In caso di segnale di acquisto:

                   Frac con MA - segnale di acquisto

                  Come possiamo vedere sul grafico abbiamo un commento con i seguenti valori:

                  • Buy
                  • EMA corrente
                  • Fractals Minimo intorno a: n

                  In caso di segnale di vendita:

                   Frac con MA - segnale di vendita

                  Abbiamo i seguenti valori:

                  • Sell
                  • EMA corrente
                  • Fractals Massimo intorno a: n

                  3. Fractals con Alligator

                    Quello che segue è il codice completo per creare un sistema di trading per la strategia Fractals con Alligator:

                    //+------------------------------------------------------------------+
                    //|                                      Fractals with Alligator.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"
                    //+------------------------------------------------------------------+
                    void OnTick()
                      {
                    //creating arrays
                       double fracUpArray[];
                       double fracDownArray[];
                       MqlRates priceArray[];
                       double jawsArray[];
                       double teethArray[];
                       double lipsArray[];
                    //Sorting data
                       ArraySetAsSeries(fracUpArray,true);
                       ArraySetAsSeries(fracDownArray,true);
                       ArraySetAsSeries(jawsArray,true);
                       ArraySetAsSeries(teethArray,true);
                       ArraySetAsSeries(lipsArray,true);
                    //define values
                       int fracDef=iFractals(_Symbol,_Period);
                       int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                       int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                    //define data and store result
                       CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                       CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                       CopyBuffer(alligatorDef,0,0,3,jawsArray);
                       CopyBuffer(alligatorDef,1,0,3,teethArray);
                       CopyBuffer(alligatorDef,2,0,3,lipsArray);
                    //get values
                       double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                       double fracDownValue=NormalizeDouble(fracDownArray[0],5);
                       double closingPrice = priceArray[0].close;
                       double jawsValue=NormalizeDouble(jawsArray[0],5);
                       double teethValue=NormalizeDouble(teethArray[0],5);
                       double lipsValue=NormalizeDouble(lipsArray[0],5);
                    //creating bool variables to aviod buy ans sell signals at the same time
                       bool isBuy = false;
                       bool isSell = false;
                    //conditions of the strategy and comment on the chart
                    //in case of buy
                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }
                    //in case of sell
                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }
                      }
                    //+------------------------------------------------------------------+

                    Differenze in questo codice.

                    Creazione di tre array per i componenti dell’Alligator.

                       double jawsArray[];
                       double teethArray[];
                       double lipsArray[];

                    Ordinare i dati in questi array utilizzando la funzione "ArraySetAsSeries".

                       ArraySetAsSeries(jawsArray,true);
                       ArraySetAsSeries(teethArray,true);
                       ArraySetAsSeries(lipsArray,true);

                    Definizione dell'Alligator mediante la funzione "iAlligator". I suoi parametri:

                    • symbol: useremo (_Symbol) da applicare al simbolo corrente.
                    • period: utilizzeremo (_Period) da applicare al timeframe corrente.
                    • jaw_period: per determinare il periodo di calcolo delle mascelle, utilizzeremo (13).
                    • jaw_shift: per determinare lo scostamento orizzontale delle mascelle, utilizzeremo (8).
                    • teeth_period: per determinare il periodo di calcolo dei denti, utilizzeremo (8).
                    • teeth_shift: per determinare lo scostamento orizzontale dei denti, utilizzeremo (5).
                    • lips_period: per determinare il periodo di calcolo delle labbra, utilizzeremo (5).
                    • lips_shift: per determinare lo scostamento orizzontale delle labbra, utilizzeremo (3).
                    • ma_method: per determinare il tipo di media mobile, utilizzeremo(MODE_SMA).
                    • applied_price: per determinare il tipo di prezzo, utilizzeremo (PRICE_MEDIAN).
                    int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                    Definizione dei dati e memorizzazione dei risultati mediante la funzione "CopyBuffer". I suoi parametri:

                    • indicator_handle: per determinare l'handle (gestore) dell'indicatore, utilizzeremo (alligatorDef).
                    • buffer_num: per determinare il numero di buffer dell'indicatore, useremo (0 per le mascelle), (1 per i denti) e (2 per le labbra).
                    • start_pos: per determinare la posizione iniziale, determineremo (0).
                    • count: per determinare la quantità da copiare, utilizzeremo (3).
                    • buffer[]: per determinare l'array di destinazione da copiare, useremo (jawsArray, teethArray, lipsArray).
                       CopyBuffer(alligatorDef,0,0,3,jawsArray);
                       CopyBuffer(alligatorDef,1,0,3,teethArray);
                       CopyBuffer(alligatorDef,2,0,3,lipsArray);

                    Ottenere i valori dei componenti dell’Alligator.

                       double jawsValue=NormalizeDouble(jawsArray[0],5);
                       double teethValue=NormalizeDouble(teethArray[0],5);
                       double lipsValue=NormalizeDouble(lipsArray[0],5);

                    Condizioni della strategia:

                    In caso di segnale di acquisto:

                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }

                    In caso di segnale di vendita:

                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }

                    Dopo aver compilato questo codice ed eseguito sul grafico desiderato, scopriremo che l'expert è allegato al grafico come di seguito riportato:

                     Frac con Alligator allegato

                    Possiamo ottenere i segnali desiderati basati su questa strategia dopo aver allegato questo expert al grafico, come possiamo vedere nel grafico precedente nell'angolo in alto a destra.

                    Di seguito sono riportati alcuni esempi di segnali generati dai test:

                    In caso di segnale di acquisto

                     Frac con Alligator - segnale d'acquisto

                    Come possiamo vedere nel grafico precedente, nell'angolo in alto a sinistra abbiamo i seguenti valori come segnale:

                    • Buy
                    • Valore delle mascelle
                    • Valore dei denti
                    • Valore delle labbra
                    • Valore Fractals minimo

                     Frac con Alligator - segnale di vendita

                    Abbiamo i seguenti valori come segnale sul grafico precedente:

                    • Sell
                    • Valore delle mascelle
                    • Valore dei denti
                    • Valore delle labbra
                    • Valore Fractals massimo


                    Conclusioni

                    L'indicatore tecnico Fractals è uno strumento utile ed efficace nel trading, sia come strumento a sé stante che accompagnato da un altro indicatore tecnico, in quanto fornisce utili indicazioni, come abbiamo appreso in questo articolo. Si suppone che abbiate appreso cos'è, cosa misura, come può essere formato sul grafico attraverso il metodo del suo calcolo e come inserire l'integrato per visualizzarlo sul terminale MetaTrader 5. Inoltre, abbiamo imparato come utilizzarlo attraverso le seguenti semplici strategie di trading:

                    • Fractals massimi e minimi: per rilevare i massimi e i minimi dell'indicatore Fractals e ottenere il relativo segnale sul grafico.
                    • Fractals con MA: per ottenere segnali di acquisto e vendita basati sui segnali Fractals generati in base alla posizione dei prezzi e alla loro media mobile.
                    • Fractals con Alligator: per ottenere segnali di acquisto e vendita basati su segnali Fractals in base alla posizione dei prezzi e all'indicatore Alligator.

                    Abbiamo anche imparato a creare un sistema di trading basato su ciascuna strategia menzionata per ottenere segnali automatici sul grafico di MetaTrader 5 codificando queste strategie con MQL5. Spero che abbiate provato ad applicarli da soli per comprendere a fondo e ottenere maggiori informazioni sull'argomento di questo articolo o qualsiasi altro argomento correlato, per trarre un beneficio completo dalla sua lettura.

                    Confermo ancora una volta che è necessario testare qualsiasi strategia menzionata prima di utilizzarla sul proprio conto reale per assicurarsi che sia profittevole. Spero che questo articolo vi sia stato utile e che abbiate imparato nuove cose che possano migliorare i vostri risultati di trading. Se ti è piaciuto l'articolo e volete leggere altri articoli simili, potete leggere gli altri articoli di questa serie sulla comprensione e la creazione di un sistema di trading basato sugli indicatori tecnici più popolari.

                    Tradotto dall’inglese da MetaQuotes Ltd.
                    Articolo originale: https://www.mql5.com/en/articles/11620

                    Sviluppare un Expert Advisor per il trading da zero (Parte 26): Verso il futuro (I) Sviluppare un Expert Advisor per il trading da zero (Parte 26): Verso il futuro (I)
                    Oggi porteremo il nostro sistema di ordini ad un livello superiore. Ma prima di ciò, dobbiamo risolvere alcuni problemi. Ora abbiamo alcune domande che riguardano il modo in cui vogliamo lavorare e le cose che facciamo durante la giornata di trading.
                    Algoritmi di ottimizzazione della popolazione: Ottimizzazione delle Piante Infestanti (Invasive Weed Optimization - IWO) Algoritmi di ottimizzazione della popolazione: Ottimizzazione delle Piante Infestanti (Invasive Weed Optimization - IWO)
                    La sorprendente abilità delle piante infestanti di sopravvivere in un'ampia varietà di condizioni è diventata l'idea per un potente algoritmo di ottimizzazione. IWO è uno dei migliori algoritmi tra quelli esaminati precedentemente.
                    Sviluppare un Expert Advisor per il trading da zero (Parte 27): Verso il futuro (II) Sviluppare un Expert Advisor per il trading da zero (Parte 27): Verso il futuro (II)
                    Passiamo ad un sistema di ordini più completo direttamente sul grafico. In questo articolo mostrerò un modo per correggere il sistema degli ordini, o meglio, per renderlo più intuitivo.
                    Valutazione dei modelli ONNX utilizzando metriche di regressione Valutazione dei modelli ONNX utilizzando metriche di regressione
                    La regressione ha il compito di prevedere un valore reale da un esempio non catalogato. Le cosiddette metriche di regressione vengono utilizzate per valutare l'accuratezza delle previsioni del modello di regressione.