Re: [問題] MQL問題請益

作者: rcwang (啊嘻汪)   2019-03-18 01:30:07
嗨! 你好, 來聊聊吧~
1. 程式沒寫好
交易方面的程式碼的確不容易寫,對於初學者來說的確有點不容易。
我覺得就多多發問大家多討論吧!
蠻期待有更多關於交易方面程式或演算法實作細節的討論。
MT4 和 MT5 的主要差異,在 MT5 裡面會傾向用 Class (類別) 去包裝
而在 MT4 會比較傾向 C 的寫法,也就是比較純的函數做包裝
你也可以說 MT5 是 C++ 的寫法,很粗糙的來講
針對這個問題或許你可以貼一小段的交易紀錄或是跑出來的圖,大家一起來研究
看看你的程式有沒有哪裡寫壞
除此之外呢,你可以多閱讀別人寫的程式碼,會對自修又非資訊專長有幫助
看到你用 Evernote 紀錄,所以我猜測你應該不知道 GitHub
在 GitHub (程式碼集中地) 中 MQL4 有一個獨立的標籤
所以你可以透過找這個標籤,找到很多 EA 的原始程式碼來讀讀
https://github.com/topics/mql4
等到更清楚的概念之後,你可以試著到 MT 的論壇或是如 Forex Factory
參與討論,或是看看他們的討論,有時候討論回應就會直接是個 EA
關於你的程式碼更多的細節,我下周有空來看看
不過初步掃過,我覺得你是不是應該可以仿照 MT4 的範例
先把 OnTick 裡面包一個 EntryNewBar 的判斷?
不然每個 Tick 都去做計算,會很崩潰。
只要時間超過,OnTick 會自動 Abort 掉,這發生機率非常低
但是如果對 Order Cmd 操作很頻繁,就會...很危險
盡量避免,我覺得你問題不會出在這個,但強烈建議包 EntryNewBar
2. 一般性問題:大部分的策略,是否允許用小時線跑,卻用日周線的訊號當濾網之類,
若在4-2歷史資料可能不正確情況下。
這可能要看你的需求,我自己的狀況是這樣,券商在瑞士
MT 平台看的時間是券商的時間,所以我可以多Trade 比英國時間再多三小時
如果你的券商也有支持 MT5 的話,你還可以透過 MT5 的函數查詢現在可不可以Trade
所以台灣時間和MT平台沒有影響,原則上通通都是以你券商為主
除非你的券商和你在測試時的券商有很大的落差
例如我不用我的券商,用MT4內建的券商,通常 Spread會變很高,又少三小時資料
如果又不小心 Get 是美國的券商而不是英國的,我還要調夏令時間
更複雜的問題,你應該不會遇到,但可能版眾其他資深開發人員會遇到
就是如果你有外接函式庫(dll),他運行會抓系統的一些資訊的話,就要小心
我的系統伺服器是在倫敦,券商是在瑞士,所以我基本上不敢在dll操作系統的東西
除了基本讀取文件(也盡量限制在 OnInit 完成)
講了啦哩拉雜,所以!
可以的,但是這邊要小心兩點:
1. 在 MT4 你取 buffer[0] 是該 bar 的最新資料
所以一定要取 buffer[1] 才會是上一個bar的完整資訊
我看你 code 有注意到這件事情,應該沒問題
2. 此外buffer[0]的時間可能不會切在整點,例如你跑在小時線
但在回測時你的時間可能會切在 18:01:00 ,而不是切在 18:00:00
所以除非你是跑在 M1 或 M5 然後搭配日周濾網,才要小心
如果是 H1 或 H4 基本上不太會出問題
問題只會是你現在跑測試的券商,會不會是你未來要Trade的券商
3. 寫法
3-1
我的習慣是,除非不到最後關頭,盡量不用到 MT 的東西
所以如果你可以,你應該在每個 bar open 在拿就好
不要每個 tick 都拿,當然以你現在的 code 不會有太大問題
基本上你應該不太可能抓到很精確的 bar close
所以原則上都是在 bar open 做
我的習慣是這樣:
- OnInit()
- OnTick()
- beforeOnBar()
- OnBar()
- afterOnBar()
- OnDeinit()
OnInit 把所有東西都先把基本的數值設置定好
該讀取的東西讀取好
然後 OnTick 函數中,會包含三個函數
分別是 beforeOnBar 和 OnBar 和 afterOnBar
beforeOnBar 裡面放的是每個 Tick 都要做的事情,和 OnBar 比較沒有關係的
例如和時間相關的處理,就可以放在 beforeOnBar
例如我有 TimeFilter 的話,beforeOnBar 我就會判斷是不是不該進場的時間
我就把所有單撤下來,或是恢復回去,這和我 OnBar 交易邏輯無關
OnBar 就是放我的交易邏輯,就是我在這 bar open 我要做什麼事情
一般來說裡面會分成 Entry / Exit / ReEntry 三個段落
也就是先判斷是不是要 Entry ,那就掛單,沒有要 Entry 就判斷要不要
Exit ,如果有 Exit 就判斷要不要 ReEntry 相反方向的單
然後 afterOnBar 就是放可能和我交易有關,但是是每個 bar 都要做的事情
例如移動停損的檢查,損益兩平停損的檢查,這些都要在 Tick Level
一直去確認
給你參考看看,更多細節以後再慢慢聊
3-2
這題我自己回可能有失公允 XD
原則上掛單這邊順利我們是不是什麼事情都不用做
那這樣肯定就繼續的程式碼區塊就沒有意義啦~
比較有意義的是如果失敗你要怎麼處理相對應的 Error
所以防衛性的寫法在這邊是比較重要,當然也可以看有沒有其他人有新想法
4. 回測
嗯... 懶得打, 可能 a 我名字找我之前的文章參考 XD
有空我在慢慢補吧,不介意問題我不段重複補充回復的話
5. 學習
有問題就提出來吧!目前短時間在台灣應該沒有其他方式了
蠻鼓勵你可以參與一些論壇的討論,或是至少多看看,但這樣投報率難衡量
有興趣可以再多討論,版上大家一起多交流細節
作者: yinzhiping (志平)   2019-03-18 19:59:00
感謝RC大,這篇後半段根本是跪著看完的,太神了,我會會消化一下再繼續試誤,並且去這些論壇逛逛,再度跪謝
作者: jiyu520 (不要鯽魚我)   2019-03-18 21:48:00
推RC大!
作者: ColiColi (☠Busy Life☠)   2019-03-18 22:05:00
推 受益良多
作者: aicar (阿泰)   2019-03-20 16:14:00
rc大推!!

Links booklink

Contact Us: admin [ a t ] ucptt.com