程式交易教學

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

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

限時優惠代碼
在購買挑戰時,輸入"LABS20",即可獲得20%的限時優惠(此優惠截止日期為2024年3月17日)。

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

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



使用File函數來保存交易紀錄的方法

幫助保存數據的函數

在本章節中,將介紹使用File函數保存交易紀錄的方法。File函數恰如其名,是可供操作檔案的函數;其中亦有著各式各樣的種類,可從MQL4幫助檔的內容選單中點擊「File Functions」加以確認。

File Functions

File函數能夠保存半永久數據,並且大多用於此類目的。由於程式的記憶體會在MT4結束時一併消失,因此其可有效運用於長時間保存的領域。另外,也因交易數據會在數個月之後從伺服器中消失,故亦可使用File函數來加以保存。

但是File函數具有條件限制,基本上只能透過MT4畫面上方選單的「文件」→「打開數據文件夾」→「MQL4」→「Files」資料夾中的檔案來進行操作。

開啟CSV檔案寫入數據

本次將製作能把伺服器內數據保存於CSV檔案的工具。

可使用單次執行並結束的程式,故在製作時選擇「草稿」;在創建新文檔的畫面勾選「腳本」並點擊「下一步」,檔案名稱則命名為「FileTest」。

MQL腳本

完成製作新項目之後,從方才MQL相關參考的File函數一覽中,複製可作為參考的編碼;本次使用的是記載於「FileOpen」頁面的下列編碼。將其貼上於「OnStart」函數下方。

ResetLastError();

filehandle=FileOpen(“fractals.csv”,FILE_WRITE|FILE_CSV);

if(filehandle!=INVALID_HANDLE)

{

FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)));

FileClose(filehandle);

Print(“FileOpen OK”);

}

else Print(“Operation FileOpen failed, error “,GetLastError());

接下來,在「filehandle=FileOpen(“fractals.csv”,FILE_WRITE|FILE_CSV);」的「filehandle」前方添加「int」,並將「fractals.csv」變更為「result.csv」;如此進行編譯,並將腳本中的「FileTest」拖曳至圖表上,即可在「Files」資料夾中自動製作名為「result.csv」的CSV檔案。

若開啟此檔案進行確認,即可看見單一窗格中顯示了日期、時間、貨幣對名稱以及時間週期。

將交易數據個別納入方格中

接下來將進行修改,一邊確認過去的交易數據、一邊依照順序將其個別納入方格當中。

首先將使用取得for文體中部位數據的「OrderSelect」函數,並寫入 if文體;如此即可在選擇過去的交易紀錄時進行處理。

for (int i = 0; i <="" p="">

string str = NULL;

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

其次,將以「string」累加計算當時的資訊。第一項為訂單號(OrderTicket)、第二項為交易的貨幣對名稱(OrderSymbol)、第三項為交易的結算時間(OrderCloseTime)。如欲透過CSV檔案納入個別的方格,便須以逗號來區隔每個數據。另外,結算時間能以「TIME_DATE | TIME_SECONDS」來將每秒作為單位。

str = (string)OrderTicket() + “,”;

str += OrderSymbol() +”,”;

str += TimeToString(OrderCloseTime(), TIME_DATE | TIME_SECONDS) + “,”;

其次,可使用「OrderType」來紀錄交易類型為「買進」或「賣出」,OrderType的值,「0」代表買進訂單、「1」代表賣出訂單,所以,如果是「OP_BUY」就代表買進,否則就代表賣出。其後再添加交易的單位數量與損益,最後輸入換行的「\n」;如此即可依照交易順序,將每行數據寫入個別的方格中。

最後使用「FileWriteString」,將寫入數據的編碼記載於檔案範圍中,如此即可完成。

str += (OrderType() == OP_BUY ? “Buy” : “Sell”) + “,”;

str += (string)OrderLots() + “,”;

str += (string)OrderProfit() + “\n”;

FileWriteString(filehandle, str);

如此進行編譯,並將「FileTest」拖曳於圖表上、再更新「result.csv」,即可將交易數據個別納入方格當中。

新增第1行的標題

單憑交易數據可能難以辨認,故可在第1行顯示標題。如欲在第1行顯示「Ticket」「Symbol」「Time」「Type」「Lot」「Profit」,可在for文體之前寫入下列編碼。

string title = “Ticket,Symbol,Time,Type,Lot,Profit\n”;

FileWriteString(filehandle, title);

以此先進行編譯,並將「FileTest」拖曳至圖表、開啟更新過後的「result.csv」,即可在第1行新增標題。以此方式將交易數據寫入CSV檔案中,便能夠簡單地計算損益。

順道一提,將編譯過後的「FileTest」拖曳至圖表時,若CSV檔案仍在開啟中,便可能出現錯誤;因此需特別留意,務必在CSV檔案關閉的狀態下進行拖曳。

原始碼

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

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

//| FileTest.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

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

//| Script program start function |

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

void OnStart()

{

ResetLastError();

int filehandle = FileOpen(“result.csv”, FILE_WRITE | FILE_CSV);

if(filehandle != INVALID_HANDLE) {

// FileWrite(filehandle, TimeCurrent(), Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)));

string title = “Ticket,Symbol,Time,Type,Lot,Profit\n”;

FileWriteString(filehandle, title);

for (int i = 0; i <="" p="">

string str = NULL;

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

str = (string)OrderTicket() + “,”;

str += OrderSymbol() +”,”;

str += TimeToString(OrderCloseTime(), TIME_DATE | TIME_SECONDS) + “,”;

str += (OrderType() == OP_BUY ? “Buy” : “Sell”) + “,”;

str += (string)OrderLots() + “,”;

str += (string)OrderProfit() + “\n”;

FileWriteString(filehandle, str);

}

}

FileClose(filehandle);

Print(“FileOpen OK”);

} else Print(“Operation FileOpen failed, error “, GetLastError());

}

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

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

EA

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

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

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

限時優惠代碼
在購買挑戰時,輸入"LABS20",即可獲得20%的限時優惠(此優惠截止日期為2024年3月17日)。

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

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