关闭@1x
香港:2025-03-26 23:29:39
  • 紐約:2025-03-26 10:29:39
  • 倫敦:2025-03-26 15:29:39
  • 東京:2025-03-27 00:29:39
  • 悉尼:2025-03-27 01:29:39
  • 香港:2025-03-26 23:29:39
  • 新加坡:2025-03-26 23:29:39
首頁> 資訊> 最新 >正文

【0基礎學mql4 EA編程】第三單元3-2- 交易函數 -訂單創建和管理

William 2024-06-05 18:38:39 關注
學習和使用4個訂單管理函數,了解開倉、止盈止損、平倉過程。

文章來源:123财經導航 | william

在上一期,我們認識了交易函數和常量當中的訂單信息獲取方式,這是在一個EA中非常重要的一部分,也是不可缺的一部分。那訂單信息從何而來?比如止盈止損怎麽修改?這就到了今天的學習内容,4個重要的函數:

  • OrderSend();訂單發送
  • OrderModify();訂單修改
  • OrderDelete();挂單删除
  • OrderClose();持倉單平倉

發送訂單 OrderSend()

用于發送新的交易訂單
語法/函數結構:

參數說明:

  • symbol: 交易品種
  • cmd: 交易指令,可以是以下6種當中的任何一種
  • volume: 交易手數
  • price: 開倉價格
  • slippage: 最大允許的滑點
  • stoploss: 止損價格
  • takeprofit: 止盈價格
  • comment: 訂單備注
  • magic: 訂單魔術号
  • expiration: 挂單有效期
  • arrow_color: 訂單箭頭顔色

返回值:
大于0 表示下單成功,-小于0表示下單失敗

實踐:
在這個實例中,我們首先定義一個開倉的手數,使用NormalizeDouble函數對該值進行規範化處理到2位小數的手數值,另外是注釋和魔術數。對于止損和止盈我們留空,如果你需要在開倉時就帶上固定的止盈止損,可以設爲你想要的止損值。止盈止損的計算方式在下一個函數中解讀。
此時我們按照上面學到的函數結構,分别填入對應的參數(11個),這個訂單發送邏輯就創建好了。

我們一起來看下效果!

Damn!!有沒有注意到,這樣會無限下單,顯然是違背正常開單的,那怎麽辦呢?當然是根據你實際的使用,比如産生某個信号時,再使用 OrderSend()函數,也就是對下單的頻率進行限制,不要任由該函數持續性的執行。


訂單修改 - OrderModify()

用于修改已經存在的訂單屬性,對于挂單,包括止盈止損以及價格和挂單過期時間;對于市場訂單,可以修改其止盈止損。必備條件必須有明确的訂單号,比如我要修改某一個訂單的止損,首先得通過遍曆訂單的方式找到該訂單的單号,該函數才能執行具體操作。
語法:

參數說明:

  • ticket: 要修改的訂單号
  • price: 修改後的開倉價格(市場單不能改)
  • stoploss: 修改後的止損價格
  • takeprofit: 修改後的止盈價格
  • expiration: 修改後的挂單有效期
  • arrow_color: 訂單箭頭顔色(可選)

返回值:
true - 修改成功,false - 修改失敗。

止盈止損的基本邏輯圖解:
下圖爲多單的止盈止損示意圖。止盈顧名思義就是在順着訂單的反向設的值,等價格達到理想盈利價位後自動關閉訂單;反之,止損則是在訂單的後方設置一個不利于訂單發展的價位,以預防造成更多的虧損。對于設置止盈止損的反向,多單和空單正好相反。
而規範化價格的函數NormalizeDouble(),最後通過以給定的止損點位計算,将得到一個标準化的止損/止盈價,因爲單獨用點位來設置盈損是行不通的。這裏給大家普及一個概念如下:

  • 原始盈損點:整數,相當于價格當中的大點價值1,比如1.00528的價格如果直接設置100點将變成101.00528,。
  • 實際止盈價:浮點數,相當于價格的小點價值0.00001計算(根據品種而定),比如1.00528的價格如果設置100點将變成1.00628。

(以tp:300,sl:100計算的盈損示意圖)

實踐:
以下實例同樣是無條件對當前貨币的多單進行止盈止損的設置,設置前使用了幾個判斷條件過濾訂單以滿足要求,也就是隻處理滿足條件的訂單,判斷成立後自動執行。填入參數時,一定要反複确認參數對應位置是否和語法一緻。


關閉訂單 - OrderClose()

功能:用于平倉已經存在的訂單
語法:

參數說明:

  • ticket: 要平倉的訂單号
  • lots: 平倉數量
  • price: 平倉價格
  • slippage: 最大允許的滑點
  • clr: 訂單備注顔色(可選)

返回值:
0 - 平倉失敗,false
1 - 平倉成功,true

實踐:
對于持倉訂單,在沒有設置止盈止損、或者在滿足其他條件的情況下,我們可以使用該函數來進行平倉操作。另外在上一期文章中,我們提到了的反向循環:在平倉的時候,如果使用正向循環遍曆,此時假如有正在開倉的訂單出現,那麽可能導緻平倉不徹底,因爲循環開始的時候是從當第一個訂單開始(排序0),如果有新訂單進入,循環還是會繼續,但新訂單再次把順序【0】刷新爲自己,這就會導緻最後一個訂單被忽略掉,爲了避免這種情況發生,我們使用反向循環遍曆處理平倉。
實例中,我們定義一個時間點作爲平倉條件,達到這個時間,如果一系列條件都吻合,那麽就執行平倉,如果平倉失敗會打印錯誤信息。


删除挂單 - OrderDelete()

功能:用于删除已經存在的挂單
語法:

參數說明:

  • ticket: 要删除的訂單号
  • clr: 訂單删除備注顔色(可選)

返回值:

  • true - 删除成功
  • false - 删除失敗

實踐:

對于删除挂單的函數,參數很簡單,用法和平倉相似,隻需要遍曆到訂單号即可删除所有滿足條件的挂單。在示例中,最後一個條件爲if(OrderType()>1),也就是訂單類型大于1,既爲挂單。挂單類型大家可以反複查看文章口頭中的訂單類型介紹圖。大于1的包括3456,自然也就包含了所有挂單類型。如果要對錯誤信息處理,可以參照平倉裏的錯誤判斷信息編寫。

本章知識點:

  • OrderSend();訂單發送 - 無需循環遍曆即可執行下單
  • OrderModify();訂單修改 - 需要循環遍曆獲取原始訂單号
  • OrderDelete();挂單删除 - 需要循環遍曆獲取原始訂單号
  • OrderClose();持倉單平倉 - 需要循環遍曆獲取原始訂單号
【免責聲明】123财經導航所發布的信息内容僅供交易投資者參考,并不構成投資建議“據此操作,風險自擔”。網站上部分信息内容及圖片來自于網絡/注冊作者/投稿人,版權歸原作者所有,如有侵權,請您與我們聯系關閉,郵箱:938123@qq.com。
hhhhhhh
热门评论
最新评论
还没有评论快来抢沙发吧!
第三方賬号登錄
第三方賬号登錄
第三方賬号登錄
  • *站點:
  • *網址:
  • 類型:
  • 聯系方式:
  • 簡介:

  • RRH123歡迎您的加入!如有問題請添加咨詢管理員【微信号:938123】
  • *類型:
  • *問題:
  • 圖片說明:
  • 聯系方式:

  • RRH123感謝您的反饋!如有問題請添加咨詢管理員【微信号:938123】