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算法之栈(stack)的实现
Aug 18 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
Python selenium 三种等待方式解读
Sep 15 Python
python爬虫的工作原理
Mar 05 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 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冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
Python构建XML树结构的方法示例
2017/06/30 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
wxpython绘制圆角窗体
2019/11/18 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
黄金酒广告词
2014/03/21 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
倡议书范文大全
2015/04/28 职场文书
Android Studio 计算器开发
2022/05/20 Java/Android