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获得图片base64编码示例
Jan 16 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
python计算N天之后日期的方法
Mar 31 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
Python yield 使用浅析
May 28 Python
python urllib urlopen()对象方法/代理的补充说明
Jun 29 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
python 带时区的日期格式化操作
Oct 23 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 金额数字转换成英文
2010/05/06 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
php绘制圆形的方法
2015/01/24 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php商品对比功能代码分享
2015/09/24 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
JavaScript 全角转半角部分
2009/10/28 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
python中copy()与deepcopy()的区别小结
2018/08/03 Python
django之自定义软删除Model的方法
2019/08/14 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
遗嘱继承公证书
2014/04/09 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers