refactor(scripts): Dynamic Headers

This commit is contained in:
Toh4iem9
2026-02-05 12:54:44 +01:00
parent ba5f54c75b
commit 514c41d7dc
+46 -11
View File
@@ -1,12 +1,12 @@
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+
//| Market_Scanner_Pro.mq5 | //| Market_Scanner_Pro.mq5 |
//| QuantScan 4.0 - Fully Modular Architecture | //| QuantScan 3.2 - Dynamic Headers |
//| Copyright 2026, xxxxxxxx | //| Copyright 2026, xxxxxxxx |
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+
#property copyright "Copyright 2026, xxxxxxxx" #property copyright "Copyright 2026, xxxxxxxx"
#property version "4.00" // Refactored to use ALL Calculator Classes #property version "3.40" // Dynamic CSV Header (Timeframes)
#property description "Exports 'QuantScan 3.0' dataset for LLM Analysis." #property description "Exports 'QuantScan 3.0' dataset for LLM Analysis."
#property description "Now uses unified Calculator Engines for 100% consistency." #property description "Includes Relative Strength and Institutional Metrics."
#property script_show_inputs #property script_show_inputs
//--- Include ALL Custom Calculators //--- Include ALL Custom Calculators
@@ -103,7 +103,7 @@ void OnStart()
total_symbols = StringSplit(InpSymbolList, u_sep, symbols); total_symbols = StringSplit(InpSymbolList, u_sep, symbols);
} }
// Benchmark logic... (Same as before) // Benchmark logic
double bench_change_pct = 0.0; double bench_change_pct = 0.0;
if(!SymbolSelect(InpBenchmark, true)) if(!SymbolSelect(InpBenchmark, true))
Print("Warning: Benchmark not found."); Print("Warning: Benchmark not found.");
@@ -116,21 +116,56 @@ void OnStart()
bench_change_pct = ((b_close[0] - b_open[0]) / b_open[0]) * 100.0; bench_change_pct = ((b_close[0] - b_open[0]) / b_open[0]) * 100.0;
} }
// 3. Prepare CSV
string filename = "QuantScan_" + TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES) + ".csv"; string filename = "QuantScan_" + TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES) + ".csv";
StringReplace(filename, ":", ""); StringReplace(filename, ":", "");
StringReplace(filename, " ", "_"); StringReplace(filename, " ", "_");
int file_handle = FileOpen(filename, FILE_CSV|FILE_WRITE|FILE_ANSI, ";"); int file_handle = FileOpen(filename, FILE_CSV|FILE_WRITE|FILE_ANSI, ";");
if(file_handle == INVALID_HANDLE) if(file_handle == INVALID_HANDLE)
{
Print("Error: Cannot write CSV.");
return; return;
}
string time_header = "TIME (" + InpBrokerTimeZone + ")"; // --- 4. Dynamic Header Generation (NEW) ---
FileWrite(file_handle,
time_header, "SYMBOL", "PRICE", // A. Get String representation of Timeframes (e.g., "PERIOD_H1")
"TREND_SCORE", "TREND_QUAL", "ZONE", "REL_STRENGTH", string str_slow = EnumToString(InpTFSlow);
"MOMENTUM", "VOL_QUAL", "SQUEEZE", "Z_SCORE", "VOL_REGIME", "TSI_DIR", string str_fast = EnumToString(InpTFFast);
"REVERSION_PROB", "ABSORPTION"
); // B. Clean up (Remove "PERIOD_" prefix for shorter column names)
StringReplace(str_slow, "PERIOD_", "");
StringReplace(str_fast, "PERIOD_", "");
// C. Construct Header String
string header = "";
// Base Info
header += "TIME (" + InpBrokerTimeZone + ");";
header += "SYMBOL;";
header += "PRICE;";
// Context (Slow TF) Metrics
header += StringFormat("TREND_SCORE_%s;", str_slow);
header += StringFormat("TREND_QUAL_%s;", str_slow);
header += StringFormat("ZONE_%s;", str_slow);
header += StringFormat("REL_STRENGTH_%s;", str_slow);
// Trigger (Fast TF) Metrics
header += StringFormat("MOMENTUM_%s;", str_fast);
header += StringFormat("VOL_QUAL_%s;", str_fast);
header += StringFormat("SQUEEZE_%s;", str_fast);
header += StringFormat("Z_SCORE_%s;", str_fast);
header += StringFormat("VOL_REGIME_%s;", str_fast);
header += StringFormat("TSI_DIR_%s;", str_fast);
// Composite Metrics (Calculated using both)
header += "REVERSION_PROB;";
header += "ABSORPTION";
// D. Write Header
FileWrite(file_handle, header);
PrintFormat("Scanning %d symbols...", total_symbols); PrintFormat("Scanning %d symbols...", total_symbols);