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正则表达式re模块详细介绍
May 29 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python中的闭包用法实例详解
May 05 Python
Python处理字符串之isspace()方法的使用
May 19 Python
全面理解Python中self的用法
Jun 04 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
python yield和Generator函数用法详解
Feb 10 Python
详解python 内存优化
Aug 17 Python
python 遍历磁盘目录的三种方法
Apr 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
Angularjs的启动过程分析
2017/07/18 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
Python实现类继承实例
2014/07/04 Python
Python numpy 常用函数总结
2017/12/07 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
PHP面试题大全
2015/10/16 面试题
实习教师自我鉴定
2013/09/27 职场文书
技能比武方案
2014/05/21 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
倡议书的写法
2014/08/30 职场文书
介绍信样本
2015/01/31 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书