English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
preview
Cosa è possibile fare con le Medie Mobili

Cosa è possibile fare con le Medie Mobili

MetaTrader 5Esempi | 31 agosto 2022, 10:00
680 0
Oleh Fedorov
Oleh Fedorov

Introduzione

Ho diversi sistemi di trading funzionanti. Generalmente, non uso indicatori calcolati su ogni tick preferendo invece modi più lineari. Ma a volte mi imbatto in idee che migliorano la mia percezione dei prezzi di un grafico o addirittura cambiano completamente la visione del mio trading, anche se richiedono alcuni calcoli.

Questo articolo presenta alcune idee relative all'indicatore più popolare e comprensibile — la Media Mobile (МА).

Nella sua versione più semplice, il valore dell'indicatore viene calcolato utilizzando la ben nota equazione della media:

MA[i] = (Price[i]+Price[i+1]+...+Price[i+MAPeriod])/MAPeriod

Dove, MA[i] è l'elemento successivo della sequenza, un punto su un curva. Price[i] — prezzo corrente, MAPeriod — numero di elementi per la media.

Naturalmente, siamo liberi di applicare qualsiasi prezzo: Apertura,Chiusura,Massimo,Minimo,valori medi ponderati, ecc. Un indicatore standard permette di selezionare sia il prezzo di calcolo che i metodi di calcolo, compresi quelli più complessi di una semplice media... Mentre fornisco esempi, lascio l'opportunità di selezionare un metodo di calcolo. Tuttavia, questo non è importante per cogliere l'idea che c'è dietro i metodi considerati. Tutti gli esempi funzionano abbastanza bene indipendentemente dal fatto che utilizziamo una Media Mobile "semplice" (SMA), una esponenziale (EMA) o qualsiasi altra. Perciò, SMA è utilizzata in modo predefinito in tutti gli screenshot come le impostazioni predefinite dell'indicatore. Tutti gli indicatori utilizzano i prezzi di Chiusura se non indicato diversamente. Sei libero di giocare con questi parametri per ottimizzarli.

Quando si parla di un singolo processo, solitamente userò come valore predefinito un periodo di 10 barre. Se in un singolo indicatore vengono utilizzati più processi con periodi diversi, i periodi applicati saranno spesso 5 e 8. Non utilizzo più di due processi con periodi differenti.

I colori sono i seguenti: rosso — veloce, arancione — lento ... Se uso qualcos'altro, lo dichiarerò esplicitamente nel testo.


Schema dell' indicatore

Ho creato diversi indicatori per visualizzare i segnali attivati quando si utilizzano vari approcci a questi processi. Si basano su un unico modello che è molto simile a un MACD standard presente nei classici esempi. Credo che non abbia senso mostrare l'intero codice del modello qui.

Ogni indicatore utilizzerà una o più Medie Mobili e talvolta anche ATR per definire una distanza dalle frecce o disegnare le linee di un canale.

A volte, è più facile visualizzare un'idea se un indicatore si trova in una finestra del grafico, mentre a volte richiede un indicatore situato in una finestra separata. Questo è possibile utilizzando una delle proprietà. La proprietà seguente viene utilizzata per un indicatore all'interno della finestra del grafico:

#property indicator_chart_window

Se un indicatore è situato in una finestra separata, viene applicata la proprietà seguente:

#property indicator_separate_window

In questo caso, imposterò a volte l'altezza della finestra utilizzando la proprietà:

#property indicator_height 100

Naturalmente, il valore della proprietà può essere modificata.

I nomi dei buffer hanno il suffisso "Buffer" alla fine. Ad esempio, i buffer della freccia standard saranno denominati ArrowDownBuffer e ArrowUpBuffer. Se l'indicatore disegna le linee, il buffer viene denominato in base alla funzione linea.

Tutte le variabili globali che ho definito hanno il prefisso "ext" (se non sono buffer). Per esempio, extATRData è una variabile globale contenente la sorgente dati dell'indicatore ATR.

Userò i buffer senza passare alla modalità "series".

Durante l'inizializzazione, ho impostato tutti i valori vuoti su 0:

  PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

Pertanto, abbiamo solo bisogno di mostrare le condizioni di visualizzazione delle frecce o delle linee, ovvero tutto ciò che rimane nel ciclo principale.

Ho provato ad evitare che gli indicatori ridisegnino, quindi il disegno viene eseguito sulla candela zero, mentre per i calcoli vengono utilizzati i dati delle candele già chiuse.


Attraversamento della linea col prezzo (direzione del trend)

Nel caso più semplice, la linea МА viene utilizzata da sola, nella sua forma "naturale". Credo che tutti voi abbiate visto un'immagine simile sui vostri schermi:

"Clean" MA

Fig. 1. Media Mobile Semplice

Nella maggior parte dei casi, i traders utilizzano l'abilità della MA nel seguire un trend. Un trend può essere definito come un insieme di candele poste su un lato della curva. Ad esempio, se più di due candele chiudono sotto la linea, il trend è ribassista ed è tempo di considerare gli short trades. Se il prezzo di chiusura è al di sopra della curva, il trend è rialzista ed è tempo di acquistare ... Se il prezzo attraversa la curva, stiamo assistendo al cambio di un trend.

Le condizioni che ci consentono di tracciare un passo avanti della media possono apparire come segue:

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      ((close[i-1]<extMAData[i-1]
        && open[i-1]>extMAData[i-1]
       )
       ||(close[i-2]>extMAData[i-2]
          && open[i-2]>extMAData[i-2]
          && close[i-1]<extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
      )

    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        ((close[i-1]>extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
         ||(close[i-2]<extMAData[i-2]
            && open[i-2]<extMAData[i-2]
            && close[i-1]>extMAData[i-1]
            && open[i-1]>extMAData[i-1]
           )
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // main cycle

Invece di controllare i prezzi di Apertura, possiamo focalizzare la nostra attenzione solo sui prezzi di Chiusura della barra corrente e della precedente. Se si trovano su lati diversi della curva, stiamo assistendo a una svolta.

Il file dell'indicatore è MA-Breaking.mq5. Eseguendolo sul grafico si ottiene la seguente immagine (nel caso di una curva con periodo standard di 10 bar):

MA — breakthrough

Fig. 2. Svolta della media

Credo, che questo metodo non sia utile senza un ulteriore ordinamento. Sembra che il numero di frecce all'in su corrisponda quasi al numero di frecce all'in giù anche nell'area di trend. Quando si aumenta il periodo della МА, il numero di frecce viene ridotto, tuttavia ciò non è di grande aiuto poiché una svolta netta con una trend senza rollback è un evento piuttosto raro. Nella maggior parte dei casi, un movimento brusco è preceduto da uno piatto. Allora cerchiamo i filtri...


MA come linea di supporto/resistenza

Il prossimo modo di usare la curva è applicarla come linea di supporto/resistenza. Se il prezzo tocca la linea ma non la attraversa (chiude sullo stesso lato), abbiamo un segnale di trade. Ad esempio, il 17 febbraio, possiamo vedere 3 punti di movimento verso il basso e, se non ci sono filtri aggiuntivi, un punto di movimento verso l'alto (all'inizio).

Naturalmente, possiamo utilizzare questa regola sia per aprire il primo trade, sia per aggiungerlo a quello esistente.

Questo concetto è illustrato nel file MA-Support.mq5.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      (high[i-1]>=extMAData[i-1]
       && close[i-1]<extMAData[i-1]
       && open[i-1]<extMAData[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }

    else
      if(
        (low[i-1]<=extMAData[i-1]
         && close[i-1]>extMAData[i-1]
         && open[i-1]>extMAData[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // Main cycle end

Di seguito è riportato il risultato dell'operazione del codice:

MA come linea di supporto/resistenza

Fig.3 Utilizzando MA come linea di supporto/resistenza

Questo sembra migliore dell'opzione precedente. Se utilizziamo i livelli di profitto o semplicemente accumuliamo ordini tramite frecce e usciamo con una freccia diretta in senso opposto (apparentemente, usando l'inversione), le possibilità di un trading profittevole sono alte.

Più alto è il periodo МА, più basso è l'angolo e più lontano si trova dal prezzo. Pertanto, i segnali di svolta e rollback sono meno frequenti, ma il livello diventa più affidabile come livello di supporto/resistenza. Lascia che ti mostri un grafico a 20 periodi per il confronto. Possiamo vedere che i rollback sono meno frequenti. Tuttavia, i segnali sono probabilmente più affidabili, così è possibile ridurre il livello di stop loss.

МА come supporto/resistenza (periodo maggiorato)

Fig.4 MA con periodo maggiorato (20)

Per esempio, alle 4 a.m. 17 Febbraio, la curva rossa fornisce un segnale di acquisto e otteniamo una perdita poiché quella arancione fornisce un segnale di vendita. Tuttavia, nel caso della linea rossa, possiamo utilizzare i segnali alle 8 a.m., 10 a.m. e 15. da aggiungere alla posizione.

In caso di periodi MA più alti, i segnali arrivano più tardi il che possono causare la perdita di parte di un potenziale profitto, sebbene i trades possano diventare meno frequenti.


Inclinazione

Più ripida è l'inclinazione della linea, più veloce si muoverà il prezzo e più è probabile che il trend continui sulla candela successiva.

Il modo più semplice per misurare la pendenza è utilizzare la differenza tra il valore attuale e quello precedente. Se la differenza è positiva, la curva si sposta verso l'alto, se la differenza è negativa, si sposta verso il basso.

Il codice del ciclo principale in MA-Slope.mq5 è come il seguente:

//--- main cycle
  for(i=start+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]);

    //---

    if(
      slopeIndex<0

    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Qui in SlopeShift specifichiamo il numero di barre che devono essere passate dal prezzo corrente. Il valore di default è uno. Ma siamo in grado di ottenere risultati piuttosto interessanti aumentando questo valore, ad esempio, utilizzando la differenza dei valori MA in due o tre barre.

Credo, che la curva risultante dovrebbe essere visualizzata come un istogramma. Il risultato è mostrato di seguito:

МА — slope histogram

Fig. 5. Istogramma dell'Inclinazione della curva

L'immagine è piuttosto interessante.

Primo, è ovvio che possiamo facilmente tracciare e ordinare le fluttuazioni di movimento casuali. Infatti, se la direzione della curva cambia solo durante una, due o tre barre, è probabilmente prematuro parlare di cambio di trend. Ad ogni modo, dovremmo essere estremamente attenti a non farcelo scappare.

Secondo, le variazioni di prezzo sono immediatamente visibili. Come possiamo vedere, se l'altezza della colonna del diagramma è inferiore a un certo valore, molto probabilmente ci troviamo di fronte a un flat. Pertanto, sarebbe irragionevole tradare nella direzione della piccola inclinazione della MA oltre le 2-3 barre.

Terzo, nonostante il fatto che la curva sui segmenti di trend appaia in modo quasi monotono in aumento o in diminuzione, il tasso di variazione reale varia notevolmente da barra a barra. Questo suggerisce una sorta di valore relativo, che probabilmente aiuterà a vedere qualcosa che non siamo ancora in grado di vedere.

Prova (МА-Slope-Index-First.mq5)... Codice:

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<0
    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

L'aggiunta di un piccolo valore (Punto()/100) al dividendo e al divisore non cambia molto il risultato, ma ci consente di evitare l'errore di divisione per zero.

L'immagine è come la seguente:

MA — relative slope

Fig. 6. Indice relativo dell'inclinazione della media

Cime aguzze possono essere viste agli incroci. Se spostiamo il grafico di un paio di barre a sinistra, la differenza diventa ancora più evidente.

МА — indice relativo spostato a sinistra

Fig. 7. Indice relativo d'inclinazione della MA (spostato a sinistra)

La Fig. 7 mostra in modo evidente come i valori di picco segnano i confini di un movimento piuttosto forte. La differenza dei valori di picco con i rimanenti dati dell'array è piuttosto ampia. Il fatto che i "picchi" siano così diversi l'uno dall'altro in termini di dimensioni, così come il fatto che la differenza tra i picchi e gli altri dati sia così notevole, porta al passaggio successivo. Poiché il cambio di direzione è così notevole, non vedo il punto nell'analizzare gli istogrammi di un indice d'inclinazione relativo. Invece, possiamo semplicemente rendere l'output più approssimativo rendendolo binario. Per esempio, come questo (МА-Slope-Index-Bin.mq5):

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<=-SlopeThreshold
    )
     {
      SlopeDownBuffer[i]=-1;
     }
    else
      if(
        slopeIndex>=SlopeThreshold
      )
       {
        SlopeUpBuffer[i]=1;
       }
   } // Main cycle


Qui SlopeThreshold è un valore di soglia dell'altezza della barra del diagramma precedente, alla quale il segnale viene attivato. Nell'immagine, il valore del parametro è uguale a 5.

Relative МА slope (binary)

Fig. 8. Indice relativo dell'inclinazione della media(binario). SlopeThreshold=5.

Di seguito ancora un'altra immagine con SlopeThreshold=15

Relative slope index, SlopeThreshold=15

Fig. 9.Indice relativo dell'inclinazione della media(binario). SlopeThreshold=15.

Queste strisce meritano sicuramente un'occhiata più da vicino!

Apparentemente, tali indicatori indicano un cambio di direzione della candela corrente, oppure di 2-3 o anche più candele dopo quella segnalata. In ogni caso, c'è una chiara dipendenza tra il trend e la combinazione dei colori dei marcatori, la direzione principale e la candela stessa. Ovviamente, dovremmo raccogliere statistiche, ad esempio, nel modo che ho descritto nel mio articolo sui fogli di lavoro. In combinazione con altri metodi qui forniti, l'indicatore sembra già promettente...

Naturalmente, le strisce binarie sull'istogramma possono essere facilmente sostituite con frecce in modo simile agli indicatori precedenti.


Canali basati su una singola Media Mobile

Possiamo costruire canali basati su Medie Mobili in aggiunta ai metodi sopra descritti per considerare la volatilità del movimento dei prezzi. Le opzioni sono numerose. Ne considererò solo due.

La prima è molto semplice perchè richiede solo l'indicatore standard MA. Dovremmo semplicemente aggiungere livelli quando aggiungiamo un indicatore sul grafico. L'unico avvertimento è che ogni timeframe ha i suoi livelli. Li ho raccolti in un unico "pacchetto" per evitare di inserirli ogni volta che cambio timeframe. L'immagine appare come segue per JPY:

Simple channel — MA

Fig. 10. Lista dei livelli del canale

L'immagine finale su H1 appare come segue:

Channel made of levels

Fig. 11. Aspetto dei livelli (H1)

I livelli sono impostati per un rollback qui. Quindi, se una candela tocca un livello e torna indietro (o si avvicina abbastanza), entra contro trend. Ad esempio, il canale sullo screenshot mostra che c'era un buon momento per vendere il 22 febbraio. Possiamo impostare un ordine durante la candela del segnale o alla fine (qui, se entriamo dopo un rollback, un ordine potrebbe essere stato impostato alla candela del segnale Low - 115.100, mentre un livello di stop potrebbe essere stato impostato a 115.265 ). L'obiettivo immediato è toccare la media, mentre l'obiettivo finale è toccare un bordo opposto dello stesso canale.

Tuttavia, in questo caso, è anche possibile tradare lo sfondamento del piccolo canale. Ad esempio, la candela a 9 ore si è chiusa sopra il bordo del piccolo canale il 22 febbraio. Due candele rialziste hanno chiuso sopra la media, mentre la candela ribassista tra le due non si è spostata oltre il bordo inferiore. L'inclinazione di МА è chiaramente in diminuzione (questo può essere visto più chiaramente se osserviamo il grafico con MA-Slope impostata). Tutto questo può essere utilizzato come un chiaro segnale di acquisto. È possibile impostare un livello di stop a 114.570, il punto di ingresso può essere calcolato utilizzando i livelli. Possiamo impostarlo a 115.230. In alternativa, possiamo utilizzare il trailing stop con le candele o qualsiasi altro metodo desideriamo.

Da notare che nel periodo sono visibili solo due canali: quello più interno e quello leggermente più grande. Se passiamo ad un timeframe più alto, diciamo, D1, il canale +-50 è quasi nascosto, mentre +-300 e +-1500 potrebbero diventare canali operativi. A volte è possibile vedere anche il canale mensile. Può anche fornire segnali, ma i canali più visibili vengono utilizzati come quelli principali.

Multiple channels (D1)

Fig. 12. Aspetto dei livelli (D1)

Un'immagine simile può essere vista su scala settimanale/mensile. Il quarto canale si adatta meglio, mentre il terzo può essere utilizzato come interno e ausiliario.

Il canale più interno è designato per М1-М15.

Il principio di adeguamento è evidente:passiamo al timeframe necessario e selezioniamo la dimensione dei livelli in modo da avere il numero minimo di punti di contatto, pur avendo l'ampiezza massima possibile tra di loro. Il modo più semplice per farlo è misurare l'ampiezza della correzione necessaria sull'intervallo di tempo corrente e dividerla per 2. L'animazione di seguito illustra il processo.

Measuring the channel size

Fig. 13. Misurare la volatilità del canale (D1)

Dopo alcune stime approssimative, potrebbe essere necessario regolare le dimensioni in modo più preciso, ma questo è abbastanza facile...


Canali basati su due Medie Mobili (ATR3x5)

I canali sopra descritti sono buoni ma hanno un paio di inconvenienti.

Primo, la dimensione del canale deve essere selezionata manualmente per ogni timeframe e simbolo. Automatizzare il processo può sembrare un compito difficile.

Secondo,i livelli non sono archiviati nei buffer, il che significa che sarebbe difficile utilizzarli a livello di codice.

Il canale basato sulle Medie Mobili e ATR non presenta tali inconvenienti. L'idea è semplice. Prendiamo 2 indicatori Media Mobile con periodo di 3. Una viene applicata ai Massimi (high), l'altra è utilizzata con i Minimi (low). Quindi, slittiamo le linee ottenute alla distanza di un periodo di 5- ATR nella direzione appropriata (quella inferiore scende, quella superiore sale).

Il canale è pronto! Si adatta perfettamente a qualsiasi simbolo e funziona principalmente sui rollback poiché gli sfondamenti sono piuttosto rari. Ho anche aggiunto le frecce per rilevare i tocchi dei bordi del canale.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    MAUpBuffer[i]=extMAUpData[i]+extATRData[i]*DistanceCoefficient;
    MADownBuffer[i]=extMADownData[i]-extATRData[i]*DistanceCoefficient;

    if(
      (high[i-1]>=MAUpBuffer[i-1]
       && close[i-1]<MAUpBuffer[i-1])
      ||(
        close[i-2]>MAUpBuffer[i-2]
        && close[i-1]<MAUpBuffer[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        (low[i-1]<=MADownBuffer[i-1]
         && close[i-1]>MADownBuffer[i-1])
        ||(
          close[i-2]<MADownBuffer[i-2]
          &&close[i-1]>MADownBuffer[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   }// main cycle

Qui DistanceCoefficient è un parametro dell'indicatore che ci consente di modificare la distanza dai bordi del canale regolando l'indicatore a specifiche condizioni. Il parametro può prendere qualsiasi valore frazionale. Tuttavia, non ha molto senso impostarne più di 2 poiché le frecce scompaiono quasi completamente in quel caso, il che significa che non vengono eseguiti affari.

Canale ATR3x5

Fig. 14. Canale ATR3x5

Naturalmente, l'indicatore può essere utilizzato insieme a qualsiasi altro indicatore qui descritto (o non descritto).

Quando guardi l'immagine, concentrati su come il prezzo interagisce con gli indicatori superiore e inferiore. Potrebbe essere utile.


Diversi indicatori con differenti periodi

Fino ad ora, abbiamo considerato l'utilizzo di una singola linea MA per ricevere segnali di mercato di acquisto e vendita. Tuttavia, molti trader ritengono che l'accuratezza dell'ingresso possa essere notevolmente migliorata aggiungendo un altro o più indicatori.

Quindi creiamo il grafico con due curve aventi i periodi di 5 e 8 barre. I periodi sono presi dalla serie di Fibonacci. Uno dei punti descrive la linea "veloce", mentre un altro descrive quella "lenta".

Due MA mostrate simultaneamente

Fig. 15. Due MA su un singolo grafico

Oltre alle caratteristiche già considerate, ora abbiamo la possibilità di vedere la relativa posizione delle curve e la loro "co-direzionalità" (o divergenza). La distanza tra le МА risulta uguale.

Ciascuno dei parametri può rafforzare o indebolire alcune caratteristiche di movimento visualizzati da ciascuna delle curve, oltre a fornire segnali di ingresso indipendenti.


Posizione relativa. Incrocio delle MA

Se la MA veloce si trova al di sopra di quella lenta, molto probabilmente stiamo assistendo a un trend rialzista e la probabilità che la prossima candela sia rialzista è molto alta. Dovrebbero essere considerati anche altri parametri, ad esempio l'inclinazione della linea di segnale, nonché altri parametri.

Se la MA veloce è inferiore a quella lenta, abbiamo un trend ribassista "globale" (per il timeframe attuale) e la probabilità che ogni candela successiva sia ribassista aumenta fortemente fino a raggiungere il picco...

Possiamo ammettere un cambiamento di trend se la media mobile veloce supera quella lenta.

Proviamo a sviluppare l'indicatore che risponda all'incrocio delle MA. Inoltre, dovremmo considerare anche quando sono piatte per ridurre falsi ingressi. Questo può essere fatto, ad esempio, considerando la misura dell'inclinazione della MA veloce. In questo caso, possiamo usufruire del codice successivo per cercare i segnali (MA2-Breaking):

//--- main cycle
  for(i=start+3+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      extMAFastData[i-1]<extMASlowData[i-1]
      && extMAFastData[i-2]>=extMASlowData[i-2]
      && MASlope(extMAFastData,i-1)<-SlopeThreshold
      && MASlope(extMASlowData,i-1)<SlopeThreshold/SlowDelimiter
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/3;
     }
    else
      if(
        extMAFastData[i-1]>extMASlowData[i-1]
        && extMAFastData[i-2]<=extMASlowData[i-2]
        && MASlope(extMAFastData,i-1)>SlopeThreshold
        && MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/3;
       }
   } // main cycle

Qui MASlope è una funzione che calcola l'inclinazione della MA in modo simile all'esempio indicato nella sezione Inclinazione. Accetta l'array di dati per la curva e l'indice della barra necessari su cui vengono eseguiti i calcoli secondo i parametri.

SlopeTreshold — valore di soglia del diagramma dell'inclinazione della MA veloce. Come ricorderete, se l'inclinazione della MA veloce è troppo ridotta al momento dell'attraversamento, molto probabilmente si tratta di una fase piatta . Questa fase piatta è solitamente afflitta da un numero enorme di falsi positivi che alla fine causano perdite.

SlowDelimiter —delimitatore di soglia dell'inclinazione della MA lenta. A volte, possiamo avere un segnale abbastanza buono quando la MA veloce è già inclinata verso il basso, mentre quella lenta non si è ancora invertita sebbene sia vicina all'inversione. In altre parole, l'entrata

MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter

vuol dire che: l'inclinazione della MA lenta può avere un piccolo valore negativo (diretto verso il basso, anche se leggermente), essere uguale a zero o essere positiva, ma non nettamente negativa.

Se utilizziamo l'indicatore nella sua forma "pulita", la soglia e il delimitatore dovrebbero essere selezionati separatamente per ogni strumento e timeframe. Di seguito è riportato il risultato ottenuto per USDJPY H1 con SlopeTreshold=0,017 e SlowDelimiter=5:

MA crossing signals considering the slope

Fig. 16. Segnali degli incroci tra MA considerando l'inclinazione

L'immagine non ha curve in modo che le frecce possano essere viste più chiaramente. Se selezioniamo il giusto valore di take profit (o un'uscita tramite i livelli), possiamo ottenere profitto da quasi tutte le frecce impostando livelli di stop che non siano troppo in perdita.

L'immagine sotto rappresenta lo stesso grafico visto da vicino (ingrandito).

MA crossing (zoomed in)

Fig. 17. incroci tra MA considerando l'inclinazione (ingrandito)

Come forse ricorderete, il segnale arriva sulla candela zero. Tuttavia, viene analizzato l'intervallo precedente. Quindi, per capire le ragioni dietro il disegno di una freccia, dovremmo dare un'occhiata all'intervallo dalla linea verde fino alla barra a sinistra.

Perché non abbiamo due frecce a destra? L'inclinazione non supera la soglia né per una MA lenta né per una veloce e l'indicatore considera questo intervallo piatto. Tuttavia, se avessi tradato quest'area con questi segnali, molto probabilmente non avrei alcun motivo di lamentarmi poiché il trend è salito ulteriormente e ha permesso di vendere a un prezzo migliore.

MA crossing — trend continues

Fig. 18. Segnali d'incrocio: Prosecuzione del trend.


Conclusioni

Ho ancora alcune cose da dire sull'argomento, ma lo farò in un altro articolo.

In questo articolo, ho considerato le cose basilari relative alle MA e ci hanno permesso di tracciare la direzione generale del movimento dei prezzi.

Inoltre, ho visualizzato codici di indicatori che mostrano graficamente l'uso dei principali parametri MA per prendere decisioni di trading.

Ho mostrato i modi per migliorare una strategia di trading combinando le proprietà di indicatori ben noti e applicandoli insieme.

Nel prossimo articolo, spero di rivelare come possiamo calcolare una posizione di ciascuna candela in base ai dati sulle medie mobili e agli indicatori da esse derivati.

L'articolo non fornisce alcuna garanzia che le informazioni qui contenute ti aiuteranno nel tuo trading.

Che il profitto sia con te!

Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/10479

File allegati |
jx-Breaking.mq5 (5.56 KB)
h9-Support.mq5 (5.22 KB)
lw-Slope.mq5 (4.66 KB)
ATR3x5.mq5 (7.34 KB)
wr2-Crossing.mq5 (6.5 KB)
Scienza dei Dati e Apprendimento Automatico (Parte 01): Regressione Lineare Scienza dei Dati e Apprendimento Automatico (Parte 01): Regressione Lineare
È il momento per noi trader di allenare i nostri sistemi e noi stessi a prendere decisioni in base a ciò che dicono i numeri. Non con i nostri occhi, o ciò che le nostre viscere ci fanno credere, è qui che il mondo si sta dirigendo, quindi spostiamoci perpendicolarmente nella direzione dell'onda.
Impara come progettare un sistema di trading con lo Stocastico Impara come progettare un sistema di trading con lo Stocastico
In questo articolo, continuiamo la nostra serie di apprendimento: questa volta impareremo come progettare un sistema di trading utilizzando uno degli indicatori più popolari e utili, che è l'indicatore Oscillatore Stocastico, per aggiungere un nuovo mattone alla nostra conoscenza delle basi.
Scienza dei Dati e Apprendimento Automatico (Parte 02): Regressione Logistica Scienza dei Dati e Apprendimento Automatico (Parte 02): Regressione Logistica
La classificazione dei dati è una cosa cruciale per un algo trader e un programmatore. In questo articolo, ci concentreremo su uno degli algoritmi logistici di classificazione che possono aiutarci a identificare i Sì o i No, gli alti e bassi, gli acquisti e le vendite.
Impara come progettare un sistema di trading tramite l'utilizzo di MACD Impara come progettare un sistema di trading tramite l'utilizzo di MACD
In questo articolo, impareremo un nuovo strumento dalla nostra serie: impareremo come progettare un sistema di trading basato su uno degli indicatori tecnici più popolari Moving Average Convergence Divergence (MACD).