當前位置:外匯行情大全網 - 外匯開戶 - 新的編譯器OnCalculate,我這樣寫,明白了吧?

新的編譯器OnCalculate,我這樣寫,明白了吧?

OnCalculate

OnCalculate()函數只在自定義指標中調用,需要通過計算得出指標值。通常在收到指數計算的交易品種的新訂單號時發生。該指標不需要附在交易品種的價格圖表上。

OnCalculate()函數的返回值是int。有兩種可能的定義。壹個指標中不能有兩個函數版本。

壹個是在單個數據緩沖區中用於計算的索引。例如,自定義移動平均指標。

int on calculate(const int rates _ total,//price[]數組的大小。

Const int prev_calculated,//上壹次調用處理的列。

Const int begin,//有效數據開始位置

const double & amp價格[] //計算數組

);

在price []數組中,可以傳輸時間序列和壹些計算出來的索引緩沖區。ArrayGetAsSeries()函數決定了price []數組的索引方向。為了不依賴默認值,您需要無條件地為工作數組調用ArraySetAsSeries()函數。

在price []數組中,當指標在Parameters選項卡中啟動時,選擇適當的時間序列或指標。因此,您需要在“應用於”字段的下拉列表中指定必要的項目。

選擇時間序列以計算指標

要從其他mql5程序接收自定義指標值,您應該使用iCustom()函數返回到嵌入式指標處理程序。您可以指定適當的price []數組或另壹個指示器處理程序。該參數最終在自定義指標輸入變量列表中傳輸。

示例:

void OnStart()

{

// -

string TERMINAL _ PATH = TERMINAL info string(STATUS _ TERMINAL _ PATH);

int handle _ customMA = iCustom(Symbol(),PERIOD_CURRENT,“自定義移動平均線”,13,0,MODE_EMA,PRICE _ TYPICAL);

if(handle _ customMA & gt;0)

Print("handle_customMA = ",handle _ customMA);

其他

Print("無法打開或不是EX5文件' "+terminal _ path+" \ \ MQL5 \ \ Indicators \ \ "+" Custom Moving average . EX5 ' ");

}

在本例中,最後傳遞的參數是PRICE_TYPICAL value(從ENUM_APPLIED_PRICE count開始),表示可以用獲得的典型價格(高價+低價+平倉)/3建立自定義指標。如果未確定該參數,則根據PRICE_CLOSE的值建立指標,如每列的收盤價。

另壹個例子顯示了根據指定的price []數組的最後壹個參數傳遞指示器處理程序,該數組由函數iCustom()描述。

另壹種形式旨在為所有其他指標計算更多的時間序列。

int on calculate(const int rates _ total,//輸入時間序列大小。

Const int prev_calculated,//上壹次調用處理的列。

常數日期時間和時間。時間[],//時間

const double & ampOpen[],//開盤價

const double & amp高[],//最高價

const double & amp低[],//最低價格

const double & amp收盤[],//收盤價

const long & ampTick_volume[],//訂單交易量

const long & amp成交量[],//實際交易量

const int & amp展開[] //展開

);

開盤價[]、最高價[]、最低價[]和收盤價[]參數由當前明細表的開盤價、最高價、最低價和收盤價數組組成。時間參數[]包括開始時間值的數組,擴展參數[]具有包括擴展歷史的數組(如果為交易安全提供了擴展)。volume[]和tick_volume[]參數分別包括交易和交易量歷史。

確定時間[],開盤價[],最高價[],最低價[],收盤價[],成交量[],成交量[],漲幅[],的指標方向,需要調用ArrayGetAsSeries()函數。如果不想依賴默認值,需要無條件調用工作數組的函數ArraySetAsSeries()。

首先,rates_total參數包括列數,可用於計算指標,與圖表中現有的列數壹致。

要註意OnCalculate()的返回值和第二個輸入參數prev_calculated之間的聯系。調用函數時,prev_calculated參數包括OnCalculate()在最後壹次調用中返回的值。這使得用戶定義的指數可以通過經濟算法來計算,並避免重復計算。

返回rates_total參數的值就足夠了,包括當前調用的函數的列數。如果自從最後壹次調用OnCalculate()函數以來,價格數據已經改變(下載深度歷史或填充歷史空白期),則終端將輸入參數prev_calculated的值設置為零。

註意:如果OnCalculate返回零,則指標值不能顯示在客戶端的數據窗口中。

為了更好地理解,使用下面的代碼啟動指示器是很有用的。

指標示例:

#屬性指示器_圖表_窗口

#屬性指示器_緩沖區1

#房產指標_地塊1

//-圖表的線條

#房產指標_label1 "行"

# property indicator _ type 1 DRAW _ LINE

# property indicator _ color 1 clr dark blue

#屬性indicator _ STYLE 1 STYLE _ SOLID

#房產指標_width1 1

//-指示器緩沖器

雙線緩沖區[];

//+ - +

//|用戶自定義指示器初始化函數|

//+ - +

int OnInit()

{

//-指示器緩沖器的圖紙

SetIndexBuffer(0,LineBuffer,INDICATOR _ DATA);

// -

返回(INIT _ successed);

}

//+ - +

//|自定義指示器重復功能|

//+ - +

int OnCalculate(const int rates _ total,

const int prev_calculated,

常數日期時間和時間。時間[],

const double & amp打開[],

const double & amp高[],

const double & amp低[],

const double & amp關閉[],

const long & amptick_volume[],

const long & amp卷[],

const int & amp傳播[])

{

//-獲取當前交易品種和圖表周期的有效列數。

int bars=Bars(Symbol(),0);

Print("Bars = ",Bars,",rates_total = ",rates_total,",prev_calculated = ",prev _ calculated);

Print("time[0] = ",time[0]," time[rates_total-1] = ",time[rates _ total-1]);

//-返回下壹次調用的prev_calculated值。

return(rates _ total);

}

//+ - +

  • 上一篇:香港付美金到國內要多久
  • 下一篇:興業信用卡取現手續費是多少?手續費標準如下
  • copyright 2024外匯行情大全網