誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。
運用MQL程式語言顯示多週期的方式解析
顯示其他時間週期的移動平均線
本節文章將說明多週期。多週期能顯示目前圖表時間週期與其他時間週期的計算結果。此處用以修改的檔案是在「運用MQL程式語言在圖表中顯示移動平均線的方法」中製作、並在「運用MQL程式語言製作移動平均線的方法」添加功能的「MA_demo_step2-1」;其原本只能單純顯示移動平均線,而此處將對此進行變更。
參考文章:運用MQL程式語言製作移動平均線的方法
首先將檔案名稱變更為「MTF_MA_demo」進行儲存,並添加設定時間週期的參數;本次將使用列舉型的「ENUM_TIMEFRAMES」,並預設為1小時週期。
input ENUM_TIMEFRAMES TIMEFRAME = PERIOD_H1; // 時間週期接下來,將製作的參數貼上於OnCalculate函數下方的指定時間週期位置。
MABuffer[i] = iMA(NULL, TIMEFRAME, PERIOD, SHIFT, METHOD, PRICE, i );如此進行編譯之後,先安裝在15分鐘圖表上。將此圖表與安裝在1小時圖表上的修改前的「MA_demo_step2-1」進行對照,便會如同下方的畫面所示,上方為1小時圖表、修改前的MA;下方則為15分鐘圖表、修改後的MA。時間週期雖然有所不同,移動平均線的形狀卻相同,由此可知是使用1小時週期的資訊。
修正時間等資訊
在上述的步驟中,完成了更換顯示移動平均線的時間週期。但若如此延續下去,時間資訊將會產生誤差,因此需要進行修正。為了修正K線的位置,此處使用的函數為「iBarShift」。將其匯入於OnCalculate函數旗下的for文法下方,並將iMA函數括弧內的「i」替換成由iBarShift計算的「bar」。for (int i = limit; i >= 0; i–) {
int bar = iBarShift(NULL, TIMEFRAME, Time[i]);
MABuffer[i] = iMA(NULL, TIMEFRAME, PERIOD, SHIFT, METHOD, PRICE, bar );
}
iBarShift函數的設定項目 | |
symbol | 設定貨幣對名稱 |
timeframe | 設定時間週期 |
time | 設定搜尋的時間值 |
exact | 設定在沒有搜尋到指定K線時的回覆敘述 |
由於將顯示貨幣對,因此iBarShift函數的參數設定將使用「NULL」、時間週期則是「TIMEFRAME」。時間的部分,因使用目前圖表中的K線時間,因此設定為Time序列的「i」。
另外一點,當沒有K線存在的狀況下,雖然存在著回覆敘述的相關參數,但此處可維持預設的「false」;在使用預設值的狀況下亦可加以省略。
將此參數設定為「false」之後,在指定的時間K線不存在的狀況下,就會返回最靠近的K線。另一方面,若設定為「true」在指定的時間K線不存在的狀況下,則會返回「-1」。
依照以上的設定進行編譯,就會在15分鐘的圖表上,顯示1小時的移動平均線。
修正最小限度的計算K線數量
顯示移動平均線的多週期外觀已經完成,但由於每次計算都會使用到圖表中所有的K線,因此應使其只計算最小限度的K線數量;如此若使用上一級別時間週期K線的資訊,將可能不足以進行計算。舉例來說,在15分鐘週期的部分,若使用1小時週期的資訊,將可能有4根K線難以確認;為了避免這樣的狀況,必須進行修改以再度計算。首先,在 OnCalculate函數旗下的if文法上方,必須以整數型定義一項「min」,並在顯示1根K線秒數的「PeriodSeconds」括弧中設定時間週期。接下來,將該時間的秒數除以目前顯示的K線時間,得出的數值將作為if文法內的最小限度計算K線數量。將最小限度計算K線數量為1號至0號的「1」變更為「min」即可完成。
int min = PeriodSeconds(TIMEFRAME) / PeriodSeconds();接下來還有一處需要修改;如果設定的時間週期時下一級別的話,便將沒有計算的意義,因此可設定if文法使其不進行計算。
if (limit < min) limit = min;
if (_Period > TIMEFRAME && TIMEFRAME != PERIOD_CURRENT) return -1;「_Period」將顯示目前的時間週期;若其大於TIMEFRAME,便代表計算就此結束。另外,「PERIOD_CURRENT」意指目前顯示中的K線,該數值則為0;若此狀況的條件成立,將會停止進行運作,因此可以予以去除。如此即為完成。
int limit = Bars – IndicatorCounted() – 1;
int min = PeriodSeconds(TIMEFRAME) / PeriodSeconds();
if (limit < min) limit = min;
原始碼
本次製作的原始碼如以下所示。//+——————————————————————+
//| MTF_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 ENUM_TIMEFRAMES TIMEFRAME = PERIOD_H1; // 時間週期
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[])
{
//—
if (_Period > TIMEFRAME && TIMEFRAME != PERIOD_CURRENT) return -1;
int limit = Bars – IndicatorCounted() – 1;
int min = PeriodSeconds(TIMEFRAME) / PeriodSeconds();
if (limit < min) limit = min;
for (int i = limit; i >= 0; i–) {
int bar = iBarShift(NULL, TIMEFRAME, Time[i]);
MABuffer[i] = iMA(NULL, TIMEFRAME, PERIOD, SHIFT, METHOD, PRICE, bar );
}
//— return value of prev_calculated for next call
return rates_total;
}
//+——————————————————————+,
將EA自動程式交易應用於外匯與差價合約交易中
我們以圖文形式詳細介紹有關EA自動程式交易的基本知識,以及在MT4/MT5平台上的安裝、參數設定方法、編碼等等內容。另外,對持有OANDA帳戶的客戶,還可以免費使用我們的獨有EA與指標工具。
誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。