mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-07-27 20:47:44 +00:00
refactor: Added static EnsureHTFDataReady and automated OnTimerUpdate helper for MTF suites
This commit is contained in:
@@ -1,18 +1,20 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| DataSync_Tools.mqh |
|
||||
//| Helper for synchronizing Multi-Symbol Multi-TF data. |
|
||||
//| VERSION 1.01: Fixed type conversion warnings (uint). |
|
||||
//| Copyright 2026, xxxxxxxx |
|
||||
//| Copyright 2026, xxxxxxxx|
|
||||
//+------------------------------------------------------------------+
|
||||
#property copyright "Copyright 2026, xxxxxxxx"
|
||||
#property version "1.10" // Added static EnsureHTFDataReady and automated OnTimerUpdate helper for MTF suites
|
||||
|
||||
#ifndef DATA_SYNC_TOOLS_MQH
|
||||
#define DATA_SYNC_TOOLS_MQH
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//| Class CDataSync |
|
||||
//+------------------------------------------------------------------+
|
||||
class CDataSync
|
||||
{
|
||||
public:
|
||||
//--- Ensures that data for Symbol/TF is loaded and up-to-date
|
||||
//--- Ensures that data for Symbol/TF is loaded and up-to-date (Legacy Support)
|
||||
//--- Returns true if success, false if timeout
|
||||
static bool EnsureDataReady(string symbol, ENUM_TIMEFRAMES tf, int bars_needed = 2, uint timeout_ms = 3000)
|
||||
{
|
||||
@@ -24,10 +26,10 @@ public:
|
||||
datetime time_last = (datetime)SeriesInfoInteger(symbol, tf, SERIES_LASTBAR_DATE);
|
||||
|
||||
// 3. Retry loop
|
||||
uint start_tick = GetTickCount(); // Fixed type: uint
|
||||
uint start_tick = GetTickCount();
|
||||
int available_bars = 0;
|
||||
|
||||
while(GetTickCount() - start_tick < timeout_ms) // Comparison is now uint vs uint
|
||||
while(GetTickCount() - start_tick < timeout_ms)
|
||||
{
|
||||
available_bars = Bars(symbol, tf);
|
||||
|
||||
@@ -46,5 +48,32 @@ public:
|
||||
Print(StringFormat("DataSync Timeout: %s on %s. Bars: %d", symbol, EnumToString(tf), available_bars));
|
||||
return false;
|
||||
}
|
||||
|
||||
//--- NEW: Stateless High-Performance HTF Data Ready Checker (Used by MTF indicators)
|
||||
static bool EnsureHTFDataReady(const string symbol, const ENUM_TIMEFRAMES timeframe, const int required_bars)
|
||||
{
|
||||
ResetLastError();
|
||||
if(!SymbolInfoInteger(symbol, SYMBOL_SELECT))
|
||||
{
|
||||
SymbolSelect(symbol, true);
|
||||
}
|
||||
datetime times[];
|
||||
int copied = CopyTime(symbol, timeframe, 0, required_bars, times);
|
||||
return (copied >= required_bars);
|
||||
}
|
||||
|
||||
//--- NEW: Automated MTF Timer-driven Synchronisation & Redraw Daemon
|
||||
static void OnTimerUpdate(const string symbol, const ENUM_TIMEFRAMES timeframe, const int required_bars, bool &data_synced)
|
||||
{
|
||||
if(!data_synced)
|
||||
{
|
||||
if(EnsureHTFDataReady(symbol, timeframe, required_bars))
|
||||
{
|
||||
data_synced = true;
|
||||
ChartRedraw(); // Force MetaTrader 5 to execute OnCalculate immediately
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
#endif // DATA_SYNC_TOOLS_MQH
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
Reference in New Issue
Block a user