- 登入
- 註冊
下單是交易不可或缺也是最重要的一環,而掌握好下單語法的使用,必然是程式交易的一大重點。
還沒有交易商帳號,想要免費使用 MT4 ,推薦使用 OANDA 安達,進入外匯市場的首選經紀商完整介紹!
MQL4 有提供一系列交易與訂單相關的函式,我們開啟幫助文檔可以看到:
而今天我們著重來講解下單的語法,與其需注意的小眉角。
int OrderSend(
string symbol, // 下單貨幣兌
int cmd, // 訂單類型
double volume, // 下單手數
double price, // 進場價格
int slippage, // 允許的滑點
double stoploss, // 停損價格
double takeprofit, // 停利價格
string comment=NULL, // 訂單備註
int magic=0, // 魔術碼
datetime expiration=0, // 掛單期限
color arrow_color=clrNONE // 進場箭頭顏色
);
訂單類型 | 分類 | 語法 | 說明 |
市價多單 | 市價單 | OP_BUY | 以市價進多單,搭配進場價格與滑點,可確保訂單進在可接受的價格範圍內。 |
市價空單 | OP_SELL | 同上,只是方向相反。 | |
限價多單 | 掛單 | OP_BUYLIMIT | 在比市價低的價位掛上一筆多單。 |
限價空單 | OP_SELLLIMT | 在比市價高的價位掛上一筆空單。 | |
止損多單 | OP_BUYSTOP | 在比市價高的價位掛上一筆多單。 | |
止損空單 | OP_SELLSTOP | 在比市價低的價位掛上一筆空單。 |
若下單成功會回傳訂單編號,若失敗則回傳 -1。
我們時常可以看到在重大新聞發布時,價格會瞬間往一邊噴出去,我們就能利用止損單來吃到這一段。
在新聞發布前先將止損單以市價正負 6 點掛 0.1 手,並設 5 點止損 20 點停利,語法如下:
double buy_price = Ask+60*Point;
OrderSend(NULL, OP_BUYSTOP, 0.1, buy_price, 3, buy_price-50*Point,buy_price+200*Point);
double sell_price = Bid-60*Point;
OrderSend(NULL, OP_SELLSTOP, 0.1, sell_price, 3, sell_price+50*Point,sell_price-200*Point);
當然這是一個最簡單的做法,要做新聞交易可能還需要移動停損、掛單期限、開倉時間表等作法,這部分之後有機會我們再來詳談,但上面程式碼其實也足以應付日常應用情景了。
當下單當下價格波動過大或是停利停損與市價過於接近等原因,皆有可能導致下單失敗,我們可以利用判斷下單語法回傳值是否等於 -1 來確認訂單是否成功送出,若送出失敗可透過 GetLastError() 來查看失敗原因,語法如下:
int ticket = OrderSend(NULL, 0.01, ….);
if(ticket == -1) { // 下單失敗
Print(“下單失敗: error code = ”, GetLastError());
}
錯誤碼
|
原因 |
129 | 無效開倉價格 |
130 | 無效的停損或停利價格 |
131 | 開倉手數錯誤 |
133 | 交易被禁止,通常是MT4沒開啟允許自動交易 |
134 | 保證金不足 |