python实现马丁策略回测3000只股票的实例代码


Posted in Python onJanuary 22, 2021

上一篇文章讲解了如何实现马丁策略,但没有探索其泛化能力,所以这次来尝试回测3000只股票来查看盈利比例。

批量爬取股票数据

这里爬取数据继续使用tushare,根据股票代码来遍历,因为爬取数据需要一定时间,不妨使用多线程来爬取,这里要注意tushare规定每分钟爬取不能超过500次,除非你有很多积分,所以线程数要适当调低。

首先我们生成上证与深证所有股票的代码:

#上证代码
shanghaicode = []
for i in range(600000, 604000, 1):
 shanghaicode.append(str(i))
 
#深证代码
shenzhencode = []
for i in range(1000000, 1005000, 1):
 i = str(i)[1:] 
 shenzhencode.append(i)

然后再定义一个爬取函数,broker则是上一篇文章创建的实例:

def getalldata(code):
  if os.path.exists(datapath + code + '.csv'):
   print(code + 'already existed!')
   return
  metadata = broker.get_stock_pro(code)
  if len(metadata) == 0:
   return
  metadata.to_csv('C:/Users/abc/Desktop/' + code + '.csv',index = False)
  print(code + 'finished!')

导入多线程需要的模块

from concurrent.futures.thread import ThreadPoolExecutor #多线程

遍历所有代码开始爬取,max_workers可适当调整

executor = ThreadPoolExecutor(max_workers=3)
 for datatemp in executor.map(getalldata, shenzhencode):
  pass 
 
 executor = ThreadPoolExecutor(max_workers=3)
 for datatemp in executor.map(getalldata, shanghaicode):
  pass

批量回测股票

数据爬好后则可开始回测了,因为回测是CPU瓶颈运算,所以这里就不使用多线程了,速度差不多。

首先将一只股票的回测程序封装到函数中,回测时间设置为2020年全年,起始资金设置为20万元:

def martinmulti(code):
 broker = backtesting(200000,'20200101', '20201231')
 #获取股票数据
 metadata = pd.read_csv(datapath + code)
 data = np.array(metadata['close'])
 exdata = np.array(metadata['pre_close'])
 everyChange = np.array(metadata['change'])
 date = metadata['trade_date'].values
 everyChange = everyChange/data
 #开始回测
 broker.startbackmartin(data, exdata, everyChange, date)
 dicttemp = {'股票代码': code,'终止现金': broker.cash}
 return dicttemp

遍历股票代码回测并记录终止现金

cashlist = pd.DataFrame(columns= ['股票代码','终止现金'])
for code in datalist:
 datatemp = martinmulti(code)
 cashlist = cashlist.append(datatemp,ignore_index=True)

回测过程如下

python实现马丁策略回测3000只股票的实例代码

接下来看看哪支股票获得了最大利润:

python实现马丁策略回测3000只股票的实例代码

看看平均值

cashlist.mean()
Out[12]: 
终止现金 208279.115166

可以从均值看出马丁策略赚作为一种相对保险的方法赚的不多,当然想要找到一劳永逸的方法是不可能的,并且用平均数不能代表一切,那看看盈利比例如何:

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.style.use('ggplot')
plt.title("盈利分布(万元)")
bins = []
for i in range(10000, 600000, 10000):
 bins.append(i)
plt.hist(cashlist['终止现金'],bins = bins)
plt.axvline(x = cashlist.mean().values,ls="-",c="green")#添加垂直直线

python实现马丁策略回测3000只股票的实例代码

可以看出有折腰的也有翻倍的,且绝大部分集中于20w元旁边,分布图形整体往20万右侧偏移,该策略还有待改进。

到此这篇关于python实现马丁策略回测3000只股票的文章就介绍到这了,更多相关python股票策略回测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
使用Python实现一个栈判断括号是否平衡
Aug 23 Python
python异步存储数据详解
Mar 19 Python
Python进阶之@property动态属性的实现
Apr 01 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Python中包的用法及安装
Feb 11 Python
python破解同事的压缩包密码
Oct 14 Python
python 爬虫爬取京东ps4售卖情况
Dec 18 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 Python
对PyTorch中inplace字段的全面理解
May 22 Python
python实现学员管理系统(面向对象版)
Jun 05 Python
Python爬虫回测股票的实例讲解
Jan 22 #Python
python+selenium实现12306模拟登录的步骤
Jan 21 #Python
python基于爬虫+django,打造个性化API接口
Jan 21 #Python
Python 无限级分类树状结构生成算法的实现
Jan 21 #Python
python 制作网站筛选工具(附源码)
Jan 21 #Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 #Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 #Python
You might like
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
网页中CDATA标记的说明
2010/09/12 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
MySQL最常见的操作语句小结
2015/05/07 Python
python基于http下载视频或音频
2018/06/20 Python
python人民币小写转大写辅助工具
2018/06/20 Python
django-allauth入门学习和使用详解
2019/07/03 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
会计出纳员的自我评价
2014/01/15 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
欢迎标语大全
2014/06/21 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
运动会班级前导词
2015/07/20 职场文书
宣传委员竞选稿
2015/11/19 职场文书
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers