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 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
python xml解析实例详解
Nov 14 Python
Python外星人入侵游戏编程完整版
Mar 30 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
浅谈Python反射 & 单例模式
Mar 21 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
Python代码块及缓存机制原理详解
Dec 13 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Python&&GDAL实现NDVI的计算方式
Jan 09 Python
python实现图像拼接功能
Mar 23 Python
python基于opencv批量生成验证码的示例
Apr 28 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/02/23 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
js function定义函数使用心得
2010/04/15 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Python语言的变量认识及操作方法
2018/02/11 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
Python爬取成语接龙类网站
2018/10/19 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
幼师自我鉴定范文
2013/10/01 职场文书
英语文学专业学生的自我评价
2013/10/31 职场文书
打架检讨书500字
2014/01/29 职场文书
2014年维稳工作总结
2014/11/18 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers