Color Day: L'indicatore per MetaTrader 5 che Colora i Giorni di Trading

Mike 2017.01.18 18:27 14 0 0
Allegato

Hai mai desiderato un modo semplice per visualizzare i giorni ribassisti e rialzisti nel tuo grafico di trading? Con l'indicatore Color Day per MetaTrader 5, puoi farlo! Questo strumento colorerà i giorni in base alla chiusura e all'apertura, rendendo più facile l'analisi dei trend.

Se la chiusura giornaliera è maggiore dell'apertura, il giorno verrà colorato di blu (puoi personalizzare il colore nelle impostazioni):

input color UP = Blue;  // colore del giorno rialzista

Se, invece, la chiusura giornaliera è inferiore all'apertura, il giorno sarà colorato di rosso (anche questo è personalizzabile):

input color DN = Red;  // colore del giorno ribassista

Questo indicatore copia i prezzi di apertura e chiusura e il tempo di apertura per il numero specificato di giorni Days:

CopyTime(NULL,PERIOD_D1,0,Days+1,tm);
      CopyOpen(NULL,PERIOD_D1,0,Days+1,op);
      CopyClose(NULL,PERIOD_D1,0,Days+1,cl);

Questi valori vengono quindi memorizzati negli array corrispondenti:

datetime tm[];
double op[];
double cl[];

Prima di installare l'indicatore nel grafico, è importante impostare la dimensione degli array:

int OnInit()
  {
//--- mappatura dei buffer dell'indicatore
   Comment("");
   ArrayResize(tm,Days);
   ArrayResize(op,Days);
   ArrayResize(cl,Days);
//---
   return(INIT_SUCCEEDED);
  }

Successivamente, assegna i valori delle celle degli array a variabili e determina l’orario di chiusura giornaliero time1:

datetime time0=tm[i];
      datetime time1=time0+3600*24;
      double dopen=op[i];
      double dclose=cl[i];

Utilizzando la funzione PutRect():

void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr)
  {
   ObjectDelete(0,name);
//--- crea un rettangolo con le coordinate fornite
   ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2);
//--- imposta il colore del rettangolo
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- abilita (true) o disabilita (false) la modalità di riempimento del rettangolo
   ObjectSetInteger(0,name,OBJPROP_FILL,true);
  }

Colora il giorno a seconda di dove si è mosso il prezzo:

if(dclose<dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,DN);
      if(dclose>dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,UP);

Itera su tutti i giorni specificati nel parametro Days in un ciclo:

for(int i=0;i<=Days;i++)
     {
      CopyTime(NULL,PERIOD_D1,0,Days+1,tm);
      CopyOpen(NULL,PERIOD_D1,0,Days+1,op);
      CopyClose(NULL,PERIOD_D1,0,Days+1,cl);

      datetime time0=tm[i];
      datetime time1=time0+3600*24;
      double dopen=op[i];
      double dclose=cl[i];

      if(dclose<dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,DN);
      if(dclose>dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,UP);

Infine, quando rimuovi l'indicatore dal grafico utilizzando la funzione DeleteObjects():

void DeleteObjects()
  {
   for(int i=ObjectsTotal(0,0,OBJ_RECTANGLE)-1;i>=0;i--)
     {
      string name=ObjectName(0,i,0,OBJ_RECTANGLE);
      if(StringFind(name,"Rect",0)>=0) ObjectDelete(0,name);
     }
  }

Per rimuovere gli oggetti creati dal grafico:

void OnDeinit(const int reason)
  {
   Comment("");
   DeleteObjects();
  }

Impostazioni:

input int   Days = 11;  // giorni per il calcolo
input color UP = Blue;  // colore del giorno rialzista
input color DN = Red;   // colore del giorno ribassista

Fig. 1. L'indicatore sul grafico

Consigli:

  • L'indicatore Color Day è un assistente visivo utile per il trading.
Elenco
Commento 0