diff --git a/PaPP v2/PaPP_Median.mq5 b/PaPP v2/PaPP_Median.mq5 index cef4aa6..cb922c5 100644 --- a/PaPP v2/PaPP_Median.mq5 +++ b/PaPP v2/PaPP_Median.mq5 @@ -15,6 +15,8 @@ input bool Smooth = true; // interpola tra i valori D1 -> linea morbida input bool ShowMA = true; // mostra anche le 7 MA (oltre alla mediana) #define ANCHOR_TF PERIOD_D1 // calcolo ancorato a D1: linea identica su ogni TF +#define KSLOPE 5 // barre D1 per velocita'/accelerazione +#define NVOL 14 // barre D1 per la volatilita' double Buff_Median[]; double B0[],B1[],B2[],B3[],B4[],B5[],B6[]; @@ -154,6 +156,49 @@ double MedianAtD1(int d1shift) return Median(vals,cnt); } +//+------------------------------------------------------------------+ +// valore valido = positivo e finito (esclude EMPTY_VALUE di warmup) +bool IsVal(double v) { return (v>0.0 && v<1.0e12); } + +//+------------------------------------------------------------------+ +// mediana dei primi c valori di src +double MedArr(double &src[],int c) + { + if(c<=0) return 0; + double a[]; ArrayResize(a,c); + for(int j=0;j=2) + { + double mean=0; for(int j=0;j0) { ds+=MathAbs(v-median)/median*100; dc++; } } - double vol = (dc>0)?ds/dc:0; - Lbl("V","Cluster +/-"+DoubleToString(vol,3)+"%",x,y,FontSize,clrGray,false); y+=lh+2; + double clu = (dc>0)?ds/dc:0; + Lbl("V","Cluster +/-"+DoubleToString(clu,3)+"%",x,y,FontSize,clrGray,false); y+=lh; + + //--- Velocita'/Accelerazione/Volatilita' = mediana delle 7 scale (dalle nostre MA) + double velo,acc,volat; ScaleMetrics(velo,acc,volat); + Lbl("VEL",StringFormat("Velocita' %dg: %+.3f%%",KSLOPE,velo),x,y,FontSize,(velo>0)?clrLimeGreen:clrTomato,false); y+=lh; + Lbl("ACC",StringFormat("Accel %dg: %+.4f%%",KSLOPE,acc),x,y,FontSize,(acc>0)?clrLimeGreen:clrTomato,false); y+=lh; + Lbl("VOL",StringFormat("Volatilita' %dg: %.4f%%",NVOL,volat),x,y,FontSize,clrAqua,false); y+=lh+2; //--- Valori delle 7 MA (giorni : valore) con colore = linea for(int m=0;m<7;m++)