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