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)是在MetaTrader 4(MT4)和MetaTrader 5(MT5)交易平台中使用的一種資料結構,用於發送交易請求。這個結構包含了有關交易訂單的詳細信息,用於指導交易平台執行特定的交易操作。
以下是此結構能做的事情:
描述交易操作類型: MqlTradeRequest 結構中的 action 欄位用於指定交易操作的類型,例如買入、賣出、掛單等。這告訴交易平台您希望執行哪種類型的交易操作。
指定交易符號: symbol 欄位用於指定您希望在哪個交易符號(如貨幣對、股票、商品等)上執行交易。
設定交易量和價格: 您可以使用 volume 和 price 欄位分別指定交易的數量(手數)和價格。這些值決定了您要以多大的規模和價格執行交易。
設定止損和止盈價格: sl 和 tp 欄位用於設定交易的止損價格和止盈價格。這些價格水平用於管理交易風險和獲利目標。
控制滑點: deviation 欄位允許您設定最大允許的滑點,以控制在市場波動時執行價格可能產生的偏差。
指定訂單類型和填充類型: 使用 type 欄位可以選擇不同類型的訂單,如市價訂單、限價訂單、止損訂單等。type_filling 欄位用於選擇訂單的填充類型,如IOC(立即成交或取消)或FOK(全部或無操作)。
設定訂單有效期: 使用 type_time 和 expiration 欄位可以設定訂單的有效期,確定訂單在一定時間內是否有效。
其他參數: MqlTradeRequest 結構還包括其他參數,如 arrow_color(用於在圖表上顯示的箭頭顏色)、magic(用於識別特定的交易策略的魔術號碼)等。
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]; // 訂單標記
};
用於指定交易請求的操作類型。
接受此變數的值為 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:用於修改已有的交易訂單的參數。這個操作類型允許您更新已有訂單的各種參數,如止損價格、止盈價格、交易量等,而無需取消並重新下單。
用於表示不同類型的訂單。
接受此變數的值為 ENUM_ORDER_TYPE enumeration :
ORDER_BUY:市價買入訂單。
ORDER_SELL:市價賣出訂單。
ORDER_BUY_LIMIT:限價買入訂單,創建一個限價訂單以買入貨幣或金融資產,當市場價格達到或低於指定價格時執行。
ORDER_SELL_LIMIT:限價賣出訂單,創建一個限價訂單以賣出貨幣或金融資產,當市場價格達到或高於指定價格時執行。
ORDER_BUY_STOP:停損買入訂單,創建一個停止訂單以買入貨幣或金融資產,當市場價格達到或高於指定價格時執行。
ORDER_SELL_STOP:停損賣出訂單,創建一個停止訂單以賣出貨幣或金融資產,當市場價格達到或低於指定價格時執行。
用於下單交易的參數,表示訂單的填充類型。填充類型決定了訂單在市場上執行時的行為,以及在無法立即執行訂單時的處理方式。未指定則使用交易伺服器預設值。
接受此變數的值為 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,但訂單會在市場上保留,直到完全成交或手動取消為止。
用於指定訂單的到期類型(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 表示訂單只在下單時立即執行,未成交的部分將被取消。