[舉手] MT4之MQL4語法問題

看板ForeignEX (外匯)作者 (☠Busy Life☠)時間6年前 (2019/03/15 16:52), 6年前編輯推噓3(3015)
留言18則, 3人參與, 6年前最新討論串1/1
我目前著手寫的程式 出場問題比較令我困擾一些 目前出場情況有四種 其中兩種沒什麼問題 出場後可以繼續正常開新倉 另兩種出場情況則不太一樣 只要符合條件就會出場且 當日不會再進行任何交易 想問的是 我已寫好當日交易時間的濾網 例如一天只在9~21之間開新部位 而且我把這個時間濾網是放在開新倉指令的開頭 若在這段期間外會用return跳出 至於這個當日某筆止損金額達到一定程度的出場條件 我會用Bool撰寫 若達到條件為True 否則為False 我也想把他放到開新倉指令的開頭 也就是 if (TimeCurrent()<StrToTime("09:00") || TimeCurrent()>StrToTime("21:00") || BuyClose5==True || SellClose5==True) return; 現在第一個問題是當日最大止損 我參考別人的語法寫了兩種最大止損 一個是檢查未平倉交易 達到條件就出場 另一個是檢查已平倉交易 按照這個邏輯 我可以在出場指令那邊結束這個部位 同時會再寫一個Bool是去抓歷史交易資料 第二個問題就是若我依據這個止損條件作為開新倉的標準 他有辦法做為當日有效的指令嗎? 還是說隔天符合開新倉的時間時 他一樣會去檢查是否有最大止損情況發生嗎? 如果是這樣的話 請問我需要怎麼調整才能讓單筆最大止損每日重新計算 避免永遠開不了新倉 囧 我找了很多網站但都沒看到相關討論 用英文搜尋也一樣 所以只好上來問各位前輩了@@ 問題若過於初淺 還請見諒 Bool_BuyClose5() { for(int i=OrdersHistoryTotal()-1,i>=0,i--) { OrderSelect(i, Select_by_POS,MODE_HISTORY); if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic) { if(OrderType()=OP_BUY) && (OrderOpenPrice()-OrderClosePrice()>=0.002)) True Else False } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.200.26.252 ※ 文章網址: https://www.ptt.cc/bbs/ForeignEX/M.1552639926.A.07F.html

03/16 09:19, 6年前 , 1F
意思是你要在止損後,再用這個止損價位作為新倉標準?
03/16 09:19, 1F

03/16 10:16, 6年前 , 2F
就是一旦達到這個止損條件 當天就不再進場 我用bool或
03/16 10:16, 2F

03/16 10:16, 6年前 , 3F
直接加在進場前的if裡都沒辦法順利執行這個濾網…
03/16 10:16, 3F

03/16 10:54, 6年前 , 4F
嘗試看做一個開關,停損後設成 false, 然後做一個newb
03/16 10:54, 4F

03/16 10:54, 6年前 , 5F
ar(1440),當newbar等於true,再把開關賦值true。然
03/16 10:54, 5F

03/16 10:54, 6年前 , 6F
後執行其他程式碼。我不確定是否可行
03/16 10:54, 6F

03/16 10:56, 6年前 , 7F
9點到21點那邊不是應該用&&嗎?
03/16 10:56, 7F

03/16 11:00, 6年前 , 8F
停損變數可以抓今日內歷史平倉損益,加上未平倉損益
03/16 11:00, 8F

03/16 11:06, 6年前 , 9F
其實我不太明白你的問題,你是停損後無法再次開單,
03/16 11:06, 9F

03/16 11:06, 6年前 , 10F
還是再次開單的時候沒有在濾鏡條件內?
03/16 11:06, 10F
我是設了這個停止繼續下單的濾網後 經回測發現符合條件的單子沒有被過濾掉 發生當日連續虧損的時候會一直被停損 還是其實用accountequity或accountbalance也可以呢 用原本的方式換了好多種都沒辦法順利運作…

03/16 11:08, 6年前 , 11F
他應該是停損值沒有重新reset
03/16 11:08, 11F

03/16 11:09, 6年前 , 12F
應該不用再用另一個時間變數判斷是否換日
03/16 11:09, 12F

03/16 11:09, 6年前 , 13F
直接抓今日的資料就好
03/16 11:09, 13F
※ 編輯: ColiColi (175.96.101.245), 03/16/2019 13:30:47

03/16 13:36, 6年前 , 14F
你嘗試一下c大的方法吧。跨TF的newbar在backtest好像
03/16 13:36, 14F

03/16 13:36, 6年前 , 15F
做不到。
03/16 13:36, 15F
我會試試看C大的方法 從當日未實現損益的方式研究看看 謝謝大家 ※ 編輯: ColiColi (175.96.101.245), 03/16/2019 13:40:51

03/16 21:59, 6年前 , 16F
他應該也沒有要跨TF
03/16 21:59, 16F

03/16 22:01, 6年前 , 17F
抓當日用迴圈去累加今日平倉後再加未平倉
03/16 22:01, 17F

03/16 22:03, 6年前 , 18F
這樣比用變數判斷是否跨日再累加損益方便
03/16 22:03, 18F
我最後解決問題了 應該是笨方法吧XD 但我沒輒了 我用void 然後用for(int i=,OrdersHistoryTotal()…) 加上if 條件是 TimeCurrent()<=OrderCloseTime()+36000 但解決一個問題就會繼續碰到下個問題 真心佩服很會寫程式的人~ ※ 編輯: ColiColi (27.147.12.214), 03/18/2019 00:11:16
文章代碼(AID): #1SYsUs1_ (ForeignEX)
文章代碼(AID): #1SYsUs1_ (ForeignEX)