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>
This commit is contained in:
@@ -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(i<KSLOPE+1) continue;
|
||||
@@ -165,6 +182,15 @@ void OnStart()
|
||||
double atr_pct = atr[i]/price*100.0;
|
||||
MqlDateTime dt; TimeToStruct(tm[i],dt);
|
||||
|
||||
//--- traiettoria forward (rendimento cumulato a +1..+MAXH), calcolata una volta per barra
|
||||
string bpath="";
|
||||
for(int b=1;b<=MAXH;b++)
|
||||
{
|
||||
int iB=i+b;
|
||||
if(iB>n-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;a<NSER;a++)
|
||||
for(int b=a+1;b<NSER;b++)
|
||||
@@ -217,13 +258,7 @@ void OnStart()
|
||||
row += ","+DoubleToString(ret,5)+","+DoubleToString(mfe,5)+","
|
||||
+DoubleToString(mae,5)+","+IntegerToString(dlab)+","+IntegerToString(rev);
|
||||
}
|
||||
//--- traiettoria: rendimento cumulato a +1..+MAXH barre
|
||||
for(int b=1;b<=MAXH;b++)
|
||||
{
|
||||
int iB=i+b;
|
||||
if(iB>n-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]));
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
Reference in New Issue
Block a user