通常我們在使用OrderSend()函數下單後,會用MqlTradeResult物件來插看交易是否成功。
struct MqlTradeResult
{
uint retcode;
ulong deal;
ulong order;
double price;
double volume;
datetime time;
double bid;
double ask;
}
若在實用中宣告MqlTradeResult物件為result,並將其設為OrderSend()的參數,當調用OrderSend()後,會驗證MqlTradeResult物件變數是否正確下單。並非所有變數都會被填滿。
MqlTradeResult中最重要的變數,用於表示交易操作的結果代碼。這個結果代碼是一個整數值,它提供了有關交易操作成功或失敗的信息以及失敗的原因。
retcode 的值可以有不同的含義,具體取決於交易操作的不同情況。交易者通常可以通過檢查 retcode 的值來確定交易操作的結果,並根據情況進行後續處理,例如處理錯誤、記錄交易結果或調整策略。
詳細返回碼可以從這查看:
https://www.mql5.com/en/docs/constants/errorswarnings/enum_trade_return_codes
最常見的返回碼是10008和10009,為交易成功訊息。
我們可以寫一段程式碼來輸出是否成交的訊息與顯示返回碼:
OrderSend(request,result);
if(result.retcode == TRADE_RETCODE_DONE || result.retcode == TRADE_RETCODE+PLACED){
Print("Succeed";)
}
else{
Print("ERROR CODE",result.retcode)
}
若要確認訂單或排出失敗交易,就需要使用其他物件變數,像是可以在剛剛程式碼後再加一段Print:
Print(result.retcode, result.volume, result.price, result.bid, result.ask);
最後我們來看點交易請求結構運用在下市價單上
// 創建一個 MqlTradeRequest 對象來描述市價訂單
MqlTradeRequest request = {0};
request.action = TRADE_ACTION_DEAL;
request.type = ORDER_BUY;
request.volume = 1.0;
request.symbol = "EURUSD";
request.deviation = 10;
// 使用 OrderSend 函数發送市價訂單請求
MqlTradeResult result = {0};
if (OrderSend(request, result) == true) {
Print("市價訂單已成功下單,訂單號碼:", result.deal);
} else {
Print("下單失敗,錯誤碼:", GetLastError());
}
解析:
MqlTradeRequest request = {0};
創建一個名為request的MqlTradeRequest結構的物件,並將其所有成員初始化為零。這個物件將被用來描述市價訂單的參數。
request.action = TRADE_ACTION_DEAL;
設定request物件的action成員為TRADE_ACTION_DEAL,這表示要執行市價訂單。
request.type = ORDER_BUY;
設定request物件的type成員為ORDER_BUY,表示這是一個買入市價訂單。
request.volume = 1.0;
設定request物件的volume成員為1.0,表示交易量為1單位。
request.symbol = "EURUSD";
設定request物件的symbol成員為"EURUSD",這是交易的符號或交易品種。
request.deviation = 10;
設定request物件的deviation成員為10,這是可選的,表示允許的價格偏差,即在執行市價訂單時允許的價格變動範圍。
使用OrderSend函數發送市價訂單請求,並將結果存儲在result物件中。如果訂單成功下單,則會顯示訂單號碼;如果下單失敗,則會顯示相應的錯誤碼。