From f1d1a2230f08446f6cb62308d2b49c943edd0ab7 Mon Sep 17 00:00:00 2001 From: Pietro Giacobazzi Date: Tue, 16 Jun 2026 19:36:32 +0000 Subject: [PATCH] PaPP v2 indicatore: etichette a fine linea (nome MA/Mediana, colore=linea) + legenda pannello con colori delle linee Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- PaPP v2/PaPP_Median.mq5 | 59 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/PaPP v2/PaPP_Median.mq5 b/PaPP v2/PaPP_Median.mq5 index f505f50..cef4aa6 100644 --- a/PaPP v2/PaPP_Median.mq5 +++ b/PaPP v2/PaPP_Median.mq5 @@ -23,7 +23,8 @@ int gDays[7] = {365,182,121,30,14,7,3}; color gCol[7] = {clrDodgerBlue,clrDeepSkyBlue,clrTurquoise,clrLimeGreen,clrOrange,clrTomato,clrRed}; int hMA[7]; int bars[7]; -string _pfx = "PM_"; +string _pfx = "PM_"; // oggetti pannello +string _pfx2 = "PME_"; // etichette a fine linea //+------------------------------------------------------------------+ // scrive il valore nel buffer della MA m @@ -41,6 +42,23 @@ void SetBuf(int m,int idx,double v) } } +//+------------------------------------------------------------------+ +// legge il valore corrente (barra 0) del buffer della MA m +double GetBuf(int m) + { + switch(m) + { + case 0: return B0[0]; + case 1: return B1[0]; + case 2: return B2[0]; + case 3: return B3[0]; + case 4: return B4[0]; + case 5: return B5[0]; + case 6: return B6[0]; + } + return 0; + } + //+------------------------------------------------------------------+ int TimeToBars(int d) { @@ -103,6 +121,7 @@ void OnDeinit(const int reason) { for(int i=0;i<7;i++) if(hMA[i]!=INVALID_HANDLE) IndicatorRelease(hMA[i]); ObjectsDeleteAll(0,_pfx); + ObjectsDeleteAll(0,_pfx2); } //+------------------------------------------------------------------+ @@ -256,6 +275,7 @@ int OnCalculate(const int rates_total, } DrawInfo(); + DrawTags(time[0]); return rates_total; } @@ -284,20 +304,51 @@ void DrawInfo() double vol = (dc>0)?ds/dc:0; Lbl("V","Cluster +/-"+DoubleToString(vol,3)+"%",x,y,FontSize,clrGray,false); y+=lh+2; - //--- Valori delle 7 MA (giorni : valore) + //--- Valori delle 7 MA (giorni : valore) con colore = linea for(int m=0;m<7;m++) { double v=GetMA(m,1); - color cma = (v>median)?clrSalmon:clrLightGreen; Lbl("a"+IntegerToString(m), StringFormat("MA %3dg: %s",gDays[m],DoubleToString(v,_Digits)), - x,y,FontSize-1,(v>0)?cma:clrGray,false); + x,y,FontSize-1,(v>0)?gCol[m]:clrGray,false); y+=lh-2; } y+=2; Lbl("H","Sopra=SELL | Sotto=BUY",x,y,FontSize-1,clrGray,false); } +//+------------------------------------------------------------------+ +// etichetta di testo ancorata a (t,price); se price<=0 la rimuove +void Tag(string n,datetime t,double price,string txt,color c) + { + string o=_pfx2+n; + if(price<=0) { ObjectDelete(0,o); return; } + if(ObjectFind(0,o)<0) ObjectCreate(0,o,OBJ_TEXT,0,0,0); + ObjectSetInteger(0,o,OBJPROP_TIME,t); + ObjectSetDouble(0,o,OBJPROP_PRICE,price); + ObjectSetString(0,o,OBJPROP_TEXT," "+txt); + ObjectSetString(0,o,OBJPROP_FONT,"Consolas"); + ObjectSetInteger(0,o,OBJPROP_FONTSIZE,FontSize); + ObjectSetInteger(0,o,OBJPROP_COLOR,c); + ObjectSetInteger(0,o,OBJPROP_ANCHOR,ANCHOR_LEFT); + ObjectSetInteger(0,o,OBJPROP_BACK,false); + ObjectSetInteger(0,o,OBJPROP_SELECTABLE,false); + ObjectSetInteger(0,o,OBJPROP_HIDDEN,true); + } + +//+------------------------------------------------------------------+ +// etichette a fine linea, nel margine vuoto a destra +void DrawTags(datetime tlast) + { + datetime tfut = tlast + 2*PeriodSeconds(_Period); + Tag("med",tfut,Buff_Median[0],"Mediana",clrGold); + for(int m=0;m<7;m++) + { + double p = ShowMA ? GetBuf(m) : 0.0; + Tag(IntegerToString(m),tfut,p,IntegerToString(gDays[m])+"g",gCol[m]); + } + } + //+------------------------------------------------------------------+ void Lbl(string n,string t,int x,int y,int fs,color c,bool b) {