一、腳本篇
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線有多少根