程式交易教學

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

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



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

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

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



運用MQL程式語言顯示移動平均線交易訊號的方法解析

顯示2條MA

在本章內容中,將使用「運用MQL程式語言,在圖表中製作移動平均線的方法」中製作的簡易版程式,並說明顯示2條MA交會的程式製作方法。

參考文章:運用MQL程式語言,在圖表中製作移動平均線的方法

首先將修改MA為2條。

將緩衝區變更為「2」、複製參數,並將第1個MA的結尾添加「0」、第2個添加「1」以便區別。接著為了使參數容易分辨,將製作並分段暫存文字列(MA1、MA2)。

第一個短期MA的週期設定為「5」,另一個長期MA的週期則維持20,並將顏色變更為黃色。

#property indicator_buffers 2

#property indicator_plots 2

//— parameters

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 color CLR0 = clrWhite; // 顏色

input ENUM_LINE_STYLE STYLE0 = STYLE_SOLID; // 線條種類

input int WIDTH0 = 1; // 寬度

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; // 適用價格

input color CLR1 = clrYellow; // 顏色

input ENUM_LINE_STYLE STYLE1 = STYLE_SOLID; // 線條種類

input int WIDTH1 = 1; // 寬度

至於計算所需的每個緩衝區,第1個為「0」、第2個則為「1」。

double MABuffer0[], MABuffer1[];

OnInit函數也準備2條MA,並分別設定為「0」「1」。

SetIndexBuffer(0, MABuffer0);

SetIndexBuffer(1, MABuffer1);

SetIndexStyle (0, DRAW_LINE, STYLE0, WIDTH0, CLR0);

SetIndexStyle (1, DRAW_LINE, STYLE1, WIDTH1, CLR1);

SetIndexLabel(0, “MA1”);

SetIndexLabel(1, “MA2”);

OnCalculate函數也設定為「0」「1」。

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

MABuffer0[i] = iMA(NULL, 0, PERIOD0, SHIFT0, METHOD0, PRICE0, i );

MABuffer1[i] = iMA(NULL, 0, PERIOD1, SHIFT1, METHOD1, PRICE1, i );

以上製作的部分將如以下畫面所示;若於圖表中如此設定,將會週期5的MA(白)以及週期20的MA(黃色)。

MA資料

箭頭訊號的意義

接下來將說明在MA交會處顯示箭頭訊號的方法。由於目的是買進及賣出,因此需新增兩個緩衝區(2→4的改變)。

#property indicator_buffers 4

#property indicator_plots 4

分別設定為「UP」及「DN」。

double UP[], DN[];

為了顯示箭頭,類型設定為「ARROW」、「STYLE」是「SOLID」、寬度(符號的大小)則是「2」。第一個買進符號的顏色為紅色,第二個賣出符號則為藍色,名稱則分別為「Buy」及「Sell」。

在設定箭頭訊號時,必須設定訊號的形狀;此處買進的形狀編碼為向上箭頭「233」、賣出則是向下箭頭「234」。

//— indicator buffers mapping

SetIndexBuffer(0, MABuffer0);

SetIndexBuffer(1, MABuffer1);

SetIndexBuffer(2,UP);

SetIndexBuffer(3,DN);

SetIndexStyle (0, DRAW_LINE, STYLE0, WIDTH0, CLR0);

SetIndexStyle (1, DRAW_LINE, STYLE1, WIDTH1, CLR1);

SetIndexStyle (2, DRAW_ARROW, STYLE_SOLID, 2, clrRed);

SetIndexStyle (3, DRAW_ARROW, STYLE_SOLID, 2, clrDodgerBlue);

SetIndexLabel(0, “MA1”);

SetIndexLabel(1, “MA2”);

SetIndexLabel(2, “Buy”);

SetIndexLabel(3, “Sell”);

SetIndexArrow(2, 233);

SetIndexArrow(3, 234);

另外,如果想確認訊號的形狀,可以啟動選單中的「幫助」→「MQL4相關參考」,並在「wingdings」中搜尋,其中將可一覽各式各樣的符號。

wingdings

箭頭的顯示設定

接下來將製作2條MA交叉的訊號顯示條件。

「若短期MA大於長期MA、但是在前1根K線中,短期仍位於長期之下」;這樣的條件即為黃金交叉。短期MA從下方穿出長期MA時,在低價的部位顯示買進訊號,並在顯示箭頭的條件尚未成立時形成空值。如此即可完成買進訊號。

if (MABuffer0[i] > MABuffer1[i] && MABuffer0[i + 1] <= MABuffer1[i + 1]){

UP[i] = Low[i];

} else {

UP[i] = EMPTY_VALUE;

}

賣出訊號的部分將倒轉不等號,並顯示於高價的位置。

if (MABuffer0[i] < MABuffer1[i] && MABuffer0[i + 1] >= MABuffer1[i + 1]){

DN[i] = High[i];

} else {

DN[i] = EMPTY_VALUE;

}

如此大致完成後即可進行編譯。只要確認圖表,就能辨認MA交會處的買進訊號位於低價處、賣出訊號的箭頭則位於高價處。

MA

原始碼

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

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

//| MA_Cross_Sign_demo.mq4 |

//| Copyright 2020, MetaQuotes Software Corp. |

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

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

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

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

#property version “1.00”

#property strict

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_plots 4

//— parameters

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 color CLR0 = clrWhite; // 顏色

input ENUM_LINE_STYLE STYLE0 = STYLE_SOLID; // 線條種類

input int WIDTH0 = 1; // 寬度

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; // 適用價格

input color CLR1 = clrYellow; // 顏色

input ENUM_LINE_STYLE STYLE1 = STYLE_SOLID; // 線條種類

input int WIDTH1 = 1; // 寬度

//— indicator buffers

double MABuffer0[], MABuffer1[];

double UP[], DN[];

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

//| Custom indicator initialization function |

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

int OnInit()

{

//— indicator buffers mapping

SetIndexBuffer(0, MABuffer0);

SetIndexBuffer(1, MABuffer1);

SetIndexBuffer(2,UP);

SetIndexBuffer(3,DN);

SetIndexStyle (0, DRAW_LINE, STYLE0, WIDTH0, CLR0);

SetIndexStyle (1, DRAW_LINE, STYLE1, WIDTH1, CLR1);

SetIndexStyle (2, DRAW_ARROW, STYLE_SOLID, 2, clrRed);

SetIndexStyle (3, DRAW_ARROW, STYLE_SOLID, 2, clrDodgerBlue);

SetIndexLabel(0, “MA1”);

SetIndexLabel(1, “MA2”);

SetIndexLabel(2, “Buy”);

SetIndexLabel(3, “Sell”);

SetIndexArrow(2, 233);

SetIndexArrow(3, 234);

//—

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–) {

MABuffer0[i] = iMA(NULL, 0, PERIOD0, SHIFT0, METHOD0, PRICE0, i );

MABuffer1[i] = iMA(NULL, 0, PERIOD1, SHIFT1, METHOD1, PRICE1, i );

if (MABuffer0[i] > MABuffer1[i] && MABuffer0[i + 1] <= MABuffer1[i + 1]){

UP[i] = Low[i];

} else {

UP[i] = EMPTY_VALUE;

}

if (MABuffer0[i] < MABuffer1[i] && MABuffer0[i + 1] >= MABuffer1[i + 1]){

DN[i] = High[i];

} else {

DN[i] = EMPTY_VALUE;

}

}

//— 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提供的資金進行交易,獲得高達90%的交易利潤分成。



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

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

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