当前位置: 首页 > 后端技术 > Python

Python量化投资实战教程(三)——A股回测MACD策略

时间:2023-03-26 18:49:27 Python

量化投资系列文章:回测教程——Python量化投资实战教程(一)Python量化投资实战教程(二)——MACD策略(+26.9%)Python量化投资实战教程(三)——A股回测MACD策略Github仓库:https://github.com/Ckend/pythondict-quant上次我们基于简单的MACD策略回测了华证新材的收益率该股票被发现非常有效,回报率为26.9%,但这种策略对其他股票会有如此高的回报吗?我们今天试试看这个策略在不考虑基本面,只考虑技术面的情况下在A股的平均表现。为了回测该策略在A股的平均表现,我们从A股中随机抽取1000只个股,使用MACD策略对其2010年1月1日至今的投资表现进行回测,使用MACD策略。其中1万元为本金,佣金为5/10,000,每次成交100股。最终发现626只个股采用该策略亏损,372只获利,2只个股因数据不足被淘汰。最高盈利84%,最差亏损-34%。盈利超过10%的个股有30只,亏损超过30%的个股有29只。也总结了这30只盈利在10%以上的个股的特点。下面是使用Python和backtrader分析这些股票的详细教程。在公众号后台回复:量化投资3可以获得本文所有代码和数据。本系列文章的github仓库:https://github.com/Ckend/pythondict-quant1。在开始之前,您需要确保您的计算机上已成功安装Python和pip。如果没有,请访问这篇文章:超详细的Python安装指南进行安装。如果使用Python进行数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手-AnacondaWindows环境打开Cmd(开始-运行-CMD),苹果系统环境请打开Terminal(命令+空格输入Terminal),准备开始输入命令来安装依赖。当然,我更推荐你使用VSCode编辑器,将本文代码复制,在编辑器下方的终端中运行命令安装依赖模块。多么惬意的一件事:Python编程的最佳搭档——VSCode详解指南。在终端输入如下命令安装我们需要的依赖模块:pipinstallbacktrader如果看到Successfullyinstalledxxx,则安装成功。2.转换策略的股票数据回测最方便的形式是将股票数据存储在MySQL数据库中,每次回测都从数据库中拉取数据。但是为了让大家方便的复现实验,我们将这些股票的数据以文件的形式存储起来。策略方面,我们不需要做改动,但是需要封装这部分运行策略,用于策略的批量执行:defrun_cerebro(stock_file,result):"""运行策略:paramstock_file:Stockdatafilelocation:paramresult:Backtestresultstoragevariable"""cerebro=bt.Cerebro()cerebro.addstrategy(TestStrategy)#加载数据到模型data=bt.feeds.GenericCSVData(dataname=stock_file,fromdate=datetime.datetime(2010,1,1),todate=datetime.datetime(2020,4,25),dtformat='%Y%m%d',datetime=2,open=3,high=4,low=5,close=6,volume=10,reverse=True)cerebro.adddata(data)#本金10000,每笔交易100股.setcommission(commission=0.0005)#运行策略cerebro.run()#剩余本金money_left=cerebro.broker.getvalue()#获取股票名称stock_name=stock_file.split('\\')[-1].split('.csv')[0]#以百分比形式返回最终收益率result[stock_name]=float(money_left-10000)/10000然后遍历所有股票,运行策略,结果保存在result变量中:files_path='stocks\\'result=[]#遍历所有股票数据forstockinos.listdir(files_path):modpath=os.path.dirname(os.path.abspath(sys.argv[0]))datapath=os.path.join(modpath,files_path+stock)print(datapath)try:run_cerebro(datapath,result)除了异常为e:print(e)最后,我们使用pickle将变量结果保存为文件以供后续分析:f=open('./batch_macd_result.txt','wb')pickle.dump(result,f)f.close()然后,我们可以在不重新运行策略的情况下随意分析这个结果3、结果分析接下来用最简单的方法来分析结果:importpickle#loadthesavedresultsf=open('./batch_macd_result.txt','rb')data=pickle.load(f)f.close()#计算pos=[]neg=[]ten_pos=[]ten_neg=[]forresultindata:res=data[result]ifres>0:pos.append(res)else:neg.append(res)ifres>0.1:ten_pos.append(result)elifres<-0.1:ten_neg.append(result)max_stock=max(data,key=data.get)print(f'收益最高的股票:{max_stock},达到{data[max_stock]}')print(f'正收益数量:{len(pos)},负收益数量:{len(neg)}')print(f'+10%数量:{len(ten_pos)},-10%数量:{len(ten_neg)}')print(f'收益超过10%的股票:{ten_pos}')随机抽取100万只股票,回测结果如下:D:\\CODE\\stock\\backtrader>pythonanalysis.py最高收益为600745.SH,达到0.8413365999999998正收益个数:372,负收益个数:626+10%个数:30、-10%的个数:29只收益超过10%的个股:\['000403.SZ','000858.SZ','002271.SZ','002311.SZ','002475.SZ','002555.SZ','002568.SZ','002605.SZ','002714.SZ','300007.SZ','300136.SZ','300220.SZ','300347.SZ','300476.SZ','300482.SZ','300566.SZ','300601.SZ','300613.SZ','300630.SZ','300725.SZ','600570.SH','600585.SH','600745.SH','601231.SH','601799.SH','603297.SH','603378.SH','603655.SH','603737.SH','603823.SH'\]显然,在不考虑基本面的情况下,策略性不高,不建议使用该策略进行A股的整体回测和交易,但我们可以观察10%以上收益个股的基本面特征。你会发现,使用MACD策略赚取10%以上的股票,除2只股票外,大部分的盈利同比增长都大于0。此外,大部分个股年均盈利同比增速在20%至30%左右,不会有太大波动。因此,MACD策略只有在股票基本面优秀的情况下才能发挥最大的价值。在股票基本面相对较差的情况下,该策略表现非常差,因此对于投机者来说不是一个好的策略,但对价值投资者有一定的参考价值。好了,这就是我们对MACD策略的分析。如果你有进一步的兴趣,记得关注《Python实用书》。我们会每周更新一个量化投资相关的推送。我希望你喜欢它。本文代码和数据请在公众号后台回复:量化投资3下载。这是我们文章的结尾。想要我们今天的Python实战教程,请继续关注我们。如果对您有帮助,请在下方点赞/观看。有什么问题可以在下方评论留言,我们会耐心解答!Python实战宝典不只是收藏欢迎关注公众号:Python实战宝典原文来自Python实战宝典:Python量化投资实战教程(三)——A股回测MACD策略