//+------------------------------------------------------------------+
//| MT5_Auto_Audit_Universal.mq5 |
//+------------------------------------------------------------------+
#property strict
input double IntervalHours = 4.0; // 间隔 (支持 3.5)
input int NumBars = 20;
input int DigitsPrint = 2;
input string ServerURL = "http://IP/audit-0121.php";
datetime g_lastRun = 0;
int g_staggerDelayMS = 0;
int OnInit() {
// 错峰逻辑
int sum = 0;
for(int i=0; i<StringLen(_Symbol); i++) sum += StringGetCharacter(_Symbol, i);
g_staggerDelayMS = (sum % 60) * 1000;
EventSetTimer(10);
ExecuteAudit();
return(INIT_SUCCEEDED);
}
void OnTimer() {
if(TimeCurrent() - g_lastRun >= (int)(IntervalHours * 3600)) ExecuteAudit();
}
void ExecuteAudit() {
g_lastRun = TimeCurrent();
ENUM_TIMEFRAMES periods[2];
periods[1] = PERIOD_H4;
periods[0] = (StringFind(_Symbol, "USDJPY") >= 0) ? PERIOD_D1 : PERIOD_W1;
// 1. 构造头部 (包含 PC 时间)
string fullDump = "/audit\n";
fullDump += "TIME_PC: " + TimeToString(TimeLocal(), TIME_DATE|TIME_MINUTES|TIME_SECONDS) + "\n";
fullDump += StringFormat("SYM:%s | %.*f | %.*f | SPD:%d\n",
_Symbol, DigitsPrint, SymbolInfoDouble(_Symbol,SYMBOL_ASK),
DigitsPrint, SymbolInfoDouble(_Symbol,SYMBOL_BID),
(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));
// 2. 构造 K 线数据
for(int p = 0; p < 2; p++) {
MqlRates rates[];
ArraySetAsSeries(rates, true);
if(CopyRates(_Symbol, periods[p], 0, NumBars, rates) <= 0) continue;
string pStr = StringSubstr(EnumToString(periods[p]), 7);
for(int i=0; i<ArraySize(rates); i++) {
string t = (periods[p] >= PERIOD_D1) ? TimeToString(rates[i].time, TIME_DATE) : TimeToString(rates[i].time, TIME_DATE|TIME_MINUTES);
fullDump += StringFormat("%s %02d|%s|O:%.*f H:%.*f L:%.*f C:%.*f\n",
pStr, i, t, DigitsPrint, rates[i].open, DigitsPrint, rates[i].high, DigitsPrint, rates[i].low, DigitsPrint, rates[i].close);
}
}
// 3. 错峰发送
if(g_staggerDelayMS > 0) Sleep(g_staggerDelayMS);
// 4. 发送
string finalURL = ServerURL + "?sym=" + _Symbol;
char post_char[], result_char[];
string result_header;
int strLen = StringLen(fullDump);
ArrayResize(post_char, strLen);
StringToCharArray(fullDump, post_char, 0, strLen, CP_UTF8);
WebRequest("POST", finalURL, NULL, 5000, post_char, result_char, result_header);
}
void OnDeinit(const int r) { EventKillTimer(); }
EA加载到图表上,自动每隔3小时发送一次数据。只需要打开页面,就能看到K线DUMP,可以进行量化分析。


这个逼装的我给82分,剩下的用666的方式打给你!