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操作json数据的一个简单例子
Apr 17 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
Python程序退出方式小结
Dec 09 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
总结python中pass的作用
Feb 27 Python
python之信息加密题目详解
Jun 26 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
Python 打印自己设计的字体的实例讲解
Jan 04 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 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实现选择排序的解决方法
2013/05/04 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
解放web程序员的输入验证
2006/10/06 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
vue组件实例解析
2017/01/10 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
Vuex 入门教程
2018/01/10 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
python黑魔法之参数传递
2016/02/12 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
python实现事件驱动
2018/11/21 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
护士自我评价范文
2014/01/25 职场文书
美容院考勤制度
2014/01/30 职场文书
大学新生入学教育方案
2014/05/16 职场文书
房地产推广策划方案
2014/05/19 职场文书
安全标语口号
2014/06/09 职场文书
上海世博会志愿者口号
2014/06/17 职场文书