Bull&Bear Candles 1.2

Author: Vincenzo Augello, ottobre 2022
0 Views
0 Downloads
0 Favorites
Bull&Bear Candles 1.2
ÿþ//+------------------------------------------------------------------+

//|                                         Bull&BearCandles 1.2.mq5 |

//|                                         Author  Vincenzo Augello |

//+------------------------------------------------------------------+

#property copyright "Vincenzo Augello, ottobre 2022 "

#property link      "www.mql5.com"

#property indicator_separate_window

 

#property description "Oscillatore ricavato dalla somma di candele verdi rialziste CV e rosse ribassiste CR, con valore"

#property description "compreso tra 0 e 100 riportato su draw_line e finestra separata. Conta barre/candele nulle,"

#property description "con medesima quotazione in apertura e chiusura. Inclusi valori netti massimo/minimo estremi sia"

#property description "su registro expert sia su grafico. Indicatore che segnala l'eccesso di candele rialziste per valori"                                                                     

#property description "pari o superiori a 90 e di quelle ribassiste per valori pari o inferiori a 10 in relazione al timeframe selezionato"



#property indicator_buffers 1

#property indicator_plots   1



//--- Le proprietà della linea vengono impostate utilizzando le direttive del compilatore



#property indicator_label1  "Bull&Bear Candle 1.2" // Nome del disegno per la Finestra Dati

#property indicator_type1   DRAW_LINE             // Tipo di disegno della linea

#property indicator_color1  clrYellow            // Colore della linea

#property indicator_style1  STYLE_SOLID         // Stile della linea

#property indicator_width1  2                  // Spessore della linea



//--- Buffer indicatori per il disegno



double  LineBuffer [];



//+--------------------------------------------------------------------------------+

//| Funzione di inizializzazione Indicatore Personalizzato                         |

//+--------------------------------------------------------------------------------+

int OnInit()

  {

  //--- Associa un array e un buffer indicatore

   

   SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);

   

   return(INIT_SUCCEEDED);

 }

//+-------------------------------------------------------------------------------+

// Funzione di uscita registro e cls display                                      |        

//+-------------------------------------------------------------------------------+

void OnDeinit(const int reason)

{

 Print("EXIT");

 

 Comment(" "); 

}



//+--------------------------------------------------------------------------------+

//| Funzione di iterazione indicatore personalizato                                |

//+--------------------------------------------------------------------------------+

   double apertura = 0;

   double chiusura = 0; 

   int candleV     = 0;

   int candleR     = 0;

   int candleN     = 0;

   int i           = 0;   

   int numC        = 0;   

   int netta       = 0;

   double nettaB   = 0; 

   double max      = 0;  

   double min      = 0;

   double LivC     = 0;   

   double LivC2    = 0;

   

   int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

//-- Blocco per il calcolo dei valori dell'indicatore

 

  while(i < rates_total){

  

   LineBuffer[i] = open[i];

   apertura      = open[i];

  

   LineBuffer[i] = close[i];

   chiusura      = close[i];  

  

   if (chiusura > apertura) 

       candleV = candleV + 1;

        

   if (chiusura < apertura)      

       candleR = candleR + 1;

           

   if (chiusura == apertura)

       candleN = candleN + 1;

       

   netta = candleV - candleR;

   

   numC = numC + 1;

   

   if(netta > max)

      max = netta;

   if(netta < min)

      min = netta;  

      

   LivC  = netta - min;

   LivC  = LivC * 100;

   LivC2 = max - min;  

      

   if (LivC2 > 0)

   LineBuffer[i] = LivC / LivC2; 

   nettaB = LineBuffer[i];  

     

  i++;

 }

   

  Comment(_Symbol + " NumCandele : " + numC + " CV : " + candleV + " CR : " + candleR + " CN : " + candleN + " Netta : " + DoubleToString(nettaB,2) + " Netto massimo candele: " + max + " Netto minimo candele: " + min);                                                                                                                                           

  Print( _Symbol + " NumCandele : " + numC + " CV : " + candleV + " CR : " + candleR + " CN : " + candleN + " Netta : " + DoubleToString(nettaB,2) + " Netto massimo candele: " + max  + " Netto minimo candele: " + min); 

 

  i = 0;    

  candleV = 0;

  candleR = 0;

  candleN = 0; 

  netta   = 0;

  nettaB  = 0;

  numC    = 0;  



//--Restituisce il valore prev_calculated per la successiva chiamata della funzione

 return(rates_total);

 } 

Comments