Un Esempio di un Sistema di Trading Basato su un Indicatore Heiken-Ashi

Dmitry Voronkov | 16 dicembre, 2021

Introduzione

Con la comparsa del grafico a candele negli Stati Uniti, più di due decenni fa, c'è stata una rivoluzione nella comprensione di come funzionano le forze dei rialzisti e degli orsi sui mercati occidentali. Le candele sono diventate uno strumento di trading popolare e i trader hanno iniziato a lavorare con loro per facilitare la lettura dei grafici. Ma l'interpretazione delle candele differisce l'una dall'altra.

Uno di questi metodi, che cambia il tradizionale grafico a candele, e ne facilita la percezione, è chiamato tecnologia Heikin Ashi.

1. «Nani Desu Ka?»*

La prima pubblicazione su questo argomento è apparsa nel 2004 nel numero di febbraio della rivista «Technical Analysis of STOCKS & COMMODITIES», dove Dan Valcu ha pubblicato un articolo intitolato «Using The Heikin Ashi Technique» (link all'articolo originale)

Sul suo sito l'autore fa notare che durante l'estate del 2003 ha studiato la tecnologia di Ichimoku, e come spesso accade, ha scoperto casualmente alcuni diagrammi, sui quali ha visto un andamento ben visibile di il mercato. Si è rivelato essere un diagramma Heikin-Ashi, o per essere più precisi, alcune modelli a candela alterati.

Questo metodo di analisi è stato sviluppato da un trader giapponese che ha avuto molto successo e utilizza questo metodo ancora oggi. Con sorpresa dell'autore, non ha trovato altre informazioni correlate nei libri o in Internet, quindi ha deciso di metterle a disposizione di tutti i trader pubblicandole su un giornale.

Il metodo Heikin-Ashi ( heikin in giapponese significa "mezzo" o "equilibrio", e ashi significa "piede" o "barra"), ed è uno strumento visivo per valutare le tendenze, la loro direzione e forza. Questo non è un "Santo Graal" del trading, ma è sicuramente uno strumento buono e facile da usare per visualizzare le tendenze.

Consideriamo come viene eseguito il calcolo del valore della candela OHLC:

Chiusura della barra corrente: haClose = (Open + High + Low + Close) / 4
Apertura della barra corrente: haOpen = (haOpen [before.] + HaClose [before]) / 2
Massimo della barra corrente: haHigh = Max (High, haOpen, haClose)
Minimo della barra corrente: haLow = Min (Low, haOpen, haClose)

I valori di "Open", "High", "Low" e "Close" si riferiscono alla barra corrente. Il prefisso "ha" indica i corrispondenti valori modificati di heikin-ashi.

Per facilitare la percezione delle informazioni di mercato, la tecnologia Heikin-Ashi modifica il grafico tradizionale a candele, creando le cosiddette candele sintetiche, che rimuovono le irregolarità dal grafico normale, offrendo un quadro migliore delle tendenze e dei consolidamenti. Basta guardare il grafico a candele, creato con questo metodo, per avere una buona panoramica del mercato e del suo stile:

Figura 1. A sinistra c'è il normale grafico a candele (a), a destra (b) il grafico Heikin-Ashi

La Fig. 1 mostra la differenza tra le tradizionali candele giapponesi e le candele Heiken Ashi. La caratteristica distintiva di questi grafici è che in un trend rialzista la maggior parte delle candele bianche non ha ombra. In una tendenza al ribasso non c'è ombra superiore per la maggior parte delle candele nere. Il grafico Heiken Ashi non mostra interruzioni, quindi una nuova candela si apre al livello della metà della precedente.

Le candele sul grafico Heiken-Ashi mostrano un'indicazione di tendenza maggiore rispetto alle candele tradizionali. Quando la tendenza si indebolisce, i corpi delle candele si riducono e le ombre crescono. Il cambiamento di colore delle candele è un segnale per buy/sell. È più conveniente determinare la fine di un movimento correttivo, sulla base di questi grafici.

Questo indicatore fa parte di MetaTrader 5 e puoi trovarlo nella cartella «Indicatori \\ Esempi \\ Heiken_Ashi.mq5». Prima di installare l'indicatore sul grafico, consiglio di rendere il grafico lineare. Inoltre, nelle proprietà del grafico, nella scheda "Generale", deseleziona la voce "dal grafico in alto".

Vorrei ancora una volta focalizzare la vostra attenzione sul fatto che il metodo Heiken-Ashi non è un "Santo Graal". Per dimostrarlo, cercherò di creare un semplice sistema di trading (TS) utilizzando solo questa tecnica.

Per fare ciò, dobbiamo creare un semplice Expert Advisor, utilizzando il linguaggio di programmazione MQL5 e le classi di libreria standard, e poi testarlo sui dati storici, utilizzando lo strategy tester del terminale MetaTrader 5.

2. Algoritmo del Sistema di Trading

Senza rendere le cose troppo complesse, creiamo l'algoritmo utilizzando le sei regole base della procedura di Heiken-Ashi, proposte da Dan Valcu sul seguente sito: http://www.educofin. com/

  1. Una tendenza in aumento: la candela blu haClose> haOpen
  2. Un trend decrescente - candela rossa haClose <haOpen
  3. Una forte tendenza in aumento - una candela blu, in cui non c'è Low haOpen == haLow
  4. Una forte tendenza al ribasso: una candela rossa, che non è High haOpen == haHigh
  5. Consolidamento - una sequenza di candelieri con corpi piccoli (di qualsiasi colore) e lunghe ombre
  6. Cambio di tendenza: una candela con un corpo piccolo e lunghe ombre del colore opposto. Non è sempre un segnale affidabile e talvolta può essere solo una parte del consolidamento (5).

Una tendenza di (1,2) è facile da capire: se siamo in una transazione, manteniamo semplicemente la posizione, spostando lo stop di 1-2 punti sotto/sopra la candela precedente.

Una forte tendenza (3,4) si agisce allo stesso modo - tirando su lo stop.

Consolidamento (5) e cambio di trend (6), chiude la posizione (se non viene chiusa dallo stop), però bisogna poi decidere se aprire o meno una posizione opposta. Per prendere la decisione, dobbiamo in qualche modo determinare se si sta verificando un consolidamento o un'inversione. Avremo bisogno di un filtro, costruito su indicatori, analisi a candele o analisi grafica.

Gli obiettivi del nostro articolo non includono l'istituzione di una strategia redditizia, ma chissà cosa realizzeremo di conseguenza. Pertanto, consideriamo che all'apparizione di una candela del colore opposto, chiuderemo la posizione e ne apriremo una nuova con la direzione opposta.

E quindi, il nostro algoritmo è il seguente:

  1. Dopo la formazione di una candela di colore opposto, chiudiamo la posizione precedente, se ne abbiamo una, e apriamo una posizione all'apertura di una nuova candela, fissando uno stop 2 punti sotto/sopra il minimo/massimo della candela precedente.
  2. Il trend: spostiamo lo stop di 2 punti sotto/sopra il minimo/il massimo della candela precedente.
  3. Con un trend forte, facciamo gli stessi passi che abbiamo fatto con il trend, cioè spostiamo lo stop.

Nel complesso, tutto è abbastanza semplice e, si spera, sia chiaro al lettore. Ora lo implementeremo nel linguaggio di MQL5.

3. Programmazione dell'Expert Advisor in MQL5

Per creare un Expert Advisor, avremo bisogno di un solo parametro di input: la dimensione del lotto, le due funzioni del gestore di eventi OnInit (), OnTick () e la nostra funzione CheckForOpenClose ().

Per impostare i parametri di input in MQL5 utilizziamo le variabili di Input.

//--- input parameters
input double Lot=0.1;    // Port size

La funzione OnInit() è il gestore eventi Init. Gli eventi Init vengono generati immediatamente dopo il caricamento dell'Expert Advisor.

Nel codice di questa funzione collegheremo l'indicatore all'Expert Advisor. Come accennato in precedenza, il MetaTrader 5 standard include un indicatore Heiken_Ashi.mq5.

Vi chiederete perché c'è così tanta complessità, se abbiamo le formule per calcolare l'indicatore, e possiamo calcolare i valori nel codice dell'Expert Advisor. Sì, lo ammetto, è possibile farlo, ma se ne guardi attentamente uno:

haOpen=(haOpen[prev.]+haClose[prev])/2

vedrai che utilizza i valori precedenti, il che crea un certo disagio ai calcoli indipendenti e complica la nostra vita. Pertanto, invece di calcoli indipendenti, sfrutteremo le capacità di MQL5 per collegare il nostro indicatore personalizzato, in particolare la funzione iCustom.

Per fare ciò, aggiungiamo al corpo della funzione OnInit() la seguente riga:

   hHeiken_Ashi=iCustom(NULL,PERIOD_CURRENT,"Examples\\Heiken_Ashi");

e otteniamo una variabile globale hHeiken_Ashi - handle dell'indicatore Heiken_Ashi.mq5, di cui avremo bisogno in futuro.

La funzione OnTick() è il gestore dell'evento NewTick (), che viene generato con la comparsa di un nuovo tick.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check the ability of trading and the calculated number of bars
   if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
      if(BarsCalculated(hHeiken_Ashi)>100)
        {
         CheckForOpenClose();
        }
//---
  }

La funzione TerminalInfoInteger (TERMINAL_TRADE_ALLOWED) controlla se il trading è consentito o meno. Utilizzando la funzione BarsCalculated (HCeiken_Ashi), controlliamo la quantità di dati calcolati per l'indicatore richiesto, nel nostro caso Heiken_Ashi.mq5.

E se entrambe le condizioni sono soddisfatte, vediamo l'adempimento della nostra funzione CheckForOpenClose () in cui si svolge il lavoro principale. Esaminiamolo con più attenzione

Poiché i termini del nostro TS specificano che l'installazione degli ordini avviene all'apertura di una nuova candela, dobbiamo determinare se una nuova candela si è aperta o meno. Ci sono molti modi per farlo, ma il più semplice è controllare il volume dei tick. Quindi, se il volume del tick è uguale a uno, questo indica l'apertura di una nuova barra e dovresti controllare i termini di TS ed emettere ordini.

Lo implementiamo nel modo seguente:

//--- process the orders only after receiving the first tick of the new candlestick 
   MqlRates rt[1];
   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   if(rt[0].tick_volume>1) return;

Creare una matrice di variabili del tipo MqlRates della dimensione di un elemento. Utilizzando la funzione CopyRates() otteniamo in essa i valori dell'ultima barra. Quindi controlla il volume di tick e se è maggiore di uno, termina la funzione, in caso contrario, continua i calcoli.

Successivamente, utilizzando la direttiva #define dichiariamo alcune costanti mnemoniche:

//--- to check the conditions we need the last three bars
#define  BAR_COUNT   3
//--- the number of indicator buffer for storage Open
#define  HA_OPEN     0
//--- the number of the indicator buffer for storage High
#define  HA_HIGH     1
//--- the number of indicator buffer for storage Low
#define  HA_LOW      2
//--- the number of indicator buffer for storage Close
#define  HA_CLOSE    3

Quindi dichiariamo l'array:

double   haOpen[BAR_COUNT],haHigh[BAR_COUNT],haLow[BAR_COUNT],haClose[BAR_COUNT];

e utilizzando la funzione CopyBuffer() otteniamo i valori dell'indicatore negli array appropriati.

   if(CopyBuffer(hHeiken_Ashi,HA_OPEN,0,BAR_COUNT,haOpen)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_HIGH,0,BAR_COUNT,haHigh)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_LOW,0,BAR_COUNT,haLow)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_CLOSE,0,BAR_COUNT,haClose)!=BAR_COUNT)
     {
      Print("CopyBuffer from Heiken_Ashi failed, no data");
      return;
     }

Voglio focalizzare la tua attenzione su come i dati vengono memorizzati nelle variabili dell'array.

La barra "più vecchia" (storicamente) è memorizzata nel primo elemento dell'array (zero).

La barra "più giovane" (corrente) in quest'ultimo, BAR_COUNT-1 (Fig. 2).

Figura 2. L'ordine delle candele e i valori degli indici dell'array

Figura 2. L'ordine delle candele e i valori degli indici dell'array

E così abbiamo ottenuto i valori OHLC Heiken-Ashi, e resta da verificare le condizioni per l'apertura o il mantenimento di una posizione.

Considera in dettaglio l'elaborazione del segnale di vendita.

Come ho sottolineato prima, abbiamo ottenuto i valori di tre candele Heiken-Ashi. Il valore corrente si trova nelle celle con il numero [BAR_COUNT-1 = 2] e non è necessario per noi. I valori precedenti sono nelle celle [BAR_COUNT-2 = 1], e le barre precedenti sono in [BAR_COUNT-3 = 0] (vedi Fig. 2), e in base a queste due barre controlleremo i termini e le condizioni per effettuare lo scambio .

Quindi dobbiamo verificare le posizioni aperte sullo strumento. Per fare ciò utilizzeremo la classe CPositionInfo delle classi di trading della libreria predefinita. Questa classe ci permette di ottenere informazioni sulle posizioni aperte. Utilizzando il metodo Select (_Symbol) determiniamo la presenza di posizioni aperte sul nostro strumento, e se sono presenti, quindi utilizzando il metodo Type() determiniamo il tipo di posizioni aperte.

Se al momento abbiamo una posizione aperta da acquistare, allora dobbiamo chiuderla.

Per fare ciò utilizziamo i metodi della classe CTrade della libreria di classi standard, che è progettata per eseguire operazioni di trading.

Utilizzando il metodo PositionClose (simbolo stringa const, deviazione ulong) chiuderemo l'acquisto, dove il simbolo è il nome dello strumento e il secondo parametro, deviazione, è la deviazione ammissibile del prezzo di chiusura.

Quindi controlliamo la combinazione di candele secondo il nostro TS. Poiché abbiamo già controllato la direzione delle candele appena formate (con l'indice [BAR_COUNT-2]), dobbiamo solo controllare la candela prima (con l'indice [BAR_COUNT-3]), ed eseguire i passaggi necessari per aprire la posizione.

     //--- check if there is an open position, and if there is, close it
      if(posinf.Select(_Symbol))
        {
         if(posinf.Type()==POSITION_TYPE_BUY)
           {
            //            lot=lot*2;
            trade.PositionClose(_Symbol,3);
           }
        }
      //--- check and set Stop Loss level
      double stop_loss=NormalizeDouble(haHigh[BAR_COUNT-2],_Digits)+_Point*2;
      double stop_level=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*_Point;
      if(stop_loss<stop_level) stop_loss=stop_level;
      //--- check the combination: the candle with the opposite color has formed
      if(haOpen[BAR_COUNT-3]<haClose[BAR_COUNT-3])
        {
         if(!trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
      else
      if(posinf.Select(_Symbol))
        {
         if(!trade.PositionModify(_Symbol,stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }

Qui è necessario rivolgere la vostra attenzione all'uso di tre metodi della classe CTrade:

Nel calcolo della variabile stop_loss, il valore di haHigh [BAR_COUNT-2] è un calcolo, ricevuto dall'indicatore, e necessita di una normalizzazione, eseguita dalla funzione NormalizeDouble (haHigh [BAR_COUNT-2], _Digits) per essere utilizzato correttamente .

Questo completa l'elaborazione del segnale da vendere.

Per acquistare usiamo lo stesso principio.

Ecco il codice completo dell'Expert Advisor:

//+------------------------------------------------------------------+
//|                                           Heiken_Ashi_Expert.mq5 |
//|                                               Copyright VDV Soft |
//|                                                 vdv_2001@mail.ru |
//+------------------------------------------------------------------+
#property copyright "VDV Soft"
#property link      "vdv_2001@mail.ru"
#property version   "1.00"

#include <Trade\AccountInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>

//--- the list of global variables
//--- input parameters
input double Lot=0.1;    // Lot size
//--- indicator handles
int      hHeiken_Ashi;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   hHeiken_Ashi=iCustom(NULL,PERIOD_CURRENT,"Examples\\Heiken_Ashi");
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- trading should be allowed and number of bars calculated>100
   if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
      if(BarsCalculated(hHeiken_Ashi)>100)
        {
         CheckForOpenClose();
        }
//---
  }
//+------------------------------------------------------------------+
//| Checking of the position opening conditions                      |
//+------------------------------------------------------------------+
void CheckForOpenClose()
  {
//--- process orders only when new bar is formed
   MqlRates rt[1];
   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   if(rt[0].tick_volume>1) return;

//--- to check the conditions we need the last three bars
#define  BAR_COUNT   3
//--- number of the indicator buffer for storage Open
#define  HA_OPEN     0
//--- number of the indicator buffer for storage High
#define  HA_HIGH     1
//--- number of the indicator buffer for storage Low
#define  HA_LOW      2
//--- number of the indicator buffer for storage Close
#define  HA_CLOSE    3

   double   haOpen[BAR_COUNT],haHigh[BAR_COUNT],haLow[BAR_COUNT],haClose[BAR_COUNT];

   if(CopyBuffer(hHeiken_Ashi,HA_OPEN,0,BAR_COUNT,haOpen)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_HIGH,0,BAR_COUNT,haHigh)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_LOW,0,BAR_COUNT,haLow)!=BAR_COUNT
      || CopyBuffer(hHeiken_Ashi,HA_CLOSE,0,BAR_COUNT,haClose)!=BAR_COUNT)
     {
      Print("CopyBuffer from Heiken_Ashi failed, no data");
      return;
     }
//---- check sell signals
   if(haOpen[BAR_COUNT-2]>haClose[BAR_COUNT-2])// bear candlestick 
     {
      CPositionInfo posinf;
      CTrade trade;
      double lot=Lot;
     //--- check if there is an open position, and if there is, close it
      if(posinf.Select(_Symbol))
        {
         if(posinf.Type()==POSITION_TYPE_BUY)
           {
            //            lot=lot*2;
            trade.PositionClose(_Symbol,3);
           }
        }
      //--- check and set Stop Loss level
      double stop_loss=NormalizeDouble(haHigh[BAR_COUNT-2],_Digits)+_Point*2;
      double stop_level=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*_Point;
      if(stop_loss<stop_level) stop_loss=stop_level;
      //--- check the combination: the candle with the opposite color has formed
      if(haOpen[BAR_COUNT-3]<haClose[BAR_COUNT-3])
        {
         if(!trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
      else
      if(posinf.Select(_Symbol))
        {
         if(!trade.PositionModify(_Symbol,stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
     }
//---- check buy signals
   if(haOpen[BAR_COUNT-2]<haClose[BAR_COUNT-2]) // bull candle
     {
      CPositionInfo posinf;
      CTrade trade;
      double lot=Lot;
     //--- check if there is an open position, and if there is, close it
      if(posinf.Select(_Symbol))
        {
         if(posinf.Type()==POSITION_TYPE_SELL)
           {
            //            lot=lot*2;
            trade.PositionClose(_Symbol,3);
           }
        }
      //--- check and set Stop Loss level
      double stop_loss=NormalizeDouble(haLow[BAR_COUNT-2],_Digits)-_Point*2;
      double stop_level=SymbolInfoDouble(_Symbol,SYMBOL_BID)-SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*_Point;
      if(stop_loss>stop_level) stop_loss=stop_level;
      //--- check the combination: the candle with the opposite color has formed
      if(haOpen[BAR_COUNT-3]>haClose[BAR_COUNT-3])
        {
         if(!trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }
      else
      if(posinf.Select(_Symbol))
        {
         if(!trade.PositionModify(_Symbol,stop_loss,0))
            Print(trade.ResultRetcodeDescription());
        }

     }
  }
//+------------------------------------------------------------------+

Il testo completo dell'Expert Advisor si trova nel file allegato Heiken_Ashi_Expert.mq5. Copialo nel catalogo .. \\ MQL5 \\ Experts, quindi esegui MetaEditor tramite il menu "Strumenti -&gt; Editor MetaQuotes Language", oppure usa il tasto «F4». Quindi nella finestra "Navigator", apri la scheda «Experts», e scarica il file Heiken_Ashi_Expert.mq5, facendo doppio clic su di esso, nella finestra di modifica e compilalo premendo «F7».

Se tutte le operazioni sono state eseguite correttamente, nella scheda "Expert Advisors", nella finestra "Navigator" verrà creato il file Heiken_Ashi_Expert. L'indicatore Heiken_Ashi.mq5 deve essere compilato allo stesso modo, si trova nel catalogo \\ MQL5 \\ Indicatori \\ Esempi \\.

4. Testare il sistema di trading su dati storici

Per verificare la fattibilità del nostro sistema di trading, utilizzeremo lo Strategy Tester MetaTrader 5, che fa parte della piattaforma di trading. Il tester viene eseguito tramite il menu del terminale "Visualizza -&gt; Strategy Tester " o premendo la combinazione di tasti « Ctrl + R ». Una volta avviato, individuiamo la scheda "Impostazioni" (Figura 3). 

Figura 3. Impostazioni di Strategy Tester

Figura 3.  Impostazioni dello Strategy Tester

Configurazione dell'Expert Advisor - scegli da un elenco dei nostri Expert Advisor, indica l'intervallo di test dall'inizio del 2000 alla fine del 2009, l'importo del deposito iniziale è di 10.000 USD, disabilita l'ottimizzazione (poiché abbiamo un solo parametro di input, e vogliamo solo verificare la fattibilità della ST).

I test verranno eseguiti utilizzando due coppie di valute. Ho deciso di scegliere le coppie di valute EURUSD e GBPUSD.

Per i test, ho deciso di prendere i seguenti intervalli di tempo: H3, H6 e H12. Ti chiederai perché? La risposta è perché volevo testare il TS su intervalli di tempo che non erano presenti nel terminale MetaTrader4.

Quindi eccoci qui. Selezioniamo la valuta di prova EURUSD, il periodo di prova H3 e facciamo clic su "Start". Al termine del test, vediamo due nuove schede nella finestra del tester: "Risultati" (Fig. 4) e "Grafico" (Fig. 5).

Figura 4. I Risultati dello strategy testing EURUSD H3

Figura 4. I Risultati dello strategy testing EURUSD H3

Dai risultati del test (Fig. 4) Puoi vedere che per il periodo dall'inizio del 2000 alla fine del 2009, con i parametri indicati, il TS ha prodotto una perdita di $ -2560,60 USD.

Il grafico (Fig. 5) mostra la distribuzione di profitti e perdite nel tempo, il che ci dà l'opportunità di rivedere le prestazioni di TS nel tempo e di fare un'analisi degli errori di sistema.

Figura 5. Scheda "Grafico" dello Strategy Tester ( EURUSD H3)

Figura 5. Scheda "Grafico" dello Strategy Tester (EURUSD H3)

Ho quasi dimenticato di dire che la scheda "Risultati", per impostazione predefinita, crea un semplice report. Inoltre, abbiamo la possibilità di visualizzare transazioni, ordini e report di file scritti.

Per fare ciò, posizioniamo semplicemente il cursore sulla scheda, facciamo clic con il tasto destro del mouse e selezioniamo la voce di menu appropriata:

Figura 6. Menu contestuale della scheda "Risultati" dello Strategy Tester

Figura 6. Menu contestuale della scheda Risultati di Strategy Tester

Ecco i risultati dei test su un periodo di sei ore (H6):

Figura 7. Scheda "Risultati" dello Strategy Tester ( EURUSD H6)

Figura 7. Scheda Risultati dello Strategy Tester (EURUSD H6)

su un periodo di dodici ore (H12).

Figura 8. Scheda Risultati dello Strategy Tester (EURUSD H12)

Figura 8.  Strategy Tester Scheda risultati (EURUSD H12)

Sembra che sulla coppia di valute, come EURUSD, la nostra strategia non sia efficace. Ma possiamo notare che la variazione del periodo di lavoro influisce in modo significativo sul risultato.

Estendiamo il nostro test alla coppia di valute GBPUSD, al fine di trarre conclusioni finali sull'efficienza del nostro TS.

Figura 9. Scheda Risultati dello Strategy Tester (GBPUSD H3)

Figura 9.  Strategy Tester Scheda risultati(GBPUSD H3)

Figura 10. Scheda Risultati dello Strategy Tester (GBPUSD H6)

Figura 10.  Strategy Tester Scheda risultati (GBPUSD H6)


Figura 11. Scheda Risultati dello Strategy Tester (GBPUSD H12)

Figura 11.  Strategy Tester Scheda risultati (GBPUSD H12)

 Figure 12.  Strategy Tester Scheda del grafico (GBPUSD H12)

Figura 12.  Strategy Tester schedaGrafico(GBPUSD H12)

Dopo aver analizzato i risultati del test, vediamo che utilizzando una coppia di valute, come GBPUSD, il nostro sistema ha mostrato risultati positivi in due casi separati. In un periodo di dodici ore, abbiamo ricevuto un considerevole profitto di 8903,23 USD, sebbene sia stato ricevuto in nove anni.

Chi è interessato può testare altre coppie di valute. La mia ipotesi è che più la coppia è volatile, il risultato migliore dovrebbe essere ottenuto e dovrebbe essere utilizzato il periodo di tempo più lungo.

Conclusione

In conclusione, sottolineo, che questo sistema di trading non è il "Santo Graal" e non può essere utilizzato da solo.

Tuttavia, se con segnali aggiuntivi (analisi candlestick, analisi delle onde, indicatori, tendenze) separiamo i segnali di inversione dai segnali di consolidamento, quindi su alcuni strumenti di trading volatili, può essere abbastanza fattibile, sebbene improbabile che porti un profitto "pazzo".

__________________________________ 
* "Nani Desu Ka?" - Cos'è questo?  Giapponese