iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
SideProject30

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

DAY16 下單與交易請求結構(上)

  • 分享至 

  • xImage
  •  

OrderSend( )

OrderSend() 是一個常用於MetaTrader 4(MT4)和MetaTrader 5(MT5)交易平台的函數,它用於發送訂單以開啟或關閉金融市場中的頭寸。通常,它用於自定義交易腳本、指標或專家顧問(EA)來自動執行交易策略。

範例:

int ticket; // 用於存儲訂單的唯一標識符

// 設置交易參數
string symbol = "EURUSD"; // 交易工具的符號
ENUM_ORDER_OPERATION cmd = OP_BUY; // 訂單類型(OP_BUY、OP_SELL、OP_BUYLIMIT、OP_SELLLIMIT等)
double volume = 1.0; // 交易量(手數)
double price = SymbolInfoDouble(_Symbol, SYMBOL_BID); // 進場價格,此處使用當前市場賣價
int slippage = 5; // 允許的最大滑點
double stoploss = 1.1950; // 止損價格

// 發送交易訂單
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, 0, 0, clrNONE);
if (ticket < 0) // 檢查訂單是否發送失敗
{
    Print("訂單發送失敗,錯誤代碼:", GetLastError());
}
else
{
    Print("訂單發送成功,訂單號:", ticket);
}

在此範例中,因為在OrderSend()中使用了許多的參數,容易形成混亂,對整體的閱讀性也不佳,還無法針對每個訂單的交易參數做變化,於是我們在使用時會較偏向於使用交易請求結構。

交易請求結構(MqlTradeRequest Structure)

交易請求結構(MqlTradeRequest)是在MetaTrader 4(MT4)和MetaTrader 5(MT5)交易平台中使用的一種資料結構,用於發送交易請求。這個結構包含了有關交易訂單的詳細信息,用於指導交易平台執行特定的交易操作。
以下是此結構能做的事情:

  1. 描述交易操作類型: MqlTradeRequest 結構中的 action 欄位用於指定交易操作的類型,例如買入、賣出、掛單等。這告訴交易平台您希望執行哪種類型的交易操作。

  2. 指定交易符號: symbol 欄位用於指定您希望在哪個交易符號(如貨幣對、股票、商品等)上執行交易。

  3. 設定交易量和價格: 您可以使用 volume 和 price 欄位分別指定交易的數量(手數)和價格。這些值決定了您要以多大的規模和價格執行交易。

  4. 設定止損和止盈價格: sl 和 tp 欄位用於設定交易的止損價格和止盈價格。這些價格水平用於管理交易風險和獲利目標。

  5. 控制滑點: deviation 欄位允許您設定最大允許的滑點,以控制在市場波動時執行價格可能產生的偏差。

  6. 指定訂單類型和填充類型: 使用 type 欄位可以選擇不同類型的訂單,如市價訂單、限價訂單、止損訂單等。type_filling 欄位用於選擇訂單的填充類型,如IOC(立即成交或取消)或FOK(全部或無操作)。

  7. 設定訂單有效期: 使用 type_time 和 expiration 欄位可以設定訂單的有效期,確定訂單在一定時間內是否有效。

  8. 其他參數: MqlTradeRequest 結構還包括其他參數,如 arrow_color(用於在圖表上顯示的箭頭顏色)、magic(用於識別特定的交易策略的魔術號碼)等。

  • 與orderSend關係:使用 MqlTradeRequest 結構來組織和設置訂單參數,然後將該結構傳遞給 OrderSend() 函數來發送訂單請求。

定義

struct MqlTradeRequest
  {
   ENUM_TRADE_REQUEST_ACTIONS action;       // 交易操作類型   必選
   ENUM_ORDER_TYPE type;                    // 訂單類型       必選
   ENUM_ORDER_TYPE_FILLING type_filling;    // 訂單填充類型
   ENUM_ORDER_TIME type_time;               // 訂單有效期類型
   double price;                            // 訂單價格
   double sl;                               // 止損價格 
   double tp;                               // 止盈價格
   double volume;                           // 交易量(手數) 必選 
   uint deviation;                          // 最大允許滑點
   ulong magic;                             // 訂單魔術號碼
   string comment;                          // 訂單注釋
   string expiration;                       // 訂單自定義標簽
   string symbol;                           // 訂單符號       必選
   ulong login;                             // 訂單登錄號碼
   ulong phone;                             // 訂單電話號碼
   ulong email;                             // 訂單郵件地址
   ulong position;                          // 委托魔術號碼
   ulong position_by;                       // 需要覆制的訂單號碼
   color arrow_color;                       // 訂單顏色
   ulong reserved[2];                       // 訂單標記
  };

action操作類型

用於指定交易請求的操作類型。
接受此變數的值為 ENUM_TRADE_REQUEST_ACTIONS enumeration :

  • TRADE_ACTION_BUY:買入操作

  • TRADE_ACTION_SELL:賣出操作。

  • TRADE_ACTION_BUY_LIMIT:限價買入操作,創建一個限價訂單以買入貨幣或金融資產,當市場價格達到或低於指定價格時執行。

  • TRADE_ACTION_SELL_LIMIT:限價賣出操作,創建一個限價訂單以賣出貨幣或金融資產,當市場價格達到或高於指定價格時執行。

  • TRADE_ACTION_BUY_STOP:停止買入操作,創建一個停止訂單以買入貨幣或金融資產,當市場價格達到或高於指定價格時執行。

  • TRADE_ACTION_SELL_STOP:停止賣出操作,創建一個停止訂單以賣出貨幣或金融資產,當市場價格達到或低於指定價格時執行。

  • TRADE_ACTION_BALANCE:資金調整操作,用於進行帳戶內的資金調整。

  • TRADE_ACTION_CREDIT:信用調整操作,用於進行信用操作。

  • TRADE_ACTION_REOPEN:重新開倉操作,重新開啟被關閉的倉位。

  • TRADE_ACTION_DEPOSIT:存款操作,用於將資金存入帳戶。

  • TRADE_ACTION_WITHDRAW:提款操作,用於從帳戶中提取資金。

  • TRADE_ACTION_CLOSE_BY:通過交易關閉操作,用於通過另一筆交易關閉倉位。

  • TRADE_ACTION_MODIFY:用於修改已有的交易訂單的參數。這個操作類型允許您更新已有訂單的各種參數,如止損價格、止盈價格、交易量等,而無需取消並重新下單。

type訂單類型

用於表示不同類型的訂單。
接受此變數的值為 ENUM_ORDER_TYPE enumeration :

  • ORDER_BUY:市價買入訂單。

  • ORDER_SELL:市價賣出訂單。

  • ORDER_BUY_LIMIT:限價買入訂單,創建一個限價訂單以買入貨幣或金融資產,當市場價格達到或低於指定價格時執行。

  • ORDER_SELL_LIMIT:限價賣出訂單,創建一個限價訂單以賣出貨幣或金融資產,當市場價格達到或高於指定價格時執行。

  • ORDER_BUY_STOP:停損買入訂單,創建一個停止訂單以買入貨幣或金融資產,當市場價格達到或高於指定價格時執行。

  • ORDER_SELL_STOP:停損賣出訂單,創建一個停止訂單以賣出貨幣或金融資產,當市場價格達到或低於指定價格時執行。

type_filling下單交易類型

用於下單交易的參數,表示訂單的填充類型。填充類型決定了訂單在市場上執行時的行為,以及在無法立即執行訂單時的處理方式。未指定則使用交易伺服器預設值。
接受此變數的值為 ENUM_ORDER_TYPE_FILLING enumeration :

  • ORDER_FILLING_FOK:FOK 表示"全部或無操作"(Fill or Kill)。如果訂單無法立即以指定的價格全部成交,整個訂單將被取消。

  • ORDER_FILLING_IOC:IOC 表示"立即成交或取消"(Immediate or Cancel)。如果訂單無法立即以指定的價格部分成交,已成交的部分將保留,未成交的部分將被取消。

  • ORDER_FILLING_RETURN:返回未成交部分。這意味著訂單會盡量執行,但未成交的部分將保留,並可以在之後的交易周期內繼續嘗試成交。

  • ORDER_FILLING_PARTIAL:部分填充。這表示訂單會在可執行的條件下部分成交,然後保留未成交的部分。不會取消整個訂單。

  • ORDER_FILLING_FOK_BID:FOK BID 表示"全部或無操作(僅限市價訂單)"。它類似於 FOK,但僅適用於市價訂單,並要求訂單必須在市場上立即全部成交,否則將被取消。

  • ORDER_FILLING_FOK_GTC:FOK GTC 表示"全部或無操作(GTC)"。它類似於 FOK,但訂單會在市場上保留,直到完全成交或手動取消為止。

type_time到期類型預掛單

用於指定訂單的到期類型(order expiration type)的,而不是用於預掛單的。預掛單通常是指限價掛單。可以在 type 中指定訂單類型為 ENUM_ORDER_TYPE.ORDER_BUY_LIMIT(限價買入)或 ENUM_ORDER_TYPE.ORDER_SELL_LIMIT(限價賣出)來創建預掛單。
接受此變數的值為 ENUM_ORDER_TYPE_TIME enumeration :

  • ORDER_TIME_GTC:GTC 表示 "Good Till Cancelled",即訂單將一直有效,直到您手動取消它或訂單被執行。這通常用於限價掛單。

  • ORDER_TIME_DAY:DAY 表示 "Day",即訂單只在當天有效,如果當天未執行,訂單將被自動取消。這通常用於日內交易。

  • ORDER_TIME_SPECIFIED:指定的到期時間,您可以設置一個特定的到期日期和時間,一旦到期,訂單將被取消。

  • ORDER_TIME_SPECIFIED_DAY:指定的到期日期,您可以設置一個特定的到期日期(不包括時間),一旦到期,訂單將被取消。

  • ORDER_TIME_IOC:IOC 表示訂單只在下單時立即執行,未成交的部分將被取消。


上一篇
DAY15 關於EA的基本知識
下一篇
DAY17 下單與交易請求結構(下)
系列文
從零開始的外匯自動程式交易30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言