程式交易教學

誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)

報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達80%的交易利潤分成。



優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。

500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。

豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。



iCustom函數的製作方法與原始碼的介紹說明

製作專用的模板

在本節文章中,將帶來非常便利的iCustom函數。iCustom函數能讀取並利用其他指標程式所輸出的緩衝區資訊;透過這樣的程式,無需建構新的程式即可沿用現有的指標功能。

在說明具體的使用方法之前,將先製作模板。具體步驟如下:

①開啟MT4上面列表「工具」當中的「MQ語言編輯器(E)」 。

②進入MetaEditor後再點擊左上角的「製作新按鈕」、勾選「自訂指標」並按「下一步」。

自訂指標

③此處的檔案名稱設定為「iCustom_test」。

iCustom_test

④「自訂指標程式的事件處理常式」則維持勾選「OnCalculate」的狀態並按「下一步」。

OnCalculate

⑤「繪製自訂性能指標方案」中,點擊「增加」以添加繪圖。

本次的標籤為「custom」、類型為「Arrow」、顏色則是「Magenta紫紅色」,如此點擊「完成」來結束模板。

custom

在OnInit函數當中,要先設定顯示箭頭(符號)的編號。將「PlotIndexSetInteger(0,PLOT_ARROW,159);」修改為以下程式。

SetIndexArrow(0, 181);

本次使用「181號」的符號。至於箭頭的形狀,若從選單的「幫助」→「MQL4幫助檔」

MQL4幫助檔

從中搜尋「wingdings」,即可瀏覽各式各樣的符號。

wingdings

寫入iCustom函數公式

本次將運用iCustom函數,調出在「MQL程式的基礎~在移動平均線的交叉處顯示符號~」段落中製作的「MA_Cross_Sign_demo」。首先要複製在MA_Cross_Sign_demo使用的for文法程式,並貼上於OnCalculate函數的位置。

int limit = Bars – IndicatorCounted() – 1;

if (limit < 1) limit = 1;

for (int i = limit; i >= 0; i–) {

接下來,將帶出適用for文法中iCustom函數結果的緩衝區,並於其中寫入iCustom函數的公式。本次如以下所示進行設定。

int limit = Bars – IndicatorCounted() – 1;

if (limit < 1) limit = 1;

for (int i = limit; i >= 0; i–) {

customBuffer[i] = iCustom(NULL, 0, “MA_Cross_Sign_demo.ex4”, “”, PERIOD0, SHIFT0, METHOD0, PRICE0, clrNONE, 0, 0, “”, “”, PERIOD1, SHIFT1, METHOD1, PRICE1, clrNONE, 0, 0 , 2, i);

}

iCustom函數的設定項目
symbol 設定貨幣對名稱
timeframe 設定時間週期
name 設定欲使用的自定義指標名稱
設定逗號來分段自定義指標的輸入參數表格
mode 以name設定指標的緩衝區(設定顏色的#編號)
shift 設定從第幾根K線開始計算

最初的參數將是貨幣對的名稱;由於會使用目前顯示的貨幣對,因此設定為「NULL」。下一次的時間條列中使用的是「0」,叫出自定義指標的名稱則是前述提及的「MA_Cross_Sign_demo」。

檔案名稱中的副檔名可省略,如欲添加亦可使用「.ex4」。從此處開始將延伸至各個指標的參數,並在最後兩的項目設定緩衝區的編號。由於本次將設定買進符號的編號,因此選擇「2」。最後設定要使用第幾根K線,本次設定為第i根。

如此便大功告成。來比較一下製作的「iCustom_test」與「MA_Cross_Sign_demo」系列圖表。

iCustom函數

在「iCustom_test」系列圖表中,可以看見「MA_Cross_Sign_demo」的買進箭頭符號(紅色箭頭)與同樣位置的紫紅色符號,意即能夠正常運用iCustom函數。

調出並顯示賣出符號

接下來將嘗試調出賣出符號。

如欲確認能否調出賣出符號,可將iCustom函數括弧內的緩衝區編號從買進符號的「2」變更為「3」。

customBuffer[i] = iCustom(NULL, 0, “MA_Cross_Sign_demo.ex4”, “”, PERIOD0, SHIFT0, METHOD0, PRICE0, clrNONE, 0, 0, “”, “”, PERIOD1, SHIFT1, METHOD1, PRICE1, clrNONE, 0, 0 , 3, i);

如此進行編譯、整理圖表系列之後,將會顯示「MA_Cross_Sign_demo」的賣出箭頭符號(藍色箭頭)與同樣位置的紫紅色符號,意即確認可正常運用iCustom函數。

iCustom函數

順道一提,此處iCustom函數的括弧內設定了10個以上的參數,而此數字其實有59個的上限值,一旦超過上限則將無法編譯,並導致後續無法使用,此點務必多加留意。

另外,參數的部分亦可省略;省略的狀況下,將套用叫出指標的部分所設定的預設值。與顯示有關的參數與數值無關,因此可以進行刪除,並作為固定數值來運用。

原始碼

本次製作的原始碼如下列所示。

//+——————————————————————+

//| iCustom_test.mq4 |

//| Copyright 2021, MetaQuotes Software Corp. |

//| https://www.mql5.com |

//+——————————————————————+

#property copyright “Copyright 2021, MetaQuotes Software Corp.”

#property link “https://www.mql5.com”

#property version “1.00”

#property strict

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_plots 1

//— plot custom

#property indicator_label1 “custom”

#property indicator_type1 DRAW_ARROW

#property indicator_color1 clrFuchsia

#property indicator_style1 STYLE_SOLID

#property indicator_width1 3

input string _00 = “”; // [ MA1 ]

input int PERIOD0 = 5; // 週期

input int SHIFT0 = 0; // 移動

input ENUM_MA_METHOD METHOD0 = MODE_SMA; // MA類別

input ENUM_APPLIED_PRICE PRICE0 = PRICE_CLOSE; // 適用價格

input string _10 = “”; //   

input string _11 = “”; // [ MA2 ]

input int PERIOD1 = 20; // 週期

input int SHIFT1 = 0; // 移動

input ENUM_MA_METHOD METHOD1 = MODE_SMA; // MA類別

input ENUM_APPLIED_PRICE PRICE1 = PRICE_CLOSE; // 適用價格

//— indicator buffers

double customBuffer[];

//+——————————————————————+

//| Custom indicator initialization function |

//+——————————————————————+

int OnInit()

{

//— indicator buffers mapping

SetIndexBuffer(0,customBuffer);

//— setting a code from the Wingdings charset as the property of PLOT_ARROW

SetIndexArrow(0, 181);

//—

return(INIT_SUCCEEDED);

}

//+——————————————————————+

//| Custom indicator iteration function |

//+——————————————————————+

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[])

{

//—

int limit = Bars – IndicatorCounted() – 1;

if (limit < 1) limit = 1;

for (int i = limit; i >= 0; i–) {

customBuffer[i] = iCustom(NULL, 0, “MA_Cross_Sign_demo.ex4”, “”, PERIOD0, SHIFT0, METHOD0, PRICE0,

clrNONE, 0, 0, “”, “”, PERIOD1, SHIFT1, METHOD1, PRICE1, clrNONE, 0, 0 , 3, i);

}

//— return value of prev_calculated for next call

return(rates_total);

}

//+——————————————————————+

將EA自動程式交易應用於外匯與差價合約交易中

EA

我們以圖文形式詳細介紹有關EA自動程式交易的基本知識,以及在MT4/MT5平台上的安裝、參數設定方法、編碼等等內容。另外,對持有OANDA帳戶的客戶,還可以免費使用我們的獨有EA與指標工具。

誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)

報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達80%的交易利潤分成。



優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。

500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。

豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。