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中的对象拷贝示例 python引用传递
Jan 23 Python
浅析Python中的多条件排序实现
Jun 07 Python
python生成随机图形验证码详解
Nov 08 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
Python实现登陆文件验证方法
Oct 06 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
Dec 25 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
用python计算文件的MD5值
Dec 23 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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随机输出名人名言的代码
2012/10/07 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
AngularJS基础知识
2014/12/21 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
Python快速从注释生成文档的方法
2016/12/26 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Numpy之reshape()使用详解
2019/12/26 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
python实现在线翻译功能
2020/03/03 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
保险专业自荐信范文
2014/02/20 职场文书
法人代表授权委托书
2014/04/08 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
商场父亲节活动方案
2014/08/27 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android