Add m_runTimestamp to all export filenames (YYMMDD_HHMMSS) — ogni backtest genera file unici
This commit is contained in:
@@ -171,6 +171,7 @@ private:
|
|||||||
double m_riskPerTrade;
|
double m_riskPerTrade;
|
||||||
double m_riskTotal;
|
double m_riskTotal;
|
||||||
string m_symbol;
|
string m_symbol;
|
||||||
|
string m_runTimestamp;
|
||||||
|
|
||||||
// --- History cache ---
|
// --- History cache ---
|
||||||
BarSnapshot history[MAX_HISTORY];
|
BarSnapshot history[MAX_HISTORY];
|
||||||
@@ -299,8 +300,12 @@ public:
|
|||||||
m_nnHidden = nnHidden;
|
m_nnHidden = nnHidden;
|
||||||
m_riskPerTrade = riskPerTrade;
|
m_riskPerTrade = riskPerTrade;
|
||||||
m_riskTotal = riskTotal;
|
m_riskTotal = riskTotal;
|
||||||
m_symbol = _Symbol;
|
m_symbol = _Symbol;
|
||||||
m_neuralNet = NULL;
|
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;
|
m_trainBuffer = NULL;
|
||||||
|
|
||||||
if(m_useNeural || m_trainMode) {
|
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_trainBuffer.Count() % 50 == 0 && m_trainBuffer.Count() >= 20) {
|
||||||
if(m_useNeural) {
|
if(m_useNeural) {
|
||||||
TrainNN();
|
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);
|
m_neuralNet.Save(nnFn);
|
||||||
Print(" NN auto-saved to ", nnFn, " after ", m_trainBuffer.Count(), " samples");
|
Print(" NN auto-saved to ", nnFn, " after ", m_trainBuffer.Count(), " samples");
|
||||||
}
|
}
|
||||||
@@ -1157,17 +1162,17 @@ UpdateHealth(actualReturn);
|
|||||||
Print(" ", m_neuralNet.LossHistorySummary());
|
Print(" ", m_neuralNet.LossHistorySummary());
|
||||||
|
|
||||||
// CSV dump per debug
|
// CSV dump per debug
|
||||||
m_trainBuffer.SaveCsv("NN_TrainingSamples_" + Symbol() + "_" + EnumToString(Period()) + ".csv");
|
m_trainBuffer.SaveCsv("NN_TrainingSamples_" + Symbol() + "_" + EnumToString(Period()) + "_" + m_runTimestamp + ".csv");
|
||||||
m_neuralNet.SaveLossCsv("NN_LossHistory_" + Symbol() + "_" + EnumToString(Period()) + ".csv");
|
m_neuralNet.SaveLossCsv("NN_LossHistory_" + Symbol() + "_" + EnumToString(Period()) + "_" + m_runTimestamp + ".csv");
|
||||||
|
|
||||||
return loss;
|
return loss;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveNNModel() {
|
bool SaveNNModel() {
|
||||||
if(m_neuralNet == NULL || !m_neuralNet.IsInitialized()) return false;
|
if(m_neuralNet == NULL || !m_neuralNet.IsInitialized()) return false;
|
||||||
string fn = (m_modelFilename != "") ? m_modelFilename
|
string fn = (m_modelFilename != "") ? m_modelFilename
|
||||||
: "TR_Agent_NN_" + Symbol() + "_" + EnumToString(Period()) + ".dat";
|
: "TR_Agent_NN_" + Symbol() + "_" + EnumToString(Period()) + "_" + m_runTimestamp + ".dat";
|
||||||
bool ok = m_neuralNet.Save(fn);
|
bool ok = m_neuralNet.Save(fn);
|
||||||
if(ok) Print("NN model saved: ", fn);
|
if(ok) Print("NN model saved: ", fn);
|
||||||
else Print("NN model save FAILED: ", fn);
|
else Print("NN model save FAILED: ", fn);
|
||||||
return ok;
|
return ok;
|
||||||
@@ -1201,7 +1206,7 @@ UpdateHealth(actualReturn);
|
|||||||
|
|
||||||
// Salva summary CSV con learning stats di ogni agente
|
// Salva summary CSV con learning stats di ogni agente
|
||||||
void SaveAgentLearningCsv() const {
|
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);
|
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
|
||||||
if(fh == INVALID_HANDLE) return;
|
if(fh == INVALID_HANDLE) return;
|
||||||
FileWriteString(fh, "agent,bias,bias_n,rho_learn,rho_learn_n,weight\n");
|
FileWriteString(fh, "agent,bias,bias_n,rho_learn,rho_learn_n,weight\n");
|
||||||
@@ -1221,7 +1226,7 @@ UpdateHealth(actualReturn);
|
|||||||
|
|
||||||
// --- Serializzazione ---
|
// --- Serializzazione ---
|
||||||
string ModelFilename(string symbol, ENUM_TIMEFRAMES tf) const {
|
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 {
|
void SaveState(string symbol, ENUM_TIMEFRAMES tf) const {
|
||||||
@@ -1368,7 +1373,7 @@ UpdateHealth(actualReturn);
|
|||||||
|
|
||||||
// Salva CSV con TUTTI i parametri derivati per analisi periodica
|
// Salva CSV con TUTTI i parametri derivati per analisi periodica
|
||||||
void SaveAnalysisCSV(string symbol, ENUM_TIMEFRAMES tf) const {
|
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);
|
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
|
||||||
if(fh == INVALID_HANDLE) { Print("SaveAnalysis: errore apertura ", fn); return; }
|
if(fh == INVALID_HANDLE) { Print("SaveAnalysis: errore apertura ", fn); return; }
|
||||||
|
|
||||||
@@ -1494,7 +1499,7 @@ UpdateHealth(actualReturn);
|
|||||||
|
|
||||||
// ===================== SAVE BAR HISTORY CSV =====================
|
// ===================== SAVE BAR HISTORY CSV =====================
|
||||||
void SaveBarHistoryCSV(string symbol, ENUM_TIMEFRAMES tf) const {
|
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);
|
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
|
||||||
if(fh == INVALID_HANDLE) { Print("BarHistoryCSV: errore apertura ", fn); return; }
|
if(fh == INVALID_HANDLE) { Print("BarHistoryCSV: errore apertura ", fn); return; }
|
||||||
|
|
||||||
@@ -1528,7 +1533,7 @@ UpdateHealth(actualReturn);
|
|||||||
|
|
||||||
// ===================== SAVE TRADE HISTORY CSV =====================
|
// ===================== SAVE TRADE HISTORY CSV =====================
|
||||||
void SaveTradeHistoryCSV(string symbol, ENUM_TIMEFRAMES tf) const {
|
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);
|
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
|
||||||
if(fh == INVALID_HANDLE) { Print("TradeHistoryCSV: errore apertura ", fn); return; }
|
if(fh == INVALID_HANDLE) { Print("TradeHistoryCSV: errore apertura ", fn); return; }
|
||||||
|
|
||||||
@@ -1596,7 +1601,7 @@ UpdateHealth(actualReturn);
|
|||||||
|
|
||||||
// ===================== SAVE AGENT INTERACTION CSV =====================
|
// ===================== SAVE AGENT INTERACTION CSV =====================
|
||||||
void SaveAgentInteractionCSV(string symbol, ENUM_TIMEFRAMES tf) const {
|
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);
|
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
|
||||||
if(fh == INVALID_HANDLE) { Print("AgentInteractionCSV: errore apertura ", fn); return; }
|
if(fh == INVALID_HANDLE) { Print("AgentInteractionCSV: errore apertura ", fn); return; }
|
||||||
|
|
||||||
@@ -1629,7 +1634,7 @@ UpdateHealth(actualReturn);
|
|||||||
|
|
||||||
// ===================== SAVE DECISION LOG CSV =====================
|
// ===================== SAVE DECISION LOG CSV =====================
|
||||||
void SaveDecisionLogCSV(string symbol, ENUM_TIMEFRAMES tf) const {
|
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);
|
int fh = FileOpen(fn, FILE_TXT|FILE_WRITE|FILE_COMMON);
|
||||||
if(fh == INVALID_HANDLE) { Print("DecisionLogCSV: errore apertura ", fn); return; }
|
if(fh == INVALID_HANDLE) { Print("DecisionLogCSV: errore apertura ", fn); return; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user