天天看點

新版MT4基礎架構函數

一、腳本篇

void OnStart()
  {
     printf("Start.");
   }
           

包含腳本的主函數部分,将腳本拖入圖表時自動執行其内部的代碼。

二、EA篇

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
           

初始化函數。将EA拖入圖表時,在點選參數視窗的确認鍵後,自動運作一次該初始化函數内部的代碼。

void OnDeinit(const int reason)
  {
      
  }
           

切換EA圖表周期或産品、更改正在運作的EA的參數、移除正在運作EA或圖表等操作均觸發執行此函數。其中,reason參數傳回的是OnDeinit()函數執行的原因代碼。

EventSetTimer(60);
void OnTimer()
  {
  }
           

定時器功能。首先輸入定時器時間代碼(60代表每60秒),也即間隔多久時間執行一次。執行内容寫入VOnTimer()函數中。

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
  
  }
           

感應使用者在用戶端圖表上的動作,一旦感應到相應動作,就自動執行OnChartEvent()内部的代碼。相應動作通過四個參數定義,id代表相應動作的類型,lparam、dparam、sparam三個參數用于存放所捕獲對象的參數,例如,需要在趨勢線被選中時執行代碼,那麼sparam可以用于存儲趨勢線的名字。

示例:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
    if(id==CHARTEVENT_KEYDOWN)
      {
        if(lparam=='j'|| lparam=='J')
          {
            changetimeframes();
          }
      }
  }
//+------------------------------------------------------------------+
void changetimeframes()
  {
            ENUM_TIMEFRAMES timeframes=PERIOD_CURRENT;
            switch(Period())
              {
                case PERIOD_D1:
                  timeframes=PERIOD_H4; break;
                case PERIOD_H4:
                  timeframes=PERIOD_H1; break;
                case PERIOD_H1:
                  timeframes=PERIOD_M30; break;
                case PERIOD_M30:
                  timeframes=PERIOD_M15; break;
              }
            if(timeframes!=PERIOD_CURRENT)
              {
                ChartSetSymbolPeriod(0,NULL,timeframes);
              }  
  }
           

上面例子中,在加載EA後,當鍵盤按下J鍵時,立刻執行圖表大周期切換到較小周期的操作。

三、名額篇

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   return(rates_total);
  }
           

rates_total:圖表上目前共加載了多少根K線

prev_calculated:計算過的K線有多少根

繼續閱讀