iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
SideProject30

從零開始的外匯自動程式交易系列 第 17

DAY17 下單與交易請求結構(下)

  • 分享至 

  • xImage
  •  

MqlTradeResult

通常我們在使用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物件變數是否正確下單。並非所有變數都會被填滿。

retcode

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物件中。如果訂單成功下單,則會顯示訂單號碼;如果下單失敗,則會顯示相應的錯誤碼。


上一篇
DAY16 下單與交易請求結構(上)
下一篇
DAY18 建立下單類型與除錯(上)
系列文
從零開始的外匯自動程式交易30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言