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中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
python七夕浪漫表白源码
Apr 05 Python
Django 多环境配置详解
May 14 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
Python递归调用实现数字累加的代码
Feb 25 Python
django model通过字典更新数据实例
Apr 01 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
Python+Xlwings 删除Excel的行和列
Dec 19 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 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语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
python实现基本进制转换的方法
2015/07/11 Python
python+opencv实现动态物体追踪
2018/01/09 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
电子商务专业推荐信范文
2013/12/02 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
法人授权委托书格式
2014/04/08 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
银行委托书范本
2014/09/28 职场文书
表扬信格式模板
2015/05/05 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
关于Redis的主从复制及哨兵问题
2022/06/16 Redis