Shopping Cart

購物車內沒有任何商品。

MT4 EA下單指令介紹-MT4 EA語法教學(三)

下單是交易不可或缺也是最重要的一環,而掌握好下單語法的使用,必然是程式交易的一大重點。

還沒有交易商帳號,想要免費使用 MT4 ,推薦使用 OANDA 安達,進入外匯市場的首選經紀商完整介紹!

立即訂閱電子報,掌握最新資訊!

    稱呼

    電子郵件

    以下非必填,但若您願意分享,我們將能推送更精準的內容給您

    投資經驗

    是否為理工科背景、工程師或有寫程式的經驗?

    有興趣的主題
    量化交易台股期貨海外期貨虛擬貨幣美股

    有興趣的量化交易軟體/平台
    不清楚MultiChartsTradingViewPythonXQ

    想透過量化交易達成甚麼目的?
    不確定自動交易選股回測投資績效量化自己的投資方法想找現成的策略套用

    還有什麼想詢問的?

    20241111 1920 400
    20241111 978 258

    一、前言

    MQL4 有提供一系列交易與訂單相關的函式,我們開啟幫助文檔可以看到:

    Mt4 101209161710
    Mt4 101209161711

    二、下單語法解釋

    而今天我們著重來講解下單的語法,與其需注意的小眉角。

    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  // 進場箭頭顏色
    );

    傳入參數:

    1. 下單貨幣兌:顧名思義,就是要下單的貨幣兌或是商品,我們可以用內建語法 Symbol() 或是 NULL,來取得當前 EA 掛載的圖表商品的名稱。
    2. 單類型:MT4有提供以下6種訂單類型來做使用,分別是:
    訂單類型 分類 語法 說明
    市價多單 市價單 OP_BUY 以市價進多單,搭配進場價格與滑點,可確保訂單進在可接受的價格範圍內。
    市價空單 OP_SELL 同上,只是方向相反。
    限價多單 掛單 OP_BUYLIMIT 在比市價低的價位掛上一筆多單。
    限價空單 OP_SELLLIMT 在比市價高的價位掛上一筆空單。
    止損多單 OP_BUYSTOP 在比市價高的價位掛上一筆多單。
    止損空單 OP_SELLSTOP 在比市價低的價位掛上一筆空單。
    1. 下單手數:下單的計量單位。
    2. 進場價格:當下市價單時,多單會帶入 Ask 取得當下賣價、空單則帶入 Bid 取得當下買價。
    3. 允許的滑點:這是雙向的滑點,如這裡填 3,則表示接受以進場價為基準,正負 3 點的價格開單。
    4. 停損價格:若填入 0 則表示不設停損。
    5. 停利價格:若填入 0 則表示不設停利。
    6. 訂單備註:預設值為 NULL,意指不填入備註,備註會顯示在下圖位置(點圖放大):
    MT4 EA下單指令介紹-訂單備註
    1. 魔術碼:預設值為 0,可填入 0 到 2147483647 的數字,用於辨識訂單用途或是判斷下單EA。
    2. 掛單期限:預設值為 0,可指定掛單取消時間,填入 0 則表示永不取消。
    3. 進場箭頭顏色:預設值為 clrNONE,意指不顯示箭頭,若有指定顏色則線頭會顯示在 K 線圖表上,顏色對照表可見 官方文檔 (點圖放大)。
    MT4 EA下單指令介紹-進場箭頭顏色

    回傳值:

    若下單成功會回傳訂單編號,若失敗則回傳 -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 保證金不足


    加入LINE社群量化交易討論群」無壓力討論與分享!

    加入Discord 「量化交易討論群」即時獲取實用的資源!

    Write Together 101306261122
    Write Together 101306261121
    Marco
    Marco

    8年經驗法人級EA開發者,已開發過至少百隻EA、腳本、外部套件等相關MT4/MT5程式,期間曾開發過跨交易所/經紀商對沖避險EA、動態權重馬丁策略、多商品網格策略、也專門開發設計各式網站、金流電商等,將程式與交易視為志業,持續精進自己的人。

    文章: 5

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *