嗨嗨!
當 Order 無論任何因素, 在 Broker Side (券商方) 發生了變動, 除非我們主動偵測,
基本上不會知道的
關於這個部分, 技術實作上的一些內容可以和你分享
首先, 關於你的程式有兩個部分, 我建議你可能可以改一下寫法
(1) OrdersTotal() == ordersTotal-1
首先, 因為你的單可能一次關到 2 個, 所以這個邏輯可能會沒有觸發, 但是發生你要的
情況
這樣你就會漏, 會很危險, 如果你只是在回測環境想測試一下想法, 沒有問題
但記得上線的話, 這個會很危險, 甚至說你之後在這樣的程式碼上繼續擴展, 可能久遠之
後你忘記了
之後要抓程式的錯誤也會不容易
(2) tickPrice == sl / tp
也是一樣, sl / tp 不一定會剛好在你要的價位, 基本上 90% 應該會是, 畢竟是在
Broker Side 執行
但是還是有可能會滑到, 所以這部分要小心, 這兩個 "==" 都要留意
關於怎麼偵測, 我推薦的做法是, 用 Magic Number, 使用 Magic Number 的有兩派
第一派是傾向同一個 EA 檔案 Magic Number 就固定, 第二個是根據 Order 狀況可以寫
不同的 Magic Number
我是屬於後者, 所以我可能會每次進場會有一個 EA 主序號例如 10000
這個進場的 Magic Number 會是 10001, 10002 依此類推, 如果 10001 關掉, 下個單就
會回來用 10001
方便追蹤現在這個 EA 開了多少個進場
追蹤方式就是每次把 Magic Number 拿回來, 如果找不到, 就代表他已經被觸發 sl / tp
這時候怎麼判斷, 我會去 History Orders 中找, 然後從最後面往前找, 看他的
OrderClosePrice()
如果 OrderClosePrice 是關在 sl 就是 sl / 關在 tp 就是 tp
如果你能取得 OrderType (例如如果是 OP_BUY)你可以考慮用
OrderClosePrice()<=sl 來判斷是否觸發 sl
而不是用等於, 當然這還是有漏洞, 他可能成交在 sl 之上, 但機率非常非常低
要記得一件事情, sl 或 tp 基本上是代表價格到那個地方他幫你用市價單進場平倉
所以不代表在邏輯上一定會停在 sl 和 tp 的價格, 所以如果你想判斷他是 sl 或 tp
然後再用這個邏輯做其他事, 我會建議你把它消化, 改成價格走到這個單進場多少大小,
去觸發邏輯, 而不是依賴 sl tp
和你分享 ~~