文章來源:123财經導航 | william
在上一期,我們認識了交易函數和常量當中的訂單信息獲取方式,這是在一個EA中非常重要的一部分,也是不可缺的一部分。那訂單信息從何而來?比如止盈止損怎麽修改?這就到了今天的學習内容,4個重要的函數:
用于發送新的交易訂單
語法/函數結構:
參數說明:
返回值:
大于0 表示下單成功,-小于0表示下單失敗
實踐:
在這個實例中,我們首先定義一個開倉的手數,使用NormalizeDouble函數對該值進行規範化處理到2位小數的手數值,另外是注釋和魔術數。對于止損和止盈我們留空,如果你需要在開倉時就帶上固定的止盈止損,可以設爲你想要的止損值。止盈止損的計算方式在下一個函數中解讀。
此時我們按照上面學到的函數結構,分别填入對應的參數(11個),這個訂單發送邏輯就創建好了。
我們一起來看下效果!
Damn!!有沒有注意到,這樣會無限下單,顯然是違背正常開單的,那怎麽辦呢?當然是根據你實際的使用,比如産生某個信号時,再使用 OrderSend()函數,也就是對下單的頻率進行限制,不要任由該函數持續性的執行。
用于修改已經存在的訂單屬性,對于挂單,包括止盈止損以及價格和挂單過期時間;對于市場訂單,可以修改其止盈止損。必備條件必須有明确的訂單号,比如我要修改某一個訂單的止損,首先得通過遍曆訂單的方式找到該訂單的單号,該函數才能執行具體操作。
語法:
參數說明:
返回值:
true - 修改成功,false - 修改失敗。
止盈止損的基本邏輯圖解:
下圖爲多單的止盈止損示意圖。止盈顧名思義就是在順着訂單的反向設的值,等價格達到理想盈利價位後自動關閉訂單;反之,止損則是在訂單的後方設置一個不利于訂單發展的價位,以預防造成更多的虧損。對于設置止盈止損的反向,多單和空單正好相反。
而規範化價格的函數NormalizeDouble(),最後通過以給定的止損點位計算,将得到一個标準化的止損/止盈價,因爲單獨用點位來設置盈損是行不通的。這裏給大家普及一個概念如下:
(以tp:300,sl:100計算的盈損示意圖)
實踐:
以下實例同樣是無條件對當前貨币的多單進行止盈止損的設置,設置前使用了幾個判斷條件過濾訂單以滿足要求,也就是隻處理滿足條件的訂單,判斷成立後自動執行。填入參數時,一定要反複确認參數對應位置是否和語法一緻。
功能:用于平倉已經存在的訂單
語法:
參數說明:
返回值:
0 - 平倉失敗,false
1 - 平倉成功,true
實踐:
對于持倉訂單,在沒有設置止盈止損、或者在滿足其他條件的情況下,我們可以使用該函數來進行平倉操作。另外在上一期文章中,我們提到了的反向循環:在平倉的時候,如果使用正向循環遍曆,此時假如有正在開倉的訂單出現,那麽可能導緻平倉不徹底,因爲循環開始的時候是從當第一個訂單開始(排序0),如果有新訂單進入,循環還是會繼續,但新訂單再次把順序【0】刷新爲自己,這就會導緻最後一個訂單被忽略掉,爲了避免這種情況發生,我們使用反向循環遍曆處理平倉。
實例中,我們定義一個時間點作爲平倉條件,達到這個時間,如果一系列條件都吻合,那麽就執行平倉,如果平倉失敗會打印錯誤信息。
功能:用于删除已經存在的挂單
語法:
參數說明:
返回值:
實踐:
對于删除挂單的函數,參數很簡單,用法和平倉相似,隻需要遍曆到訂單号即可删除所有滿足條件的挂單。在示例中,最後一個條件爲if(OrderType()>1),也就是訂單類型大于1,既爲挂單。挂單類型大家可以反複查看文章口頭中的訂單類型介紹圖。大于1的包括3456,自然也就包含了所有挂單類型。如果要對錯誤信息處理,可以參照平倉裏的錯誤判斷信息編寫。
删除后无法恢复
删除后无法恢复