//+------------------------------------------------------------------+ //| HPFZ_Statistica.mq4 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window double conteggioRosso; double conteggioVerde; double conteggioGiallo; string TXT; string PronosticoFinale[3]; double num_array[3]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { PronosticoFinale[0]="Pronostico Rosso"; PronosticoFinale[1]="Pronostico Verde"; PronosticoFinale[2]="Pronostico Giallo"; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //--- //int counted_bars=IndicatorCounted(); //if(counted_bars<0) return (-1); int limit=iBars(Symbol(),PERIOD_D1)-2; int i=0; double Totale=limit; if (NuovaCandela()) { for(i=limit; i>=0; i--) { //---Dati Oggi //double OT=iOpen(Symbol(),PERIOD_D1,i+1); double HT=iHigh(Symbol(),PERIOD_D1,i+1); double LT=iLow(Symbol(),PERIOD_D1,i+1); double CT=iClose(Symbol(),PERIOD_D1,i+1); //---Dati giorno prima double HY=iHigh(Symbol(),PERIOD_D1,i+2); double LY=iLow(Symbol(),PERIOD_D1,i+2); double CY=iClose(Symbol(),PERIOD_D1,i+2); //---Tipo di candela giorno dopo rialzista o ribassista string CandelaDomani=(iOpen(Symbol(),PERIOD_D1,i)AT && CT<=BT && ZoneCT==0)? 2:ZoneCT; ZoneCT=(CT>BT && CT<=CToday && ZoneCT==0)? 3:ZoneCT; ZoneCT=(CT>CToday && CT<=DT && ZoneCT==0)? 4:ZoneCT; ZoneCT=(CT>DT && CT<=ET && ZoneCT==0)? 5:ZoneCT; ZoneCT=(CTAY && CY<=BY && ZoneCY==0)? 2:ZoneCY; ZoneCY=(CY>BY && CY<=CYesterday && ZoneCY==0)? 3:ZoneCY; ZoneCY=(CY>CYesterday && CY<=DY && ZoneCY==0)? 4:ZoneCY; ZoneCY=(CY>DY && CY<=EY && ZoneCY==0)? 5:ZoneCY; ZoneCY=(CYEY-0.001)?"BEARISH":"SIDEWAYS" ; string appoggio2=(appoggio==appoggio1)?"OK":"TAKE SIGN DIRECTION" ; double Range1=(DT-CToday)*10000; double Range2=(CToday-BT)*10000; double Target1=CT+(Range1/10000); double Target2=CT-(Range2/10000); //----Calculation for Using Signal. B int appoggio3=(LTEY-0.001)?-10 :0 ; int SommaChiusure= ZoneCT+ZoneCY; int Somma=appoggio3+appoggio4+SommaChiusure; string Prono=((appoggio3+appoggio4)>1)?"SELL" :"BUY" ; //---Reverse Signal B double appoggio5=(CT1)?Target1-0.0005:Target2+0.0005; double ProfitB=MathAbs(TargetB-CT)*10000; double appoggio6=(ProfitB>105)?-10 :10 ; double SommaSignalB=appoggio5+appoggio6; //---Signal: A //---Signal: B string PronoB=((appoggio3+appoggio4)>1)?"Buy" :"SELL" ; //---Signal A: string PronoA=(SommaSignalB<1)?Prono :PronoB ; //---Final Recomendation are : string RaccomandazioneFinale=(StringCompare(PronoA,PronoB,false)==0)?"A" :"B" ; string PronoRosso=(StringCompare(RaccomandazioneFinale,"A")==0)?PronoA :PronoB ; //---Calcolo Pronostico VERDE string PronoVerde=(ZoneCT<3.5)?"BUY" :"SELL" ; //---Calcolo Statistica GIALLO string appoggio7=((CT-0.002)(E1Y+0.002))?"REVERSE" :"OK" ; string PronoC=(appoggio7==appoggio8)?"SELL" :"BUY" ; //---If Close at Zone 3 & 4 string Prono1=(Somma<6.9)?"SELL" :"BUY" ; string Prono2=(Somma>6.9)?"SELL" :"BUY" ; string Prono1_2=(appoggio7==appoggio8)?Prono1 :Prono2 ; //---Pronostico GIALLO string PronoGiallo=(appoggio==appoggio1)?Prono1_2 :Prono1 ; //---Statistica sul Pronostico if (StringCompare(CandelaDomani,PronoRosso,false)==0) conteggioRosso+=1; if (StringCompare(CandelaDomani,PronoVerde,false)==0) conteggioVerde+=1; if (StringCompare(CandelaDomani,PronoGiallo,false)==0) conteggioGiallo+=1; //---Calcolo Pronostico OGGI if (i==0) { num_array[0]=conteggioRosso; num_array[1]=conteggioVerde; num_array[2]=conteggioGiallo; int MaxValue=ArrayMaximum(num_array,WHOLE_ARRAY,0); string PronoFinale=PronosticoFinale[MaxValue]; datetime PrimaCandela=iTime(Symbol(),PERIOD_D1,iBars(Symbol(),PERIOD_D1)-2); switch(MaxValue) { case 0: TXT="La prima candela analizzata è del: "+TimeToString(PrimaCandela)+ "\n Il numero di risultati esatti per il pronostico ROSSO è: "+DoubleToString(conteggioRosso)+" pari al: "+DoubleToString(NormalizeDouble((conteggioRosso/Totale)*100,2))+"%"+ "\n" +"Il pronostico ROSSO di oggi è : "+PronoRosso; break; case 1: TXT="La prima candela analizzata è del: "+TimeToString(PrimaCandela)+ "\n Il numero di risultati esatti per il pronostico VERDE è: "+DoubleToString(conteggioVerde)+" pari al: "+DoubleToString(NormalizeDouble((conteggioVerde/Totale)*100,2))+"%"+ "\n"+"Il pronostico VERDE di oggi è: "+PronoVerde; break; case 2: TXT="La prima candela analizzata è del: "+TimeToString(PrimaCandela)+ "\n Il numero di risultati esatti per il pronostico GIALLO è: "+DoubleToString(conteggioGiallo)+" pari al: "+DoubleToString(NormalizeDouble((conteggioGiallo/Totale)*100,2))+"%"+ "\n" +"Il pronostico GIALLO di oggi è: "+PronoGiallo; break; } } } } Comment(TXT); //--- return value of prev_calculated for next call return 0; } //+------------------------------------------------------------------+ bool NuovaCandela() { static datetime UltimaCandela; datetime CandelaAttuale=iTime(Symbol(),PERIOD_D1,0); if (CandelaAttuale!=UltimaCandela) { UltimaCandela= CandelaAttuale; return (true); } return (false); }