量化交易学习(六十二)MACD金叉死叉上涨下跌概率回测
这篇文章的统计结果存在幸存者偏差,MACD金叉死叉的成功率在50%左右
一直以来各种文章教程都在讲MACD金叉是买入信号,死叉是卖出信号,今天我就用量化
的方法来判断一下MACD金叉死叉到底有没有用。
首先来说一下我的回测方法,我用各行业的ETF来代表整个股市,这样能避开个股暴雷的情况。统计所有这些ETF金叉死叉之后一天、二天、三天的涨幅情况,并计算其平均数作为结果。
策略代码部分如下:
首先在初始化函数中定义好MACD指标,定义一些需要用到的变量,并打开一个以股票代码为名的csv文件,用于保存数据:
1 | def __init__(self): |
在next函数中把出现金叉死叉信号后三天的收盘价记录下来:
1 | def next(self): |
在main.py中使用多进程并发执行回测:
导入库:
1 | import multiprocessing |
定义行业ETF列表:
1 | symbols=['SHSE.513030','SHSE.512550','SZSE.159752','SHSE.513080','SHSE.513520', |
定义监测函数,它就是每个进程并发运行时执行的函数,通过fromdate参数可以控制回测的范围:
1 | def monitor(symbol,q): |
在程序执行时,建一个容量为10的并发池,并发对所有的标的进行回测,这段程序其实是在我在每天MACD金叉死叉统计的代码的基础上改的,在这里队列q没有什么具体的作用,只是起一个确保所有进程都正常结束的等待作用:
1 | if __name__=='__main__': |
回测执行完后,会得到一系列csv文件:
文件内容如下:
然后我又写了一个统计程序,用来统计结果:
读取csv结果并存到列表中:
1 | import csv |
统计数据:
1 | # 主程序 |
我分别对近半年、近1年、近2年、近3年、近5年的数据进行了统计,结果如下:
近半年:
近1年:
近2年:
近3年:
近5年:
从这些数据中可以看出,对于行业ETF,MACD金叉死叉的确有用,金叉后确实上涨的概率大,死叉后下跌的概率大,零上金叉涨幅最大,零下死叉跌幅最大。
希望这篇文章能帮助到大家。如果你有任何问题或建议,欢迎留言讨论,私信。感谢你的阅读,觉得不错,点个赞哦!还没有关注我的朋友可以关注 江达小记