新版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线有多少根


你可能感兴趣的:(MT4)