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 元类使用说明
Dec 18 Python
利用python3随机生成中文字符的实现方法
Nov 24 Python
Python键盘输入转换为列表的实例
Jun 23 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
使用tensorflow实现线性svm
Sep 07 Python
python opencv实现图像边缘检测
Apr 29 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python实现人机猜拳小游戏
Feb 03 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
keras得到每层的系数方式
Jun 15 Python
python解释器安装教程的方法步骤
Jul 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
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
javascript 特殊字符串
2009/02/25 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
python3实现点餐系统
2019/01/24 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python实现把类当做字典来访问
2019/12/16 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
python dict乱码如何解决
2020/06/07 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
自动一体化专业求职信
2014/03/15 职场文书
党员公开承诺书
2014/03/25 职场文书
工程部岗位职责
2015/02/10 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL