Add m_runTimestamp to all export filenames (YYMMDD_HHMMSS) — ogni backtest genera file unici

This commit is contained in:
pietro_giacobazzi
2026-06-14 11:15:15 +02:00
parent 907e100379
commit 713460357e
@@ -171,6 +171,7 @@ private:
double m_riskPerTrade;
double m_riskTotal;
string m_symbol;
string m_runTimestamp;
// --- History cache ---
BarSnapshot history[MAX_HISTORY];
@@ -299,8 +300,12 @@ public:
m_nnHidden = nnHidden;
m_riskPerTrade = riskPerTrade;
m_riskTotal = riskTotal;
m_symbol = _Symbol;
m_neuralNet = NULL;
m_symbol = _Symbol;
datetime rn = TimeLocal();
m_runTimestamp = StringFormat("%04d%02d%02d_%02d%02d%02d",
TimeYear(rn), TimeMonth(rn), TimeDay(rn),
TimeHour(rn), TimeMinute(rn), TimeSeconds(rn));
m_neuralNet = NULL;
m_trainBuffer = NULL;
if(m_useNeural || m_trainMode) {
@@ -673,7 +678,7 @@ UpdateCorrelation(i, openTrades[idx].entryZScores[i], actualReturnZ);
if(m_trainBuffer.Count() % 50 == 0 && m_trainBuffer.Count() >= 20) {
if(m_useNeural) {
TrainNN();
string nnFn = (m_modelFilename != "") ? m_modelFilename : "TR_Agent_NN_v1.dat";
string nnFn = (m_modelFilename != "") ? m_modelFilename : "TR_Agent_NN_v1_" + m_runTimestamp + ".dat";
m_neuralNet.Save(nnFn);
Print(" NN auto-saved to ", nnFn, " after ", m_trainBuffer.Count(), " samples");
}
@@ -1157,17 +1162,17 @@ UpdateHealth(actualReturn);
Print(" ", m_neuralNet.LossHistorySummary());
// CSV dump per debug
m_trainBuffer.SaveCsv("NN_TrainingSamples_" + Symbol() + "_" + EnumToString(Period()) + ".csv");
m_neuralNet.SaveLossCsv("NN_LossHistory_" + Symbol() + "_" + EnumToString(Period()) + ".csv");
m_trainBuffer.SaveCsv("NN_TrainingSamples_" + Symbol() + "_" + EnumToString(Period()) + "_" + m_runTimestamp + ".csv");
m_neuralNet.SaveLossCsv("NN_LossHistory_" + Symbol() + "_" + EnumToString(Period()) + "_" + m_runTimestamp + ".csv");
return loss;
}
bool SaveNNModel() {
if(m_neuralNet == NULL || !m_neuralNet.IsInitialized()) return false;
string fn = (m_modelFilename != "") ? m_modelFilename
: "TR_Agent_NN_" + Symbol() + "_" + EnumToString(Period()) + ".dat";
bool ok = m_neuralNet.Save(fn);
string fn = (m_modelFilename != "") ? m_modelFilename
: "TR_Agent_NN_" + Symbol() + "_" + EnumToString(Period()) + "_" + m_runTimestamp + ".dat";
bool ok = m_neuralNet.Save(fn);
if(ok) Print("NN model saved: ", fn);
else Print("NN model save FAILED: ", fn);
return ok;
@@ -1201,7 +1206,7 @@ UpdateHealth(actualReturn);
// Salva summary CSV con learning stats di ogni agente
void SaveAgentLearningCsv() const {
string fn = "AgentLearning_" + Symbol() + "_" + EnumToString(Period()) + ".csv";
string fn = "AgentLearning_" + Symbol() + "_" + EnumToString(Period()) + "_" + m_runTimestamp + ".csv";
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
if(fh == INVALID_HANDLE) return;
FileWriteString(fh, "agent,bias,bias_n,rho_learn,rho_learn_n,weight\n");
@@ -1221,7 +1226,7 @@ UpdateHealth(actualReturn);
// --- Serializzazione ---
string ModelFilename(string symbol, ENUM_TIMEFRAMES tf) const {
return "MultiAgentTest_" + symbol + "_" + EnumToString(tf) + ".model";
return "MultiAgentTest_" + symbol + "_" + EnumToString(tf) + "_" + m_runTimestamp + ".model";
}
void SaveState(string symbol, ENUM_TIMEFRAMES tf) const {
@@ -1368,7 +1373,7 @@ UpdateHealth(actualReturn);
// Salva CSV con TUTTI i parametri derivati per analisi periodica
void SaveAnalysisCSV(string symbol, ENUM_TIMEFRAMES tf) const {
string fn = "TR_Agent_Analysis_" + symbol + "_" + EnumToString(tf) + ".csv";
string fn = "TR_Agent_Analysis_" + symbol + "_" + EnumToString(tf) + "_" + m_runTimestamp + ".csv";
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
if(fh == INVALID_HANDLE) { Print("SaveAnalysis: errore apertura ", fn); return; }
@@ -1494,7 +1499,7 @@ UpdateHealth(actualReturn);
// ===================== SAVE BAR HISTORY CSV =====================
void SaveBarHistoryCSV(string symbol, ENUM_TIMEFRAMES tf) const {
string fn = "BarHistory_" + symbol + "_" + EnumToString(tf) + ".csv";
string fn = "BarHistory_" + symbol + "_" + EnumToString(tf) + "_" + m_runTimestamp + ".csv";
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
if(fh == INVALID_HANDLE) { Print("BarHistoryCSV: errore apertura ", fn); return; }
@@ -1528,7 +1533,7 @@ UpdateHealth(actualReturn);
// ===================== SAVE TRADE HISTORY CSV =====================
void SaveTradeHistoryCSV(string symbol, ENUM_TIMEFRAMES tf) const {
string fn = "TradeHistory_" + symbol + "_" + EnumToString(tf) + ".csv";
string fn = "TradeHistory_" + symbol + "_" + EnumToString(tf) + "_" + m_runTimestamp + ".csv";
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
if(fh == INVALID_HANDLE) { Print("TradeHistoryCSV: errore apertura ", fn); return; }
@@ -1596,7 +1601,7 @@ UpdateHealth(actualReturn);
// ===================== SAVE AGENT INTERACTION CSV =====================
void SaveAgentInteractionCSV(string symbol, ENUM_TIMEFRAMES tf) const {
string fn = "AgentInteraction_" + symbol + "_" + EnumToString(tf) + ".csv";
string fn = "AgentInteraction_" + symbol + "_" + EnumToString(tf) + "_" + m_runTimestamp + ".csv";
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
if(fh == INVALID_HANDLE) { Print("AgentInteractionCSV: errore apertura ", fn); return; }
@@ -1629,7 +1634,7 @@ UpdateHealth(actualReturn);
// ===================== SAVE DECISION LOG CSV =====================
void SaveDecisionLogCSV(string symbol, ENUM_TIMEFRAMES tf) const {
string fn = "DecisionLog_" + symbol + "_" + EnumToString(tf) + ".csv";
string fn = "DecisionLog_" + symbol + "_" + EnumToString(tf) + "_" + m_runTimestamp + ".csv";
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
if(fh == INVALID_HANDLE) { Print("DecisionLogCSV: errore apertura ", fn); return; }