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 相关文章推荐
在MAC上搭建python数据分析开发环境
Jan 26 Python
python字符串连接方法分析
Apr 12 Python
Python使用剪切板的方法
Jun 06 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
python学生信息管理系统
Mar 13 Python
详解python的四种内置数据结构
Mar 19 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
python 有效的括号的实现代码示例
Nov 11 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
Python用requests库爬取返回为空的解决办法
Feb 21 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如何调用webservice应用介绍
2012/11/24 PHP
php中的比较运算符详解
2013/10/28 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
详解Node 定时器
2018/02/26 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
Python算法应用实战之栈详解
2017/02/04 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
python正则表达式re之compile函数解析
2017/10/25 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
transform python环境快速配置方法
2018/09/27 Python
django表单的Widgets使用详解
2019/07/22 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
关于python字符串方法分类详解
2019/08/20 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
幼儿园大班新学期寄语
2014/01/18 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
文员岗位职责范本
2014/03/08 职场文书
《为人民服务》教学反思
2016/02/20 职场文书