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

Impara come progettare un sistema di trading tramite Awesome Oscillator

MetaTrader 5Trading | 16 ottobre 2023, 10:54
379 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introduzione

Ecco un nuovo articolo della nostra serie su come imparare a progettare un sistema di trading basato sugli indicatori tecnici più popolari per i principianti, imparando la radice delle cose. In questo articolo impareremo un nuovo strumento tecnico che sarà l'indicatore Awesome Oscillator, che identificheremo in modo più dettagliato per capire cos'è, cosa misura e come utilizzarlo in base al concetto principale che ne è dietro attraverso semplici strategie e come creare un sistema di trading basato su queste strategie.

Tratteremo questo indicatore in dettaglio, come abbiamo detto, attraverso i seguenti argomenti:

  1. Definizione di Awesome Oscillator
  2. Strategia Awesome Oscillator
  3. Schema della strategia Awesome Oscillator
  4. Sistema di trading Awesome Oscillator
  5. Conclusioni

Utilizzeremo il linguaggio MQL 5 (MetaQuotes Language 5) per scrivere i nostri codici e il terminale di trading MetaTrader 5 per eseguire il sistema di trading progettato. L'MQL5 è integrato nella MetaTrader 5. Se volete sapere come ottenerli e utilizzarli, potete leggere l'argomento Scrivere codice MQL5 in MetaEditor da un articolo precedente. Vi consiglio di scaricarlo e di provare ad applicare da soli ciò che imparate per esercitarvi e migliorare le vostre capacità di codifica.

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 Awesome Oscillator

In questo argomento, impareremo a conoscere l'indicatore Awesome Oscillator (AO) in modo più dettagliato. L'AO è stato sviluppato da Bill Williams per misurare il momentum, ma può essere utilizzato per chiarire il potere o il controllo degli acquirenti o dei venditori. Misura il momentum confrontando il momentum delle ultime cinque barre o candele con il momentum delle ultime 34 barre o candele in un time frame maggiore, in altre parole, confronta il momentum recente con il momentum di un time frame più ampio. La conferma del segnale AO da parte di un altro indicatore o strumento tecnico sarà significativa e più importante. Pertanto, sarà meglio utilizzarlo accompagnato da un altro strumento tecnico. Come possiamo calcolare manualmente questo indicatore per capire e approfondire la nostra comprensione su di esso? Se vogliamo imparare a farlo, possiamo attraverso i seguenti passaggi:

L'AO è la differenza tra la media mobile semplice a 5 periodi e la media mobile semplice a 34 periodi. Nel calcolo dell'AO utilizzeremo il prezzo medio.

MEDIAN PRICE = (HIGH + LOW) / 2 

AO = SMA (MEDIAN PRICE, 5) - SMA (MEDIAN PRICE, 34)

Dove:

MEDIAN PRICE = il prezzo medio dello strumento

HIGH = il prezzo più alto

LOW = il prezzo più basso

AO = valore dell'Awesome Oscillator

SMA = media mobile semplice

Oggi non è più necessario calcolarlo manualmente, poiché è disponibile nella MetaTrader 5 come indicatore tecnico integrato e tutto ciò di cui abbiamo bisogno è sceglierlo dal terminale di trading per farlo apparire sul grafico.

Di seguito viene illustrato come inserirlo nel grafico. All'apertura del terminale di trading MetaTrader 5, premere la scheda Inserisci --> Indicatori --> Bill Williams --> Awesome Oscillator

Inserire AO

Successivamente, è possibile trovare i parametri dell'indicatore AO come segue:

Param AO

Dove:

1 - il colore dei valori positivi

2 - lo spessore dell'istogramma

3 - il colore dei valori negativi

Dopo aver determinato questi parametri, troveremo l'indicatore inserito nel grafico come segue:

 Indicatore AO inserito

Come possiamo vedere nel grafico precedente, nella parte inferiore del grafico abbiamo l'indicatore con le barre dell'istogramma che oscillano intorno allo zero - questa è la misurazione del momentum.


Strategia Awesome Oscillator

In questo argomento, impareremo a utilizzare l'indicatore AO attraverso alcune semplici strategie a scopo educativo basate esclusivamente sul concetto principale che è alla base dell’indicatore. È necessario testare qualsiasi strategia prima di utilizzarla sul proprio conto reale per assicurarsi che sia utile, profittevole e adatta al proprio trading. A seconda di ciò, potreste scoprire che le strategie menzionate necessitano di ottimizzazione, poiché queste strategie sono le stesse di cui abbiamo parlato e il loro scopo principale è solo quello educativo ed è normale che sia così. Sarà meglio utilizzare questo indicatore con un altro strumento tecnico per ottenere risultati più efficaci, soprattutto se utilizziamo un altro indicatore tecnico o uno strumento che può essere utilizzato per darci maggiori indicazioni da diverse prospettive. Ad ogni modo, questa è una delle caratteristiche più importanti ed efficaci dell'analisi tecnica, in quanto possiamo utilizzare molti strumenti per esaminare e valutare lo strumento sottostante da diverse prospettive, il che ci aiuterà a prendere decisioni di investimento o di trading adeguate per ottenere buoni risultati. In questo articolo, combineremo un altro indicatore tecnico, la media mobile, come vedremo in questo argomento, per ottenere segnali di acquisto o di vendita più efficaci.

    Strategia uno: AO Zero Crossover

      In base a questa strategia dobbiamo ottenere un segnale rialzista o ribassista in base all'incrocio tra il valore attuale dell'AO e il livello zero. Se il valore attuale dell'AO è superiore al livello zero, si tratta di un segnale rialzista. Se il valore attuale dell'AO è inferiore al livello zero, si tratta di un segnale ribassista.

      Semplicemente,

      L'attuale AO > 0 --> rialzista

      L'attuale AO < 0 --> Ribassista

        Strategia due: Forza dell’AO

          Secondo questa strategia, dobbiamo ottenere un segnale della forza del movimento dell'AO in base alla posizione dell'AO corrente e alla media dei valori degli ultimi 5 periodi dell'AO. Se il valore attuale dell'AO è maggiore dell'AVG, sarà un segnale di forza del movimento dell'AO. Se il valore attuale dell'AO è inferiore all'AVG, sarà un segnale di debolezza del movimento dell'AO.

          Semplicemente,

          L'attuale AO > AVG 5 periodi dell’AO --> AO è forte.

          L'attuale AO < AVG 5 periodi dell’AO --> AO è debole

            Strategia tre: Strategia AO & MA

              Secondo questa strategia, dobbiamo ottenere segnali di acquisto e vendita basati sulla posizione del valore attuale dell'AO e del livello zero, in aggiunta alla posizione del prezzo di chiusura e della media mobile esponenziale a 50 periodi. Se il valore attuale dell'AO è superiore al livello zero e allo stesso tempo il prezzo di chiusura è superiore all'EMA a 50 periodi, si tratterà di un segnale di acquisto. Se il valore attuale dell'AO è inferiore al livello zero e allo stesso tempo il prezzo di chiusura è inferiore all'EMA, si tratterà di un segnale di vendita.

              Semplicemente,

              L'AO attuale > del livello zero e il prezzo di chiusura > EMA a 50 periodi --> segnale di acquisto

              L'AO attuale < del livello zero e il prezzo di chiusura < EMA a 50 periodi --> segnale di vendita

              Schema della strategia Awesome Oscillator

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

                Strategia uno: AO Zero Crossover

                  In base a questa strategia, dobbiamo creare un sistema di trading che sia in grado di generare segnali rialzisti o ribassisti basati sul confronto continuo di due valori, ovvero il valore attuale dell'AO e il livello zero dell'indicatore AO, per determinare la posizione di ciascun valore e decidere la situazione del mercato. Se il valore di AO è superiore al livello zero, il sistema di trading deve generare un commento sul grafico con i seguenti valori:

                  • Rialzista
                  • Il valore AO è n

                  Nell'altro scenario, se il valore attuale dell'AO è inferiore al livello zero, è necessario che il sistema di trading restituisca un commento sul grafico con i seguenti valori:

                  • Ribassista
                  • Il valore AO è n

                  Di seguito viene illustrata la procedura passo-passo di questo sistema di trading:

                  Sistema di Trading Algoritmico-Schema1

                    Strategia due: Forza dell’AO

                      In base a questa strategia, dobbiamo creare un sistema di trading che possa essere utilizzato per generare segnali di forza del movimento dell’AO basati sul confronto continuo di due valori, l'AO attuale e la media degli ultimi cinque valori dell’AO, precedenti a quello attuale, per determinare quale sia maggiore. Se il valore attuale dell'AO è superiore all'AVG, è necessario che il sistema di trading restituisca un commento con i seguenti valori (Segnale e valori che sono stati la ragione di questo segnale):

                      • Il movimento AO è forte
                      • AO CurrVal : n
                      • AO FirstVal : n
                      • AO SecondVal : n
                      • AO ThirdVal : n
                      • AO FourthVal : n
                      • AO FifthVal : n
                      • AO AvgVal : n

                      Nell'altro caso, se l'AO attuale è inferiore all'AVG, è necessario che il sistema di trading restituisca anche i seguenti valori come commento:

                      • Il movimento AO è debole
                      • AO CurrVal : n
                      • AO FirstVal : n
                      • AO SecondVal : n
                      • AO ThirdVal : n
                      • AO FourthVal : n
                      • AO FifthVal : n
                      • AO AvgVal : n

                      Di seguito lo schema passo-passo di questo sistema di trading:

                       Sistema di Trading Algoritmico-Schema11

                        Strategia tre: Strategia AO & MA

                          Sulla base di questa strategia, come abbiamo appreso nell'argomento precedente, dobbiamo creare un sistema di trading che possa restituire un commento sul grafico con segnali di acquisto e di vendita adeguati , basati sul confronto continuo di quattro valori, che sono:

                          • L'attuale AO
                          • Il livello zero dell'indicatore AO
                          • Il prezzo di chiusura
                          • La MA a 50 periodi

                          Se l'AO attuale è superiore al livello zero e il prezzo di chiusura è superiore alla MA a 50 periodi, il sistema di trading deve restituire i seguenti valori come commento sul grafico:

                          • Buy
                          • Il prezzo di chiusura è n
                          • Il valore AO è n
                          • Il valore MA è n

                          Nell'altro scenario, se il valore attuale dell'AO è inferiore al livello zero e il prezzo di chiusura è inferiore alla MA a 50 periodi, è necessario che il sistema di trading restituisca un commento sul grafico con i seguenti valori:

                          • Sell
                          • Il prezzo di chiusura è n
                          • Il valore AO è n
                          • Il valore MA è n

                          Di seguito lo schema passo-passo di questo sistema di trading:

                          Sistema di Trading Algoritmico-Schema111

                          Sistema di trading Awesome Oscillator

                          In questo argomento impareremo la cosa più interessante di questo articolo, perché creeremo dei sistemi di trading per le strategie menzionate. Per prima cosa, creeremo un semplice sistema di trading che genererà un segnale come commento sul grafico con il valore attuale dell'AO e lo utilizzeremo come base per altri sistemi di trading.

                          Di seguito viene illustrato come creare un sistema di trading per il segnale desiderato, passo-passo:

                          Creazione di un array per aoArray utilizzando la funzione "double":

                          double aoArray[];

                          Impostazione del flag AS_SERIES all'aoArray che restituisce un valore booleano vero o falso utilizzando la funzione "ArraySetAsSeries". I suoi parametri sono:

                          • array[]: utilizzeremo aoArray.
                          • flag: Utilizzeremo "true" come direzione di indicizzazione dell'array.
                          ArraySetAsSeries(aoArray,true);

                          Definire l'indicatore AO utilizzando la funzione "iAO" che restituisce l'handle dell'indicatore Awesome Oscillator. I suoi parametri sono:

                          • symbol: utilizzeremo (_Symbol) da applicare al simbolo corrente.
                          • period: utilizzeremo (_periodo) da applicare al periodo corrente.
                          int aoDef = iAO(_Symbol,_Period);

                          Ottenere i dati dal buffer dell'indicatore AO utilizzando la funzione "CopyBuffer". I suoi parametri sono: 

                          • indicator_handle: utilizzeremo (aoDef) l’handle dell'indicatore predefinito.
                          • buffer_num: per determinare il numero di buffer dell'indicatore, useremo (0).
                          • start_pos: per determinare la posizione iniziale, useremo (0).
                          • count: per determinare la quantità da copiare, utilizzeremo (3).
                          • buffer[]: per determinare l'array di destinazione da copiare, useremo (aoArray).
                          CopyBuffer(aoDef,0,0,3,aoArray);

                          Definizione del valore AO dopo aver creato una variabile double per aoVal e averla normalizzata con "NormalizeDouble". I parametri di "NormalizeDouble" sono:

                          • value: Numero normalizzato. Utilizzeremo (aoArray[0]).
                          • digits: per determinare il numero di cifre dopo il decimale. Utilizzeremo (7).
                          double aoVal = NormalizeDouble(aoArray[0],7);

                          Restituzione di un commento sul grafico con il valore attuale di AO utilizzando la funzione "Comment".

                          Comment("AO Value is ",aoVal);

                          Di seguito è riportato il codice completo per creare questo sistema di trading:

                          //+------------------------------------------------------------------+
                          //|                                                    Simple AO.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 initialization function                                   |
                          //+------------------------------------------------------------------+
                            void OnTick()
                            {
                             double aoArray[];
                             ArraySetAsSeries(aoArray,true);
                             int aoDef = iAO(_Symbol,_Period);
                             CopyBuffer(aoDef,0,0,3,aoArray);
                             double aoVal = NormalizeDouble(aoArray[0],7);
                             Comment("AO Value is ",aoVal);
                            }
                          //+------------------------------------------------------------------+

                          Dopo aver compilato questo codice assicurandosi che non ci siano errori, nella finestra del navigatore troveremo l'expert di questo codice come segue:

                          Nav AO semplice

                          Trascinando e rilasciando questo expert sul grafico desiderato, vedremo la sua finestra come la seguente:

                          Fin semplice AO

                          Dopo aver spuntato la voce "Consenti Algo Trading" e aver premuto "OK", scopriremo che l'expert è allegato al grafico come segue:

                          AO semplice allegato

                          Come possiamo vedere nell’angolo in alto a destra del grafico abbiamo l'expert allegato. Ora siamo pronti a ricevere il segnale desiderato, che sarà uguale al seguente:

                          Segnale AO semplice

                          Come si può vedere nel grafico precedente, abbiamo il segnale desiderato dell'AO attuale come commento nell'angolo in alto a sinistra.

                            Strategia uno: AO Zero Crossover

                              Creeremo un sistema di trading basato su questa strategia per ricevere i segnali desiderati e sarà come al seguente codice completo:

                              //+------------------------------------------------------------------+
                              //|                                            AO Zero 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"
                              //+------------------------------------------------------------------+
                              void OnTick()
                                {
                                 double aoArray[];
                                 ArraySetAsSeries(aoArray,true);
                                 int aoDef = iAO(_Symbol,_Period);
                                 CopyBuffer(aoDef,0,0,3,aoArray);
                                 double aoVal = NormalizeDouble(aoArray[0],7);
                                 if(aoVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AO Value is ",aoVal);
                                   }
                              
                                 if(aoVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AO Value is ",aoVal);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              Differenza in questo codice.

                              Condizioni di questa strategia,

                              In caso di rialzo:

                                 if(aoVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AO Value is ",aoVal);
                                   }

                              In caso di ribasso:

                                 if(aoVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AO Value is ",aoVal);
                                   }

                              Dopo aver compilato questo codice assicurandosi che non ci siano errori, potremo utilizzarlo e allegarlo al grafico come abbiamo detto prima. Quindi, sarà allegato come segue:

                              AO Zero Crossover allegato

                              Come possiamo vedere sul grafico, abbiamo l'expert allegato al grafico come si vede nell'angolo in alto a destra. Ora siamo pronti a ricevere i nostri segnali.

                              In caso di segnale rialzista:

                              AO Zero Crossover - segnale rialzista

                              Come si può vedere nel grafico precedente, abbiamo un commento nell'angolo in alto a sinistra con i seguenti valori:

                              • Rialzista
                              • Valore corrente AO

                              In caso di segnale ribassista:

                              AO Zero Crossover - segnale ribassista

                              Come si può vedere nel grafico precedente, abbiamo un commento come segnale con i seguenti valori:

                              • Ribassista
                              • Valore corrente AO

                              Quindi, abbiamo ottenuto i segnali desiderati sulla base di questa strategia, sia in caso di rialzo che di ribasso.

                                Strategia due: Forza dell’AO

                                  Di seguito è riportato il codice completo di questo sistema di trading:

                                  //+------------------------------------------------------------------+
                                  //|                                                  AO Strength.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()
                                    {
                                     double aoArray[];
                                     ArraySetAsSeries(aoArray,true);
                                     int aoDef = iAO(_Symbol,_Period);
                                     CopyBuffer(aoDef,0,0,6,aoArray);
                                  
                                  
                                     double aoCurrVal = NormalizeDouble(aoArray[0],6);
                                     double aoFifthVal = NormalizeDouble(aoArray[1],6);
                                     double aoFourthVal = NormalizeDouble(aoArray[2],6);
                                     double aoThirdVal = NormalizeDouble(aoArray[3],6);
                                     double aoSecondVal = NormalizeDouble(aoArray[4],6);
                                     double aoFirstVal = NormalizeDouble(aoArray[5],6);
                                  
                                     double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);
                                  
                                     if(aoCurrVal > aoAvgVal)
                                       {
                                        Comment("AO Movement is strong","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }
                                  
                                     if(aoCurrVal < aoAvgVal)
                                       {
                                        Comment("AO Movement is Weak","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }
                                  
                                    }
                                  //+------------------------------------------------------------------+

                                  Differenze in questo codice:

                                  Utilizzando la funzione "NormalizeDouble" definiremo i seguenti valori, dal valore attuale di AO ai cinque valori precedenti:

                                     double aoCurrVal = NormalizeDouble(aoArray[0],6);
                                     double aoFifthVal = NormalizeDouble(aoArray[1],6);
                                     double aoFourthVal = NormalizeDouble(aoArray[2],6);
                                     double aoThirdVal = NormalizeDouble(aoArray[3],6);
                                     double aoSecondVal = NormalizeDouble(aoArray[4],6);
                                     double aoFirstVal = NormalizeDouble(aoArray[5],6);

                                  Definizione dell'AVG dei 5 periodi dell’AO:

                                  double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);

                                  Condizioni di questa strategia.

                                  In caso di forza del movimento AO:

                                     if(aoCurrVal > aoAvgVal)
                                       {
                                        Comment("AO Movement is strong","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }

                                  In caso di debolezza del movimento AO:

                                     if(aoCurrVal < aoAvgVal)
                                       {
                                        Comment("AO Movement is Weak","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }

                                  Dopo la compilazione, la verifica dell'assenza di errori e l'allegazione dell'expert. Lo troveremo uguale al seguente:

                                  Forza AO allegato

                                  Come si può vedere nell’angolo in alto a destra del grafico, l'expert è allegato.

                                  In caso di forza:

                                  Forza AO - segnale forte

                                  Come si può vedere nell’angolo in alto a sinistra del grafico, abbiamo un commento con i seguenti valori:

                                  • Il movimento AO è forte
                                  • AO CurrVal : n
                                  • AO FirstVal : n
                                  • AO SecondVal : n
                                  • AO ThirdVal : n
                                  • AO FourthVal : n
                                  • AO FifthVal : n
                                  • AO AvgVal : n

                                  In caso di debolezza:

                                  Forza AO - segnale debole

                                  Come si può vedere nell’angolo in alto a sinistra del grafico, abbiamo un commento con i seguenti valori:

                                  • Il movimento AO è debole
                                  • AO CurrVal : n
                                  • AO FirstVal : n
                                  • AO SecondVal : n
                                  • AO ThirdVal : n
                                  • AO FourthVal : n
                                  • AO FifthVal : n
                                  • AO AvgVal : n

                                  Ora, abbiamo ottenuto i segnali desiderati sulla base di questo sistema di trading di questa strategia.

                                    Strategia tre: Strategia AO & MA

                                      Di seguito è riportato il codice completo di questo sistema di trading.

                                      //+------------------------------------------------------------------+
                                      //|                                             AO & MA Strategy.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()
                                        {
                                         MqlRates pArray[];
                                         double aoArray[];
                                         double maArray[];
                                      
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(aoArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         
                                         int aoDef = iAO(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                      
                                         CopyBuffer(aoDef,0,0,3,aoArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                      
                                         double closingPrice = pArray[0].close;
                                         double aoVal = NormalizeDouble(aoArray[0],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                      
                                         if(aoVal > 0 && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      
                                         if(aoVal < 0 && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      
                                        }
                                      //+------------------------------------------------------------------+

                                      Differenze in questo codice.

                                      Creare tre array pArray, aoArray e maArray. Utilizzeremo la funzione double nello stesso modo in cui l'abbiamo menzionata, tranne che per pArray, che utilizzerà la funzione MqlRates per memorizzare le informazioni relative al prezzo, al volume e allo spread.

                                         MqlRates pArray[];
                                         double aoArray[];
                                         double maArray[];

                                      L'impostazione del flag AS_SERIES agli array (aoArray) e (maArray) è identica a quella precedente. Definire i dati utilizzando la funzione "CopyRates" per ottenere i dati storici della struttura MqlRates e i suoi parametri sono:

                                      • symbol_name: Utilizzeremo _Symbol per applicarlo al simbolo corrente.
                                      • timeframe: Utilizzeremo _Period per applicarlo al periodo corrente.
                                      • start_pos: per determinare la posizione iniziale, useremo (0). 
                                      • count: per determinare il conteggio dei dati da copiare, utilizzeremo (1).
                                      • rates_array[]: per determinare l'array di destinazione da copiare, utilizzeremo pArray.
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(aoArray,true);
                                         ArraySetAsSeries(maArray,true);

                                      Definire AO e MA:

                                      AO utilizzando la funzione "iOA" come abbiamo detto.

                                      MA utilizzando la funzione "iMA" e i suoi parametri sono:

                                      • symbol: useremo (_Symbol) 
                                      • period: useremo (_period)
                                      • ma_period: per determinare il periodo della media mobile, utilizzeremo 50 
                                      • ma_shift: per determinare lo scostamento orizzontale, useremo (0) 
                                      • ma_method: per determinare il tipo di media mobile, useremo la MA esponenziale 
                                      • applied_price: per determinare il tipo di prezzo utilizzabile, utilizzeremo il prezzo di chiusura
                                         int aoDef = iAO(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

                                      Ottenere i dati dal buffer degli indicatori AO e MA utilizzando la funzione "CopyBuffer".

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

                                      Definizione del prezzo di chiusura, di aoArray e di maArray.

                                         double closingPrice = pArray[0].close;
                                         double aoVal = NormalizeDouble(aoArray[0],7);
                                         double maVal = NormalizeDouble(maArray[0],7);

                                      Condizioni della strategia.

                                      In caso di segnale di acquisto

                                         if(aoVal > 0 && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      In caso di segnale di vendita:

                                         if(aoVal < 0 && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      Dopo aver compilato questo codice e averlo allegato, possiamo vederlo come il seguente:

                                       AO & MA allegato

                                      Come si può notare, l'indicatore è allegato al grafico nell'angolo in alto a sinistra rispetto al grafico precedente. Siamo pronti a ricevere i nostri segnali.

                                      In caso di segnale di acquisto:

                                       AO & MA - segnale d'acquisto

                                      Come si può vedere, il nostro segnale è stato inserito come commento nell'angolo in alto a sinistra con i seguenti valori:

                                      • Buy
                                      • Il prezzo di chiusura è n
                                      • Il valore AO è n
                                      • Il valore MA è n

                                      In caso di vendita:

                                       AO & MA - segnale di vendita

                                      In questo caso, il commento può essere visualizzato con i seguenti valori del nostro segnale:

                                      • Sell
                                      • Il prezzo di chiusura è n
                                      • Il valore AO è n
                                      • Il valore MA è n


                                      Conclusioni

                                      Ora, si suppone che abbiate compreso in dettaglio l'indicatore Awesome Oscillator e che abbiate imparato cos'è l'AO, cosa misura, come possiamo calcolarlo manualmente e come possiamo inserirlo nel grafico dagli indicatori integrati di MetaTrader 5. Abbiamo anche imparato come utilizzarlo attraverso semplici strategie basate sul concetto principale che ne è dietro, queste strategie erano:

                                      • Strategia uno: AO Zero Crossover - per ottenere segnali rialzisti o ribassisti in base agli attraversamenti dello zero.
                                      • Strategia due: Forza AO - per ottenere un segnale della forza del movimento AO basato sulla posizione del valore AO corrente e sull'AVG degli ultimi 5 valori AO. 
                                      • Strategia tre: Strategia AO & MA - per ottenere segnali di acquisto o vendita in base alla posizione dell'AO corrente e del livello zero e alla posizione del prezzo di chiusura e dell'EMA a 50 periodi.

                                      In seguito, abbiamo progettato un progetto passo-passo per ogni strategia menzionata, al fine di creare facilmente un sistema di trading, senza intoppi ed efficace dopo aver organizzato le nostre idee. Poi abbiamo creato un sistema di trading per ogni strategia menzionata, per ottenere segnali di automazione dopo averli eseguiti nel terminale di trading MetaTrader 5.

                                      Spero che abbiate provato a mettere in pratica ciò che avete imparato da soli, perché questo è un passo molto importante in ogni processo di apprendimento, se vogliamo sviluppare e migliorare le nostre capacità, oltre a darvi maggiori informazioni su ciò che avete imparato o su qualsiasi altro argomento correlato. Devo confermare ancora una volta che è necessario testare qualsiasi strategia menzionata prima di utilizzarla per assicurarsi che sia adatta al proprio trading, poiché non esiste nulla di adatto a tutti.

                                      Spero che questo articolo vi sia utile per il vostro trading e se volete leggere articoli simili, potete leggere i miei altri articoli di questa serie su come imparare a progettare un sistema di trading basato sugli indicatori tecnici più popolari.

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

                                      File allegati |
                                      Simple_AO.mq5 (1.01 KB)
                                      AO_Strength.mq5 (2.07 KB)
                                      Avvio di MetaTrader VPS per la prima volta: Istruzioni passo-passo Avvio di MetaTrader VPS per la prima volta: Istruzioni passo-passo
                                      Tutti coloro che hanno utilizzato robot di trading o abbonamenti a segnali prima o poi riconoscono la necessità di noleggiare un server di hosting affidabile 24/7 per la loro piattaforma di trading. Consigliamo di utilizzare MetaTrader VPS per una serie di motivi. Potete pagare comodamente il servizio e gestire l'abbonamento attraverso il vostro account MQL5.community.
                                      Impara come progettare un sistema di trading tramite Relative Vigor Index Impara come progettare un sistema di trading tramite Relative Vigor Index
                                      Un nuovo articolo della nostra serie su come progettare un sistema di trading tramite gli indicatori tecnici più popolari. In questo articolo scopriremo come farlo grazie all'indicatore Relative Vigor Index.
                                      Sviluppare un Expert Advisor per il trading da zero (Parte 22): Nuovo sistema di ordini (V) Sviluppare un Expert Advisor per il trading da zero (Parte 22): Nuovo sistema di ordini (V)
                                      Oggi continueremo a sviluppare il nuovo sistema di ordini. Non è così facile implementare un nuovo sistema poiché spesso incontriamo problemi che complicano notevolmente il processo. Quando compaiono questi problemi, dobbiamo fermarci e rianalizzare la direzione in cui ci stiamo muovendo.
                                      Algoritmi di ottimizzazione della popolazione: Ricerca del Banco di Pesci (FSS) Algoritmi di ottimizzazione della popolazione: Ricerca del Banco di Pesci (FSS)
                                      La Ricerca del Banco di Pesci (FSS) è un nuovo algoritmo di ottimizzazione ispirato al comportamento dei pesci in un banco, la maggior parte dei quali (fino all'80%) nuota in una comunità organizzata di affini. È stato dimostrato che le aggregazioni dei pesci svolgono un ruolo importante nell'efficienza del foraggiamento e nella protezione dai predatori.