prop-rules-monitor/mql5/Include/ChartKit/CkDebug.mqh
Allan Niñal Allan Niñal c806959f05 Alerts on by default; regenerated from the private core
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 17:54:51 +08:00
71 lines
3 KiB
MQL5
//+------------------------------------------------------------------+
//| CkDebug.mqh |
//| Copyright 2026, Allan Niñal |
//| https://www.allanninal.dev/mql5 |
//+------------------------------------------------------------------+
//| Debug log for bug reports, the same in every product. The input |
//| (off by default) stays in the product: |
//| input bool InpDebug = false; // Debug log for bug reports (Experts tab)
//| CkDebugStart(name,version,on,inputs) prints one "DBG start" line |
//| with what a report needs: program, version, terminal build, |
//| symbol, timeframe, digits, tick size and value, spread, account |
//| currency and type (demo/real), the inputs the product passes. |
//| Never the login, name, server, balance or equity: users paste |
//| these lines into a public comment. |
//| CkDbg(msg) prints "DBG <name>: msg" while on, at most |
//| CK_DBG_PER_MIN lines a minute (then one "lines skipped" note), |
//| so a busy indicator cannot flood the Experts tab. |
//+------------------------------------------------------------------+
#ifndef CK_DEBUG_MQH
#define CK_DEBUG_MQH
#define CK_DBG_PER_MIN 120
bool g_ck_dbg=false;
string g_ck_dbg_name="";
datetime g_ck_dbg_min=0;
int g_ck_dbg_n=0,g_ck_dbg_skipped=0;
string CkAccountKind(void)
{
long m=AccountInfoInteger(ACCOUNT_TRADE_MODE);
return(m==ACCOUNT_TRADE_MODE_DEMO ? "demo" : (m==ACCOUNT_TRADE_MODE_CONTEST ? "contest" : "real"));
}
void CkDebugStart(const string name,const string version,const bool on,const string inputs="")
{
g_ck_dbg=on;
g_ck_dbg_name=name;
if(!on)
return;
PrintFormat("DBG start: %s %s, terminal build %d, %s %s, digits %d, tick %s value %s, spread %d pts, %s %s account%s%s",
name,version,(int)TerminalInfoInteger(TERMINAL_BUILD),_Symbol,EnumToString((ENUM_TIMEFRAMES)_Period),_Digits,
DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),_Digits),
DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE),5),(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD),
AccountInfoString(ACCOUNT_CURRENCY),CkAccountKind(),MQLInfoInteger(MQL_TESTER) ? ", Strategy Tester" : "",
inputs!="" ? ", inputs: "+inputs : "");
}
void CkDbg(const string msg)
{
if(!g_ck_dbg)
return;
datetime m=TimeLocal()/60;
if(m!=g_ck_dbg_min)
{
if(g_ck_dbg_skipped>0)
PrintFormat("DBG %s: %d lines skipped (more than %d a minute)",g_ck_dbg_name,g_ck_dbg_skipped,CK_DBG_PER_MIN);
g_ck_dbg_min=m;
g_ck_dbg_n=0;
g_ck_dbg_skipped=0;
}
if(++g_ck_dbg_n>CK_DBG_PER_MIN)
{
g_ck_dbg_skipped++;
return;
}
Print("DBG "+g_ck_dbg_name+": "+msg);
}
#endif
//+------------------------------------------------------------------+