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抓取网页中的图片示例
Feb 28 Python
python求众数问题实例
Sep 26 Python
浅析Python中的多进程与多线程的使用
Apr 07 Python
python2.7安装图文教程
Mar 13 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 Python
Python 调用 Windows API COM 新法
Aug 22 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
Python 如何反方向迭代一个序列
Jul 28 Python
教你怎么用python爬取爱奇艺热门电影
May 20 Python
python标准库ElementTree处理xml
May 20 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之第六天
2006/10/09 PHP
php无限遍历目录示例
2014/02/21 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
应届生.NET方向面试题
2015/05/23 面试题
UNIX文件名称有什么规定
2013/03/25 面试题
建筑工程管理专业自荐信范文
2013/12/28 职场文书
公司人力资源的自我评价
2014/01/02 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
2014年师德承诺书
2014/05/23 职场文书
个人简历自荐信
2014/06/26 职场文书
认真学习保证书
2015/02/26 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB