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:
co-authored by
Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent
5cee3f06fd
commit
41a2324b0d
@@ -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 InpStart = D'2010.01.01'; // inizio intervallo (se AllHistory=false)
|
||||||
input datetime InpEnd = D'2100.01.01'; // fine intervallo (se AllHistory=false)
|
input datetime InpEnd = D'2100.01.01'; // fine intervallo (se AllHistory=false)
|
||||||
input string InpFileName = ""; // nome file ("" = automatico)
|
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)
|
//--- costanti (stesse 7 MA dell'indicatore)
|
||||||
#define ANCHOR_TF PERIOD_D1
|
#define ANCHOR_TF PERIOD_D1
|
||||||
@@ -138,8 +139,24 @@ void OnStart()
|
|||||||
head += ",bars_to_revert,disc_max_pct";
|
head += ",bars_to_revert,disc_max_pct";
|
||||||
FileWriteString(fh,head+"\r\n");
|
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
|
//--- scansione incroci
|
||||||
long rows=0;
|
long rows=0, brows=0;
|
||||||
for(int i=iStart;i<=iEnd;i++)
|
for(int i=iStart;i<=iEnd;i++)
|
||||||
{
|
{
|
||||||
if(i<KSLOPE+1) continue;
|
if(i<KSLOPE+1) continue;
|
||||||
@@ -165,6 +182,15 @@ void OnStart()
|
|||||||
double atr_pct = atr[i]/price*100.0;
|
double atr_pct = atr[i]/price*100.0;
|
||||||
MqlDateTime dt; TimeToStruct(tm[i],dt);
|
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
|
//--- esito globale: ritorno alla Mediana entro MAXH
|
||||||
int side = (price>med)?1:-1;
|
int side = (price>med)?1:-1;
|
||||||
int b2rev=-1; double discMax=0;
|
int b2rev=-1; double discMax=0;
|
||||||
@@ -178,6 +204,21 @@ void OnStart()
|
|||||||
if(MathAbs(d)>MathAbs(discMax)) discMax=d;
|
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)
|
//--- controllo ogni coppia (a,b)
|
||||||
for(int a=0;a<NSER;a++)
|
for(int a=0;a<NSER;a++)
|
||||||
for(int b=a+1;b<NSER;b++)
|
for(int b=a+1;b<NSER;b++)
|
||||||
@@ -217,13 +258,7 @@ void OnStart()
|
|||||||
row += ","+DoubleToString(ret,5)+","+DoubleToString(mfe,5)+","
|
row += ","+DoubleToString(ret,5)+","+DoubleToString(mfe,5)+","
|
||||||
+DoubleToString(mae,5)+","+IntegerToString(dlab)+","+IntegerToString(rev);
|
+DoubleToString(mae,5)+","+IntegerToString(dlab)+","+IntegerToString(rev);
|
||||||
}
|
}
|
||||||
//--- traiettoria: rendimento cumulato a +1..+MAXH barre
|
row += bpath; // traiettoria forward (uguale per ogni coppia di questa barra)
|
||||||
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 += ","+(b2rev>0?IntegerToString(b2rev):"")+","+DoubleToString(discMax,5);
|
row += ","+(b2rev>0?IntegerToString(b2rev):"")+","+DoubleToString(discMax,5);
|
||||||
FileWriteString(fh,row+"\r\n");
|
FileWriteString(fh,row+"\r\n");
|
||||||
rows++;
|
rows++;
|
||||||
@@ -232,10 +267,12 @@ void OnStart()
|
|||||||
}
|
}
|
||||||
|
|
||||||
FileClose(fh);
|
FileClose(fh);
|
||||||
|
if(fhB!=INVALID_HANDLE) FileClose(fhB);
|
||||||
for(int m=0;m<7;m++) IndicatorRelease(hMA[m]);
|
for(int m=0;m<7;m++) IndicatorRelease(hMA[m]);
|
||||||
IndicatorRelease(hATR);
|
IndicatorRelease(hATR);
|
||||||
Comment("");
|
Comment("");
|
||||||
PrintFormat("PaPP export COMPLETATO: %d incroci -> %s (cartella MQL5\\Files)",(int)rows,fname);
|
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]));
|
Print("Periodo: ",TimeToString(tm[iStart])," -> ",TimeToString(tm[iEnd]));
|
||||||
}
|
}
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
|
|||||||
Reference in New Issue
Block a user