[Day6] 最佳化均线交叉讯号

在开始今天最佳化的主题之前,先对ma讯号的部分做个修正,把里面dropna的部分注解掉,今天发现後面在比较>0的时候Nan会直接变成False,所以不用担心无效值的问题,而且这样做买卖讯号的长度和开盘价series的长度一致,在回测的时候比较好处理,本来的写法感觉回测结果有些问题,讯号代表第30~40天套用到第1~10天开盘价之类的。
https://ithelp.ithome.com.tw/upload/images/20210906/20141238OFG3W0P9pL.png

然後是回测的时候把最後面的print('failat...)注解掉换成pass,不然会印一堆东西,这东西本来是在实作回测的时候用来确认有没有正常运作的,理论上除了最後一天以外都不会印东西,但在这边留着就会印一堆东西有点多余。除此之外额外回传了retseries,这样後面要分析的时候才有资料可以分析
https://ithelp.ithome.com.tw/upload/images/20210907/20141238a5Ta0b6T50.png

接着开始今天的正题,最佳化,今天新增一个optimizeMA函数,它可以对设定范围内的长均线和短均线周期做遍历,对每一组参数做回测,找到最好的参数组合来对均线交叉策略做最佳化。最底下的部分则是呼叫optimizeMA跟印出他的输出结果。值得一提的是在前面有加上错误检查,如果碰到短均周期>=长均周期就会跳掉,测试下一组参数。
https://ithelp.ithome.com.tw/upload/images/20210906/20141238QBFLsAzWvm.png

以下是最佳化的结果,报酬最高的是长均55,短均48这组参数,报酬率是87%
https://ithelp.ithome.com.tw/upload/images/20210906/20141238ZJXx743kTo.png

看起来还是没有打赢买进并长期持有,但好处是他在2020年股灾的时候大概3月4号就出场了,5月才进场,赔得会比买进并持有少一点,以程序交易界的说法就是最大回落(MDD)比较小。
https://ithelp.ithome.com.tw/upload/images/20210906/20141238EYB1Xb7AL2.png

为了要更进一步比较0050买进持有跟这边的均线交叉,接下来会做报酬率绘图跟计算MDD的部分。除此之外可能会有些过拟合的问题,之後再搭配yahoo的api抓更长的历史资料来处理。


<<:  [Day06] JavaScript - Hoisting 提升

>>:  Day6 CSS 是做什麽用的?

行动应用APP资安篇

针对我们所谓的Mobile Security(移动装置安全、行动装置安全)。 经常会联想到智慧型手机...

[11] [烧瓶里的部落格] 01. 初始化一个 Flask 专案 - 使用工厂模式

後端 side project 就是要 泛舟 部落格啊,不然要干嘛 照官方教学做一个基本的 CRUD...

Day9:[资料结构] Linked-List - 链结串列

Linked List为抽象的资料结构,概念有点像三国的连环船,一艘船(节点)连结着下一艘船(节点...

Day 21 UICollectionView的练习(1/2)

今天我们使用XIB来练习CollectionView,还不知道XIB怎麽使用的,可以看这边: 连结 ...

D-14.Rspec 从零开始写测试(四) 私有方法测不测? && Maximum Product of Three Numbers

继续把model的测试写完 private方法属於不直接测试,利用有用到它们的public方法测试即...