English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Idee di trading basate sulla direzione dei prezzi e sulla velocità di movimento

Idee di trading basate sulla direzione dei prezzi e sulla velocità di movimento

MetaTrader 4Esempi | 12 gennaio 2022, 13:01
606 0
Alexander Fedosov
Alexander Fedosov

Introduzione

È noto da tempo che quando un prezzo si muove tutti i mercati liquidi rivelano una sorta di natura ciclica dell'onda che prima sale e poi scende. È chiaramente visibile sui grafici di intervalli di tempo più elevati. La natura sinusoidale è un riflesso del fatto che il prezzo ha una certa persistenza. Altrimenti sembrerebbe uno zigzag: bruschi movimenti verso l'alto e verso il basso in brevi periodi di tempo. Cerchiamo di scoprire le ragioni di questo fenomeno e le modalità di impiego nel commercio.


Inizio e persistenza del movimento

Qualsiasi movimento nel nostro mondo può essere caratterizzato dalla sua direzione, accelerazione e velocità. Funziona anche nei mercati liquidi. Ciò implica una regola importante che dice che mai un forte movimento diretto del prezzo può finire duramente. Può essere paragonato a un treno: quando un intero treno frena alla sua massima velocità, la sua via frenante può arrivare fino a un chilometro.

Quindi, quando inizia una tendenza? Quando la maggior parte dei partecipanti al mercato cambia opinione contraria per alcuni motivi, sia che si tratti di un cambiamento globale di direzione o di un cambiamento in alcuni fattori importanti che influenzano il mercato o le notizie. Con ciò si forma un'opinione collettiva considerata e inizia la tendenza. I partecipanti al mercato hanno una crescente convinzione che il movimento stia diventando più forte e andrà avanti. Ha una direzione, un'accelerazione e una certa velocità perché i grandi attori entrano nel mercato con grandi posizioni. È qui che coloro che sono entrati all'inizio del movimento e gli hanno dato un impulso e una velocità, iniziano a guadagnare profitto. Altri trader entrano nel mercato più tardi e con un prezzo meno interessante. Ma a differenza dei primi trader, cercano di usare la direzione del movimento dei prezzi.

La tendenza termina quando si verificano cambiamenti. Ma perché il prezzo si muove ancora allo stesso modo? Perché non cambia bruscamente? La ragione di tale comportamento è che coloro che stavano accelerando e spingendo il prezzo nella direzione desiderata, iniziano a chiudere le loro posizioni e quindi a sopprimere la tendenza. E quelli, che stavano solo "cavalcando l'onda", credono ancora che nulla sia cambiato e cercano persino di spostare il prezzo. Ma questo "treno" non si ferma. Inizia a muoversi nella direzione opposta e qui finisce la storia.


Idea di trading e come non essere investiti dal "treno"

L'idea di utilizzare il movimento e ottenere profitto si basa sull'analisi della profondità di tendenza attuale, cioè delle sue dimensioni e durata.

Per fornire un esempio vivido utilizziamo indicatori standard: RSI (Relative Strength Index) e AC (Accelerazione/Decelerazione).

1. Condizioni per l'ingresso sul mercato

Utilizzeremo il primo indicatore per dimostrare quanto lontano e profondo il prezzo si è attualmente spostato.

Posizioneremo i livelli per determinare una distanza e una profondità:

Fig. 1 Livelli dell'oscillatore RSI

Fig. 1. Livelli dell'oscillatore RSI

I criteri di valutazione della profondità del movimento dei prezzi:

  • Un'area tra i livelli 40 - 60 è considerata una zona pianeggiante (zona laterale). Non c'è alcuna tendenza quando il prezzo è in questa zona. Assegniamo l'indice 0 all'assenza di un movimento diretto.

Acquista zone di movimento dei prezzi:

  • Zona 60-70 - questo è un possibile inizio del movimento verso l'alto. Assegniamo l'indice 1 a questo movimento.
  • Zona 70-80 - il movimento verso l'alto è più distinto. Il movimento aumenta la sua velocità. Assegnare l'indice 2.
  • Zona 80-90 - il movimento ha una direzione stabile. La velocità è raggiunta. Assegnare l'indice 3.
  • Zona 90-100. Di norma questo è un forte movimento a senso unico che non ha pullback. Molto raro. Il suo indice di movimento sarà 4.

Cerchiamo di indicizzare allo stesso modo i prezzi di vendita:

  • Zona 30-40. Il movimento inizia a scendere. Indice - 1.
  • Zona 20-30. Il movimento aumenta la sua velocità. Indice -2.
  • Zona 10-20. Direzione stabile verso il basso. Indice -3.
  • Zona 0-10. Forte zona di movimento uni senso. Indice -4.

Possiamo descrivere questa condizione nel linguaggio MQL4 come segue:

//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if( rsi > 80.0 ) 
   index_rsi = 3;
   else if( rsi > 70.0 ) 
   index_rsi = 2;
   else if( rsi > 60.0 ) 
   index_rsi = 1;
   else if( rsi < 10.0 ) 
   index_rsi = -4;
   else if( rsi < 20.0 ) 
   index_rsi = -3;
   else if( rsi < 30.0 ) 
   index_rsi = -2;
   else if( rsi < 40.0 ) 
   index_rsi = -1;

Useremo l'indicatore AC di Bill Williams per lo scopo previsto, vale a dire misureremo la velocità e l'accelerazione del movimento attuale.

Fig. 2. Indicatore AC

Fig. 2. Indicatore

Criteri di valutazione della velocità:

Crescita.

  • Il primo criterio è il confronto degli istogrammi attuali e precedenti. Se l'istogramma corrente supera quello precedente, c'è una probabile accelerazione della crescita dei prezzi. Definiamolo come indice di velocità pari a 1.
  • Il secondo criterio è il confronto di 3 barre vicine (dalla barra zero alla seconda barra). Possiamo parlare di aumento dell'accelerazione se il valore di ogni barra successiva supera il valore della barra precedente. L'indice di velocità sarà uguale a 2.
  • C'è un confronto simile di 4 barre per verificare se ogni barra precedente è più piccola di quella successiva. L'indice di velocità è 3.
  • Confronto delle ultime 5 barre con il dovuto rispetto a quella attuale per verificare la stessa condizione. L'indice di velocità è 4.

Cadere.

  • Likewise. Confronto tra la barra corrente e quella precedente. Se la barra corrente è più piccola della precedente, l'indice di velocità è uguale a -1.
  • Confronto di 3 bar di riduzione dal precedente a quello attuale. L'indice è -2.
  • Confronto di 4 barre. L'indice è -3.
  • Confronto di 5 barre. L'indice è -4.

In MQL4 avrà l'aspetto seguente:

double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;

Se abbiamo indici di profondità di movimento e conosciamo la velocità di movimento, possiamo stabilire e classificare alcune condizioni di ingresso.

Ci sono opzioni di ingresso sul mercato:

//--- buy signal
if(index_rsi==1 && index_ac>=1) //possible buy movement
if(index_rsi==2 && index_ac>=1) //weak buy movement
if(index_rsi==3 && index_ac==1) //weak buy movement
if(index_rsi==3 && index_ac>=2) //moderate buy movement
if(index_rsi==4 && index_ac>=1) //strong buy movement

//--- sell signal  
if(index_rsi==-1 && index_ac<=-1) //possible sell movement
if(index_rsi==-2 && index_ac<=-1) //weak sell movement
if(index_rsi==-3 && index_ac==-1) //weak sell movement
if(index_rsi==-3 && index_ac<=-2) //moderate sell movement
if(index_rsi==-4 && index_ac<=-1) //strong sell movement

//--- flat 
if(index_rsi==0) 


2. Condizioni per uscire dal mercato

Abbiamo definito e classificato i parametri di ingresso. Faremo la seguente analogia per spiegare come si sono formate le condizioni di uscita dal mercato.

Pensate, per esempio, a una palla di gomma per bambini. E ora pensiamo a cosa succederà se qualcuno lancia questa palla in acqua da un punto molto alto. In primo luogo cadrà e raccoglierà velocità a causa dell'accelerazione gravitazionale. Poi urta contro l'acqua. Ma ha abbastanza velocità per immergersi a una certa profondità perdendo la sua velocità e avendo un valore negativo. La palla è influenzata dal principio di Archimede quindi viene spinta in superficie.

Ora eseguiremo il drill-down di questo esempio:

  • Come hai già capito, la nostra palla è il prezzo.
  • Una persona che lancia la palla rappresenta i partecipanti al mercato che hanno iniziato la tendenza.
  • La forza di gravità che causa l'accelerazione gravitazionale rappresenta i trader che si sono uniti alla direzione dei prezzi dopo l'inizio della tendenza.
  • L'acqua rappresenta fattori importanti che influenzano il cambiamento di direzione.
  • Il principio di Archimede rappresenta le posizioni chiuse di coloro che hanno iniziato la tendenza.

Due obiettivi principali per ottenere profitti sono i seguenti:

  1. Determinare tempestivamente un momento in cui la palla è già stata lanciata e comprare o vendere.
  2. Chiudi una posizione quando la palla si tuffa in acqua e rallenta.

Può essere difficile determinare la durata e l'esatta distanza di caduta della palla poiché non vediamo una persona che lancia la palla né acqua nei mercati finanziari. Possiamo solo vedere la velocità e la direzione della palla.

Abbiamo esaminato i criteri di valutazione della profondità e della velocità del movimento dei prezzi di cui sopra.

Ora definiremo le condizioni di uscita:

//--- possible downward reversal
if(index_rsi>2 && index_ac<0) 

Se il prezzo si muoveva verso l'alto abbastanza a lungo, la sua accelerazione diventa negativa (al ribasso). Ciò indica il fatto che il cambiamento di tendenza è del tutto possibile.

//--- possible upward reversal
if(index_rsi<-2 && index_ac>0) 

Allo stesso modo con l'esempio dato: la palla stava cadendo abbastanza a lungo, ma cadeva in acqua, e l'acqua spinge la palla fuori nella direzione opposta. Indica il momento per la chiusura delle posizioni.


3. Miglioramento dell'efficienza di entrata e uscita

È noto che alcuni indicatori di trading aumentano la loro velocità di risposta al cambiamento di tendenza quando utilizziamo un periodo più ampio. Ma appaiono anche altri falsi segnali.

Il modo alternativo non è quello di modificare il periodo di calcolo sul lato inferiore, ma di tracciarlo su diversi intervalli di tempo.

Fig. 3. Andamento su diversi intervalli di tempo in base ai segnali RSI e AC

Fig. 3. Andamento su diversi intervalli di tempo in base ai segnali RSI e AC

La tendenza al movimento dei prezzi può essere chiaramente vista nella figura a causa dei nostri criteri e degli indicatori RSI e AC. Diamo un'occhiata dettagliata.

Movimento e velocità su M1: movimento forte, indice AC è 4, profondità indice RSI è 2. M5 ha la stessa profondità ma la velocità è pari a 1. Lo stesso movimento è determinato su M15 ma è meno visibile rispetto ai grafici più bassi. Parlando di 30 minuti e un grafico delle ore, è impressionante vedere che M30 ha già un segnale e H1 ha una decelerazione e persino un segnale di possibile inversione.

Questo esempio ci dà una conclusione pesante:

Se considerassimosolo H1, piazzeremmo un ordine di vendita in attesa di inversione. Ma sarebbe un falso segnale che abbiamo filtrato conducendo l'analisi di tempi più bassi.


4. Implementazione della strategia di trading sotto forma di un Expert Advisor

Tipo di Expert Advisor

//+------------------------------------------------------------------+
//|                                                       tester.mq4 |
//|                                                Alexander Fedosov |
//+------------------------------------------------------------------+
#property copyright "Alexander Fedosov"
#property strict
#include <trading.mqh>      //Support library for trade operations
//+------------------------------------------------------------------+
//| Parameters                                                       |
//+------------------------------------------------------------------+
input int             SL = 40;               // Stop loss
input int             TP = 70;               // Take profit
input bool            Lot_perm=true;         // Lot of balance?
input double          lt=0.01;               // Lot
input double          risk = 2;              // Risk of deposit, %
input int             slippage= 5;           // Slippage
input int             magic=2356;            // Magic number
input int             period=8;              // RSI indicator period
input ENUM_TIMEFRAMES tf=PERIOD_CURRENT;     // Working timeframe
int dg,index_rsi,index_ac;
trading tr;
//+------------------------------------------------------------------+
//| Expert Advisor initialization function                           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- determining variables for auxiliary class of trading functions
//--- language for displaying errors, Russian of by default.
   tr.ruErr=true;
   tr.Magic=magic;
   tr.slipag=slippage;
   tr.Lot_const=Lot_perm;
   tr.Lot=lt;
   tr.Risk=risk;
//--- number of attempts.
   tr.NumTry=5;
//--- determining decimal places on the current chart
   dg=tr.Dig();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Main calculation function                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
   depth_trend();
   speed_ac();
//--- check for presence of open orders
   if(OrdersTotal()<1)
     {
      //--- check of buy conditions
      if(Buy())
         tr.OpnOrd(OP_BUY,tr.Lots(),Ask,SL*dg,TP*dg);
      //--- check of sell conditions
      if(Sell())
         tr.OpnOrd(OP_SELL,tr.Lots(),Bid,SL*dg,TP*dg);
     }
//--- are there open orders?
   if(OrdersTotal()>0)
     {
      //--- check and close sell orders which meet closing conditions.
      if(Sell_close())
         tr.ClosePosAll(OP_SELL);
      //--- check and close buy orders which meet closing conditions.
      if(Buy_close())
         tr.ClosePosAll(OP_BUY);
     }

  }
//+------------------------------------------------------------------+
//| Function for determining the trend depth                         |
//+------------------------------------------------------------------+
void depth_trend()
  {
//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if(rsi>80.0)
      index_rsi=3;
   else if(rsi>70.0)
      index_rsi=2;
   else if(rsi>60.0)
      index_rsi=1;
   else if(rsi<10.0)
      index_rsi=-4;
   else if(rsi<20.0)
      index_rsi=-3;
   else if(rsi<30.0)
      index_rsi=-2;
   else if(rsi<40.0)
      index_rsi=-1;
  }
//+------------------------------------------------------------------+
//| Function for determining the trend speed                         |
//+------------------------------------------------------------------+
void speed_ac()
  {
   double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;
  }
//+------------------------------------------------------------------+
//| Function for checking buy conditions                             |
//+------------------------------------------------------------------+
bool Buy()
  {
   bool res=false;
   if((index_rsi==2 && index_ac>=1) || (index_rsi==3 && index_ac==1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell conditions                            |
//+------------------------------------------------------------------+
bool Sell()
  {
   bool res=false;
   if((index_rsi==-2 && index_ac<=-1) || (index_rsi==-3 && index_ac==-1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking buy position closing conditions            |
//+------------------------------------------------------------------+
bool Buy_close()
  {
   bool res=false;
   if(index_rsi>2 && index_ac<0)
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell position closing conditions           |
//+------------------------------------------------------------------+
bool Sell_close()
  {
   bool res=false;
   if(index_rsi<-2 && index_ac>0)
      res=true;
   return (res);
  }

Abbiamo eseguito una piccola ottimizzazione utilizzando solo due parametri: tf (working timeframe) e period (RSI indicator period).

E abbiamo ottenuto i seguenti risultati su M15:


Fig. 4. Risultati del backtesting di Expert Advisor

Attenzione! Questa è solo una versione demo. Non è consigliabile utilizzarlo per i test e su conti reali.

Conclusione

La determinazione dell'inizio e della fine della tendenza è uno dei compiti complicati per i trader di tutto il mondo in quanto è impossibile prevedere il comportamento del mercato.

Ma è del tutto possibile determinare i momenti di entrata e di uscita nella tendenza attuale e quindi ottenere profitti considerevoli. E l'idea generale di determinazione e traccia dinamica della velocità di movimento può essere utile in questa materia.

Ti auguro un trading di successo.


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

File allegati |
trading.mqh (48.16 KB)
tester.mq4 (11.59 KB)
Suggerimenti per l'acquisto di un prodotto sul mercato. Guida passo-passo Suggerimenti per l'acquisto di un prodotto sul mercato. Guida passo-passo
Questa guida dettagliata fornisce suggerimenti e trucchi per una migliore comprensione e ricerca del prodotto desiderato. L'articolo tenterà di trovare diversi metodi di ricerca di un prodotto, eliminando i prodotti indesiderati, determinando se questo sarà per l’utente efficiente ed essenziale.
Creazione di un'applicazione interattiva per visualizzare feed RSS in MetaTrader 5 Creazione di un'applicazione interattiva per visualizzare feed RSS in MetaTrader 5
In questo articolo esaminiamo la possibilità di creare un'applicazione per la visualizzazione di feed RSS. L'articolo mostrerà come gli aspetti della Libreria Standard possono essere utilizzati per creare programmi interattivi per MetaTrader 5.
Programmatori Migliori (Parte 01): devi smettere di fare queste 5 cose per diventare un programmatore MQL5 di successo Programmatori Migliori (Parte 01): devi smettere di fare queste 5 cose per diventare un programmatore MQL5 di successo
Ci sono molte cattive abitudini che i neofiti e persino i programmatori avanzati hanno e che impediscono loro di diventare il meglio che possono essere nella loro carriera. Li discuteremo e li affronteremo in questo articolo. Questo articolo è una lettura obbligata per tutti coloro che vogliono diventare sviluppatori di successo in MQL5.
Manuale MQL5: Ordini ОСО Manuale MQL5: Ordini ОСО
L'attività di trading di qualsiasi trader comporta vari meccanismi e interrelazioni, comprese le relazioni tra gli ordini. Questo articolo suggerisce una soluzione per l'elaborazione degli ordini OCO. Le classi di libreria standard sono ampiamente coinvolte, e vengono creati nuovi tipi di dati.