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 相关文章推荐
Python中decorator使用实例
Apr 14 Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
Python终端输出彩色字符方法详解
Feb 11 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
Python用户自定义异常的实现
Dec 25 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
python中time包实例详解
Feb 02 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
学习使用curl采集curl使用方法
2012/01/11 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
ThinkPHP模型详解
2015/07/27 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
理解Javascript闭包
2013/11/01 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
JS中的==运算: [''] == false —>true
2016/07/24 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
Vue核心概念Action的总结
2019/01/18 Javascript
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python线程指南详细介绍
2017/01/05 Python
python实现分页效果
2017/10/25 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
毕业自我鉴定
2013/11/05 职场文书
市三好学生主要事迹
2014/01/28 职场文书
公司委托书格式范文
2014/04/04 职场文书
职代会闭幕词
2015/01/28 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
教你怎么用Python生成九宫格照片
2021/05/20 Python