From 41a2324b0dd908f5fccbcb2a6ff2818ad4e6de3e Mon Sep 17 00:00:00 2001 From: Pietro Giacobazzi Date: Wed, 17 Jun 2026 06:36:24 +0000 Subject: [PATCH] PaPP v2 export: aggiunge file baseline (tutte le barre D1 + traiettoria) per extra-rendimento vs giorno qualunque Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- PaPP v2/PaPP_CrossExport.mq5 | 53 ++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/PaPP v2/PaPP_CrossExport.mq5 b/PaPP v2/PaPP_CrossExport.mq5 index fe95235..3b3d43c 100644 --- a/PaPP v2/PaPP_CrossExport.mq5 +++ b/PaPP v2/PaPP_CrossExport.mq5 @@ -16,6 +16,7 @@ input bool InpAllHistory = true; // true = tutto lo storico D1 input datetime InpStart = D'2010.01.01'; // inizio intervallo (se AllHistory=false) input datetime InpEnd = D'2100.01.01'; // fine intervallo (se AllHistory=false) input string InpFileName = ""; // nome file ("" = automatico) +input bool InpBaseline = true; // crea anche il file baseline (tutte le barre D1) //--- costanti (stesse 7 MA dell'indicatore) #define ANCHOR_TF PERIOD_D1 @@ -138,8 +139,24 @@ void OnStart() head += ",bars_to_revert,disc_max_pct"; FileWriteString(fh,head+"\r\n"); + //--- file baseline (una riga per OGNI barra D1 valida): serve per il confronto + // "extra-rendimento" = incrocio vs giorno qualunque nello stesso regime + int fhB = INVALID_HANDLE; + if(InpBaseline) + { + string bname = "PaPP_bars_"+sym+"_D1.csv"; + fhB = FileOpen(bname,FILE_WRITE|FILE_TXT|FILE_ANSI); + if(fhB==INVALID_HANDLE) Print("FileOpen baseline KO: ",bname," err=",GetLastError()); + else + { + string bh = "time,symbol,price,med,dist_med_pct,cluster_pct,cluster_exp,trend,atr_pct,dow,month,bars_to_revert,disc_max_pct"; + for(int b=1;b<=MAXH;b++) bh += ",cret_"+IntegerToString(b); + FileWriteString(fhB,bh+"\r\n"); + } + } + //--- scansione incroci - long rows=0; + long rows=0, brows=0; for(int i=iStart;i<=iEnd;i++) { if(in-1) bpath += ","; + else bpath += ","+DoubleToString((cl[iB]-cl[i])/cl[i]*100.0,5); + } + //--- esito globale: ritorno alla Mediana entro MAXH int side = (price>med)?1:-1; int b2rev=-1; double discMax=0; @@ -178,6 +204,21 @@ void OnStart() if(MathAbs(d)>MathAbs(discMax)) discMax=d; } + //--- riga baseline (barra qualunque, indipendente dagli incroci) + if(fhB!=INVALID_HANDLE) + { + string br = TimeToString(tm[i],TIME_DATE)+","+sym+"," + +DoubleToString(price,digits)+","+DoubleToString(med,digits)+"," + +DoubleToString(dist_med,5)+","+DoubleToString(cluster,5)+"," + +DoubleToString(cluster_exp,5)+","+IntegerToString(trend)+"," + +DoubleToString(atr_pct,5)+","+IntegerToString(dt.day_of_week)+"," + +IntegerToString(dt.mon)+"," + +(b2rev>0?IntegerToString(b2rev):"")+","+DoubleToString(discMax,5) + +bpath; + FileWriteString(fhB,br+"\r\n"); + brows++; + } + //--- controllo ogni coppia (a,b) for(int a=0;an-1) { row += ","; continue; } - row += ","+DoubleToString((cl[iB]-cl[i])/cl[i]*100.0,5); - } + row += bpath; // traiettoria forward (uguale per ogni coppia di questa barra) row += ","+(b2rev>0?IntegerToString(b2rev):"")+","+DoubleToString(discMax,5); FileWriteString(fh,row+"\r\n"); rows++; @@ -232,10 +267,12 @@ void OnStart() } FileClose(fh); + if(fhB!=INVALID_HANDLE) FileClose(fhB); for(int m=0;m<7;m++) IndicatorRelease(hMA[m]); IndicatorRelease(hATR); Comment(""); PrintFormat("PaPP export COMPLETATO: %d incroci -> %s (cartella MQL5\\Files)",(int)rows,fname); + if(InpBaseline) PrintFormat("Baseline: %d barre -> PaPP_bars_%s_D1.csv",(int)brows,sym); Print("Periodo: ",TimeToString(tm[iStart])," -> ",TimeToString(tm[iEnd])); } //+------------------------------------------------------------------+