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实现抓取网页并且解析的实例
Sep 20 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
python简单验证码识别的实现方法
May 10 Python
Python3.8中使用f-strings调试
May 22 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
Python实现Excel自动分组合并单元格
Feb 22 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
May 25 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
python 串行执行和并行执行实例
2020/04/30 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
公司会议开幕词
2015/01/29 职场文书
机关保密工作承诺书
2015/05/04 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python