程式交易教學

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

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



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

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

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



運用MQL程式語言製作移動平均線的方法解析

新增參數

在「運用MQL程式語言,在圖表中顯示移動平均線的方法」文章中可製作簡易的MA程式,透過在簡易版上新增功能,使其修改至可被稱為MA的狀態。

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

首先將設定參數;透過此步驟,將能夠變更指標的各種設定。在定義參數的時候,將先嘗試設定MA週期(計算期間),在一開始就輸入「input」。此處的整數型為「int」的「PERIOD」,預設值為「20」。

input int PERIOD = 20; // 週期

另外,如果在input的「PERIOD」旁邊輸入「//」及,就可為參數命名。只要將此「PERIOD」貼上至iMA函數的週期處(前一節文章中製作的簡易版程式),便完成了準備工作。

for (int i = 0; i < Bars; i++) {

MABuffer[i] = iMA(NULL, 0, PERIOD, 0, MODE_SMA, PRICE_CLOSE, i );

}

修改前並無「輸入參數」的標籤,因此可透過編譯修改程式的動作來新增,如此便能任意變更週期數值。

變更週期數值

週期以外也使用相同的步驟來設定

與前述的步驟相同,其他的參數也能設定「SHIFT」(移動)、「MA_METHOD」(MA類別)、「APPLIED PRICE」(適用價格)等項目。另外,「MA_METHOD」等等並非使用int型,而是預先準備於MT4的列舉型(ENUM)。

input int PERIOD = 20; // 週期

input int SHIFT = 0; // 移動

input ENUM_MA_METHOD METHOD = MODE_SMA; // MA類別

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

將其各自製作的定數貼上至iMA函數。

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

MABuffer[i] = iMA(NULL, 0, PERIOD, SHIFT, METHOD, PRICE, i );

}

將此進行編譯後,便可全數顯示。使用列舉型的項目中,並非輸入數值的形式,而是從MT4中的「插入」,在從技術指標中選取趨勢指標「MA」,MA類別中設定Simple、Exponential…等選項。

MA類別

變更顏色與線條種類

除了可設定週期與變更參數之外,顏色與線條種類也能透過修改來加以設定。簡易版程式中是透過「#property」來設定,此處則將嘗試以參數來自由變更。

步驟則如出一轍。「CLR」是顏色、「input LINE_STYLE」是線條種類、「WIDTH」則是寬度。

input color CLR = clrWhite; // 顏色

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

input int WIDTH = 1; // 寬度

此處將以「SetIndexStyle」設定顏色、線條種類、寬度。第一個項目為緩衝區,因此為「0」,類型則是「DRAW_LINE」、風格為「STYLE」、寬度是「WIDTH」,顏色則是「CLR」。

SetIndexStyle (0, DRAW_LINE, STYLE, WIDTH, CLR);

接著在「SetIndexLabel」中,將Index編號設定為「”MA”」,如此便能使用參數來進行設定。

SetIndexLabel(0, “MA”);

透過以上的方式,原本設定顏色等項目的部分將不再需要;不要的部分可使用「/*」及「*/」括號來註解排除。此記號中的內容將不被當作程式,而是單純的文字(註記、註解)。

/*#property indicator_label1 “MA”

#property indicator_type1 DRAW_LINE

#property indicator_color1 clrRed

#property indicator_style1 STYLE_SOLID

#property indicator_width1 1*/

若將至此處為止的階段進行編譯,將可如同下方畫面所示進行修改,並變更顏色、線條種類、寬度等等。

MA參數

變更計算上限值

在簡易版程式的Calculate函數中,每一次都會計算所有的Bars數量;此處將進行修改,藉以減少多餘的計算次數。

將於「limit」中使用「IndicatorCounted」來定義計算的上限值。「IndicatorCounted」可輸出目前所計算的指標數,最初為0,計算結束後則會變成其數值。

int limit = Bars – IndicatorCounted() – 1;

接著將改變計算的方向。從上限開始至0為止,依序朝著越來越小的數值計算。

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

此處從「編號Bars-1」開始,至0號為止進行計算。下一次的「IndicatorCounted」將是當時的Bars條數量,因此只會計算最少的數量。最少的數量將出現小數點,而最低可設定成從1號到0號之間的條列來計算。

一旦伺服器長時間靜止,1號數據的設定可能不甚正確,因此0號條列是改變未確定數值的條列,1號條列則是甫確定的條列。

int limit = Bars – IndicatorCounted() – 1;

if (limit < 1) limit = 1;

本次依照以上的步驟,將能夠從簡易的MA修改為一般的MA。

使用設計器

雖然前述的文章並未提及,但MetaEditor的模板中有一些格式化的問題。例如空格過多或過少等細微的部分都將有所影響。透過「設計器」的功能,將可一次變更這些格式。

設計器位於工具列當中(名稱為「調整原始碼」)、首先可從選單的「工具」→「選項」來進行參數的初始設定。預設的風格為「MetaQuotes」,亦可依照喜好變更風格與空格等插入項目。在以下的畫面範例中,風格設定為「Linux」,並勾選空格相關的選項。

Linux

完成此處的設定之後,只要點選工具列的設計器(調整原始碼),即可修改原始碼的外觀。

原始碼

本次製作的原始碼如下列所示,並已刪除先前註解排除的部分。

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

//| MA_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 1

#property indicator_plots 1

//— parameters

input int PERIOD = 20; // 週期

input int SHIFT = 0; // 變更

input ENUM_MA_METHOD METHOD = MODE_SMA; // MA類別

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

input color CLR = clrWhite; // 顏色

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

input int WIDTH = 1; // 寬度

//— indicator buffers

double MABuffer[];

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

//| Custom indicator initialization function |

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

int OnInit()

{

//— indicator buffers mapping

SetIndexBuffer(0, MABuffer);

SetIndexStyle(0, DRAW_LINE, STYLE, WIDTH, CLR);

SetIndexLabel(0, “MA”);

//—

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

{

MABuffer[i] = iMA(NULL, 0, PERIOD, SHIFT, METHOD, PRICE, 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提供的資金進行交易,獲得高達90%的交易利潤分成。



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

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

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