程式交易教學

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

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



全面升級——更多功能、更大靈活性!
優化了“固定最大虧損”,“每日虧損限制”等。查看詳情全新「Boost」計劃

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

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



【MQL編程基礎】|保存圖表畫面並以外部應用程式開啟的方法

1.製作新檔並選擇「OnChartEvent」

在本篇文章中,將說明如何將圖表畫面保存為檔案,並使用MT4以外的外部應用程式開啟。首先,將利用最早寫入MT4的ChartScreenShot函數,解釋如何透過鍵盤操作來保存畫面。

在製作新檔案處選擇「自訂指標」,檔案名稱設定為「ExecuteTest」。由於本次將使用鍵盤操作,因此要在「自訂指標程式的事件處理常式」中勾選「OnChartEvent」,並在下一步點擊「完成」即是雛形。

自訂指標

2.確認分配給P鍵的編號

開啟檔案之後,將在OnChartEvent函數內寫入處理步驟。本次使用「CHARTEVENT_KEYDOWN」,並希望在按下鍵盤P鍵時執行處理,因此須先確認分配給P鍵的編號。寫入以下編碼,並試著顯示按下的按鍵編號。

if (id == CHARTEVENT_KEYDOWN) {

Print(sparam);

}
如此進行編譯並設定圖表,便會於按下鍵盤P鍵時,在終端視窗的「expert」標籤中,以訊息顯示「25」。此25即為P鍵所分配的編號。

進行編譯並設定圖表

3.以ChartScreenShot函數保存畫面

接下來,將使用得出的編號,寫入在按下P鍵時會執行處理的程序。本次將使用ChartScreenShot函數來保存圖表的畫面。ChartScreenShot是能夠指定欲保存的圖表ID、檔案名稱、畫面寬度與高度、標準位置,並將圖表畫面擷取保存的函數。畫面會保存於資料檔案的「Files」目錄中。

至於畫面檔案的種類,則會依據檔案名稱的副檔名,以GIF圖像、PNG圖像、BMP圖像等方式保存。此處的圖表ID為「0」、檔案名稱為「chart.png」、尺寸的寬度為「600」、高度為「400」、標準位置則維持預設。

if (id == CHARTEVENT_KEYDOWN) {

if (sparam == 25) {

ChartScreenShot(0, “chart.png”, 600, 400);

}

Print(sparam);

}
如此進行編譯之後,嘗試按下鍵盤的P鍵。若開啟資料檔案的「MQL4」→「Files」,即可見到檔案名稱為「chart.png」的圖表畫像。

MQL4

4.以「import」叫出外部檔案

在上述文章中,使用了P鍵所分配的編號,並以 ChartScreenShot函數保存了圖表畫面。接下來,將利用稱為ShellExecuteW function的Windows API來開啟保存的檔案。

ShellExecuteW function存在於稱為「Shell32.dll」的動態連結程式庫(Dynamic Link Library:DLL)中,因此可從該處調出使用。當調出外部檔案時,需將「import」指定為檔案名稱,並在其中寫入欲使用的函數。在「#property indicator_chart_window」如下寫入。

#import “Shell32.dll”

int ShellExecuteW(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);

#import
順道一提,此函數編碼是複製自微軟開發人員網站,並改變成可用於MT4的形式。

函數編碼

5.以「ShellExecuteW」開啟

接下來,在OnChartEvent函數內的「ChartScreenShot(0, “chart.png”, 600, 400);」之下,叫出製作的ShellExecuteW。ShellExecuteW能夠以備註的型態指定應用程式的動作,由於本次希望開啟檔案,因此使用「open」。接下來需指定欲開啟的檔案名稱,但由於「TERMINAL_DATA_PATH」代表早於MQL4資料夾的路徑,因此需以接續的形式來寫入資料夾名稱與檔案名稱。最後的「1」,則是用來指定以何種狀態來開啟。1代表正常開啟「SHOWNORMAL」,若指定其他的數字,還能夠縮至最小或放至最大。

ShellExecuteW(0, “open”, TerminalInfoString(TERMINAL_DATA_PATH) + “\MQL4\Files\chart.png”, “”, “”, 1);
另外,若使用Windows API,則需先在指標的屬性畫面中,於「常規」標籤勾選「允許導入動態連接庫」。若在未核准使用DLL的狀態下執行,將會導致錯誤出現,故須特別留意。

常規

如此進行編譯並設定圖表。按下鍵盤的P鍵時,便會保存圖表的畫面,並開啟該畫面檔案。

編譯並設定圖表

6.運用ShellExecuteW的使用方式

在上述文章中,完成了以import調出外部檔案、並利用 ShellExecuteW函數來開啟保存的圖表畫像。接下來,將以 ShellExecuteW作為運用模型加以改造,使其能開啟儲存目的地的資料夾、而非檔案。

設定的方式相當簡單,只需將 ShellExecuteW指定的檔案名稱從「”\MQL4\Files\chart.png”」改成「”\MQL4\Files\”」,如此刪除檔案名稱中「chart.png」即可。

ShellExecuteW(0, “open”, TerminalInfoString(TERMINAL_DATA_PATH) + “\MQL4\Files\”, “”, “”, 1);
在此時進行編譯並按下P鍵,即可見到開啟的並非檔案、而是Files資料夾。

Files資料夾

另外,亦能以ShellExecuteW開啟指定的URL網頁。本次的設定,將在按下鍵盤H鍵時,開啟「OANDA(安達)Lab」的網頁。由於H鍵所分配的編號是「35」,因此在「Print(sparam);」前方新增if文體,使sparam在35時執行處理。接著沿用先前寫入的ShellExecuteW編碼,以OANDA(安達)Lab的URL取代地址即可。

if (sparam == 35) {

ShellExecuteW(0, “open”, “https://www.oanda.jp/lab-education/”, “”, “”, 1);

}
在此時進行編譯並按下H鍵,便會啟動瀏覽器並開啟指定的OANDA(安達)Lab網頁。ShellExecuteW屬於相當便於活用的函數,亦可如此開啟相關的檔案、資料夾與URL。

7.原始碼

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

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

//| ExecuteTest.mq4 |

//| Copyright 2022, MetaQuotes Software Corp. |

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

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

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

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

#property version “1.00”

#property strict

#property indicator_chart_window

#import “Shell32.dll”

int ShellExecuteW(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);

#import

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

//| Custom indicator initialization function |

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

int OnInit()

{

//— indicator buffers mapping

//—

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

{

//—

//— return value of prev_calculated for next call

return(rates_total);

}

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

//| ChartEvent function |

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

void OnChartEvent(const int id,

const long &lparam,

const double &dparam,

const string &sparam)

{

//—

if (id == CHARTEVENT_KEYDOWN) {

if (sparam == 25) {

ChartScreenShot(0, “chart.png”, 600, 400);

ShellExecuteW(0, “open”, TerminalInfoString(TERMINAL_DATA_PATH) + “\MQL4\Files\”, “”, “”, 1);

}

if (sparam == 35) {

ShellExecuteW(0, “open”, “https://www.oanda.jp/lab-education/”, “”, “”, 1);

}

Print(sparam);

}

}

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

EA

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

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

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



全面升級——更多功能、更大靈活性!
優化了“固定最大虧損”,“每日虧損限制”等。查看詳情全新「Boost」計劃

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

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