Discussione sull’articolo "Come individuare i trend e i pattern grafici utilizzando MQL5" - pagina 2

 

Si prega di scrivere solo in inglese su questo forum.

Se necessario, è possibile utilizzare lo strumento di traduzione automatica.

Grazie.
 
J M doppio bottom ), non c'è la possibilità di proporre un codice che sia in grado piuttosto di tracciare 4 linee diverse e definitive (disegnando più o meno chiaramente sul grafico una M)? Piuttosto che linee che si ridisegnano al variare dei prezzi, il che non è affatto una buona cosa quando si tratta di individuare i pattern .

Per quanto riguarda il doppio top, ad esempio:

1. Una prima linea, che disegna la prima gamba rialzista. E la linea rimane definitiva senza muoversi ulteriormente con i successivi cambiamenti di rotta...

2. Una seconda, che traccerà la prima correzione ribassista, indicherà allo stesso tempo la potenziale formazione di un primo top di un potenziale pattern M.

3. Un terzo, che traccia la ripresa rialzista (un secondo impulso rialzista) e avverte il trader dell'imminenza di un ritorno...

4. E, infine, una linea posteriore che verrà tracciata una volta che la figura si sarà realmente formata...

Credo che abbiate capito la mia preoccupazione.

Non è possibile che un codice sia in grado di eseguire questi diversi tracciati? GRAZIE

Grazie per il suo commento.

So che individuare i modelli può essere difficile in base alla forma del modello, poiché ci sono molte varianti accettate e potrebbe essere necessario sviluppare il codice in base agli obiettivi e a ciò che avete menzionato.

Penso che tutto ciò che si può descrivere in modo logico, si può codificare.

Grazie

 
Mohamed Abdelmaaboud #:

Grazie per il suo commento.

So che individuare i modelli può essere difficile in base alla forma del modello, poiché ci sono molte varianti accettate e si potrebbe scoprire che è necessario sviluppare il codice in base agli obiettivi e a ciò che avete menzionato.

Penso che tutto ciò che si può descrivere in modo logico, si può codificare.

Grazie

Ok. Grazie

Tradotto in inglese dal moderatore.

Questo è il forum inglese. Si prega di scrivere solo in inglese.

 
Sono lieto di aver letto il tuo articolo, Mohamed.
Mi sono permesso (spero non ti offenda) di unificare i codici per vedere i risultati raggruppati: È quello che mi viene in mente per continuare a fare passi avanti verso la creazione di un possibile EA.
Chi è incoraggiato a implementare gli ordini ai diversi stati grafici?

Cordiali saluti.

//+------------------------------------------------------------------+
//|TrendDTDB.mq5 |
//+------------------------------------------------------------------+

input int checkBars= 20;
   int high1, high2, low1, low2;
   double highVal1, highVal2, lowVal1, lowVal2;

void OnInit()
{
   PonEtiquetas();
}


void OnTick()
{
   high1=getmove(MODE_HIGH,checkBars,0);
   high2=getmove(MODE_HIGH,checkBars,high1+1);
   highVal1=NormalizeDouble(iHigh(_Symbol,_Period,high1),5);
   highVal2=NormalizeDouble(iHigh(_Symbol,_Period,high2),5);
   
   low1=getmove(MODE_LOW,checkBars,0);
   low2=getmove(MODE_LOW,checkBars,low1+1);
   lowVal1=NormalizeDouble(iLow(_Symbol,_Period,low1),5);
   lowVal2=NormalizeDouble(iLow(_Symbol,_Period,low2),5);

// DOBLE TECHO
   if(highVal1<=highVal2&&lowVal1>lowVal2){ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"Potencial DT-DOBLE TECHO"); DibujaArriba("DTP",clrGreen);}
   else if(highVal1<=highVal2&&lowVal1<lowVal2){ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"DT-DOBLE TECHO");DibujaArriba("DT",clrGreen);}
        else{ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"."); ObjectsDeleteAll(0,"DT",0,-1);}

//DOBLE SUELO
   if(lowVal1>=lowVal2&&highVal1<highVal2){ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"Potencial DS-DOBLE SUELO"); DibujaAbajo("DSP",clrRed);}
   else if(lowVal1>=lowVal2&&highVal1>highVal2){ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"DT-DOBLE TECHO");DibujaArriba("DS",clrGreen);}
        else{ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"."); ObjectsDeleteAll(0,"DS",0,-1);}

// CERCATORE DI TENDENZE
   if(lowVal1>lowVal2&&highVal1>highVal2){ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"UP-Tendencia ALCISTA");DibujaArriba("T",clrGreen);}
   else if(highVal1<highVal2&&lowVal1<lowVal2){ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"DOWN-Tendencia BAJISTA");DibujaAbajo("T",clrRed);}
        else{ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"SW-Tendencia LATERAL");  ObjectsDeleteAll(0,"T",0,-1);}
      
}


int getmove(int move, int count, int startPos)
{
   if(move!=MODE_HIGH && move!=MODE_LOW)
      return (-1);
   int currentBar=startPos;
   int moveReturned=getNextMove(move,count*2+1,currentBar-count);
   while(moveReturned!=currentBar)
     {
      currentBar=getNextMove(move,count,currentBar+1);
      moveReturned=getNextMove(move,count*2+1,currentBar-count);
     }
   return(currentBar);
}
  
int getNextMove(int move, int count, int startPos)
{
   if(startPos<0)
     {
      count +=startPos;
      startPos =0;
     }
   return((move==MODE_HIGH)?
          iHighest(Symbol(),Period(),(ENUM_SERIESMODE)move,count,startPos):
          iLowest(Symbol(),Period(),(ENUM_SERIESMODE)move,count,startPos));
}
  
void DibujaArriba(string Nombre, int mColor)
{ 
   ObjectDelete(0,Nombre);
   ObjectCreate(0,Nombre,OBJ_TREND,0,iTime(Symbol(),Period(),high2),iHigh(Symbol(),Period(),high2),iTime(Symbol(),Period(),high1),iHigh(Symbol(),Period(),high1));
   ObjectSetInteger(0,Nombre,OBJPROP_COLOR,mColor);
   ObjectSetInteger(0,Nombre,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,Nombre,OBJPROP_RAY_RIGHT,true);

}

void DibujaAbajo(string Nombre, int mColor)
{ 
   ObjectDelete(0,Nombre);
   ObjectCreate(0,Nombre,OBJ_TREND,0,iTime(Symbol(),Period(),low2),iLow(Symbol(),Period(),low2),iTime(Symbol(),Period(),low1),iLow(Symbol(),Period(),low1));
   ObjectSetInteger(0,Nombre,OBJPROP_COLOR,mColor);
   ObjectSetInteger(0,Nombre,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,Nombre,OBJPROP_RAY_RIGHT,true);
}

void PonEtiquetas()
{ 
   ObjectCreate((int)_Symbol,"LS0", OBJ_LABEL, 0, 0, 0);
   ObjectSetString(0,"LS0",OBJPROP_FONT,"Arial");
   ObjectSetInteger(0,"LS0",OBJPROP_FONTSIZE,25); 
   ObjectSetInteger(0,"LS0",OBJPROP_COLOR,clrGreen);    
   ObjectSetInteger(0,"LS0", OBJPROP_CORNER, 4);   
   ObjectSetInteger(0,"LS0", OBJPROP_XDISTANCE, 800);
   ObjectSetInteger(0,"LS0", OBJPROP_YDISTANCE, 50);
   ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"-");  
   
   ObjectCreate((int)_Symbol,"LS1", OBJ_LABEL, 0, 0, 0);
   ObjectSetString(0,"LS1",OBJPROP_FONT,"Arial");
   ObjectSetInteger(0,"LS1",OBJPROP_FONTSIZE,25); 
   ObjectSetInteger(0,"LS1",OBJPROP_COLOR,clrRed);    
   ObjectSetInteger(0,"LS1", OBJPROP_CORNER, 4);   
   ObjectSetInteger(0,"LS1", OBJPROP_XDISTANCE, 800);
   ObjectSetInteger(0,"LS1", OBJPROP_YDISTANCE, 90);
   ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"-");  
   
   ObjectCreate((int)_Symbol,"LS2", OBJ_LABEL, 0, 0, 0);
   ObjectSetString(0,"LS2",OBJPROP_FONT,"Arial");
   ObjectSetInteger(0,"LS2",OBJPROP_FONTSIZE,25); 
   ObjectSetInteger(0,"LS2",OBJPROP_COLOR,clrWhiteSmoke);    
   ObjectSetInteger(0,"LS2", OBJPROP_CORNER, 4);   
   ObjectSetInteger(0,"LS2", OBJPROP_XDISTANCE, 800);
   ObjectSetInteger(0,"LS2", OBJPROP_YDISTANCE, 130);
   ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"-");        
}
 
Creare oggetti grafici a ogni spunta non è una buona idea.
 
Ottimo contributo, complimenti, grazie mille!
 
Abbastanza chiaro e visibile .oltre che interessante
 

Ciao Mohamed, ho letto il tuo articolo e il tuo codice. Mi ha aiutato molto.


C'è una sola cosa che non capisco. Dove hai preso la funzione "getmove"? Ho provato a cercarla su MTQL.

Ho appena iniziato, quindi scusate la domanda se la risposta è facile.

Eugene