• 注册
    • 中文
    • English
  • 注册
  • 工具 工具 关注:66 内容:2

    自动隔X小时读取K线,并发送至网页

  • 查看作者
  • 打赏作者
  • 1
  • 工具
  • Lv.6
    青铜会员
    //+------------------------------------------------------------------+
    //|                                     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的方式打给你!

    回复

    请登录之后再进行评论

    登录

    WordPress后台-外观-小工具 进行配置小工具

  • 发布
  • 做任务
  • 实时动态
  • 偏好设置
  • 帖子间隔 侧栏位置: