背景

前一阵子,老哥向我推荐了《指数基金投资指南》。我读完之后,第一感觉是这本书写得非常小白,门槛较低。该书向读者推荐了两种投资策略(我后面介绍),然后我在这里用量化的方法进行回测,看看这中投资策略是否有效。

投资策略

该书介绍了上证50指数,红利指数等指数基金。
我对上证50指数进行回测。

该书中也介绍了一些优秀的行业指数,最主要的是消费指数,医药指数。这里也是对消费指数,医药指数做验证。
消费指数有:上证消费指数,上证消费80指数,中证消费指数,全指消费指数。
目前比较大型的消费指数基金有:华夏消费ETF(510630),汇添富中证主要消费ETF(159928)。
我对159928进行回测,它跟踪的指数是中证消费指数(000932(上海)/399932(深圳))。
医药指数有:中证医药指数,中证医药100指数,上证医药指数,全指医药指数,细分医药指数,300医药指数,500医药指数。
目前流通性较好的基金有:159929,广发医药ETF(159938)
我对159938进行回测,它跟踪的是全指医药指数(000991)。使用策略2进行回测。


策略1 - 盈利收益率法

根据市盈率倒数(该书称为盈利收益率)进行定投。
市盈率有两种算法,在这里采用的是 公司市值处以公司盈利的算法。
核心策略:
- 盈利收益率大于10%的时候,分批投资。
- 盈利收益率小于低于10%,大于6.4%时,坚持持有。
- 盈利小于6.4%时,分批卖出基金。

策略2 - 博格公式法(市盈率)

核心策略:
-在股息高的时候买入。
-在市盈率处于历史低位的时候买入。(以上两点往往同时发生。)
-买入之后,耐心等待“均值回归”,即等待市盈率从低到高。

策略3 - 博格公式法(市净率)

策略总结

策略 适用指数 我回测的数据
盈利收益率法 上证50指数、上证红利指数、中证红利指数、基本面50指数、央视50指数 上证50指数(000016),基金501050
博格公式法 沪深300指数、中证500指数、创业板指数、红利机会指数、必须消费品指数、
医药行业指数、可选消费行业指数、养老产业指数
我测试的是中证消费指数
(000932/399932),
基金159928。
博格公式法 证券行业指数、金融行业指数、非银金融行业指数、地产行业指数 不测

实现

测试数据是用聚框的数据(因为本人懒),聚框的数据的准确性不能说100%,但是我到目前为止我也没在上面找到错误的数据。

  1. 设置成本
# 设置佣金/印花税
# 基金,买入印花税为0,卖出印花税为万分之三,买入卖出佣金为万分之三,平仓佣金为0,最低佣金为5
set_order_cost(OrderCost(open_tax=0, close_tax=0.0001,open_commission=0.0003, close_commission=0.0003,close_today_commission=0.00004, min_commission=5), 'fund')# 设置滑点 注:如果您没有调用 set_slippage 函数, 系统默认的滑点是 PriceRelatedSlippage(0.00246)
set_slippage(FixedSlippage(0.02))
  1. 设置
    开始时间:2016-09-19 结束时间:2017-07-01;资金:100000。
    盈利收益率的算法:
def datetime_offset_by_month(dt, n=1):# create a shortcut object for one dayone_day = datetime.timedelta(days=1)# first use div and mod to determine year cycleq, r = divmod(dt.month + n, 12)# create a datetime2# to be the last day of the target monthresult = datetime.datetime(dt.year + q, r + 1, 1) - one_day'''if input date is the last day of this monththen the output date should also be the lastday of the target month, although the daywww.iplaypy.commay be different.for example:datetime1 = 8.31datetime2 = 9.30'''if dt.month != (dt + one_day).month:return result'''if datetime1 day is bigger than last day oftarget month, then, use datetime2for example:datetime1 = 10.31datetime2 = 11.30'''if dt.day >= result.day:return result'''then, here, we just replace datetime2's daywith the same of datetime1, that's ok.'''return result.replace(day=dt.day)def datetime_offset_by_season(dt, n=1):datetime_offset_by_month(dt, n*3)def get_statDate_range(date, i):last_season = datetime_offset_by_month(date, -3 * i)season_month = last_season.month / 3year = last_season.yearif int(season_month) == 0:year = year - 1season_month = 4return str(year) + 'q' + str(int(season_month))def get_last_4_seasons_self_net_profit(stock_code, date):q = query(income.statDate,income.net_profit).filter(income.code == stock_code)flag = 0sum = 0for i in range(1, 5):# log.info('statDate is '+get_statDate_range(date, i+flag))df = get_fundamentals(q, statDate=get_statDate_range(date, i+flag))if df.empty:df = get_fundamentals(q, statDate=get_statDate_range(datetime_offset_by_month(date,-3), i+flag))flag = flag + 1if df.empty:df = get_fundamentals(q, statDate=get_statDate_range(datetime_offset_by_month(date,-3), i+flag))flag = flag + 1if df.empty:df = get_fundamentals(q, statDate=get_statDate_range(datetime_offset_by_month(date,-3), i+flag))flag = flag + 1if df.empty:df = get_fundamentals(q, statDate=get_statDate_range(datetime_offset_by_month(date,-3), i+flag))flag = flag + 1# log.info('stock:'+stock_code+' i is '+str(i))if df.empty:passelse:sum = sum + df['net_profit'][0]# log.info('sum is %s' % sum)return sum# 盈利收益率
def index_ep(context, index_code):stock_list = get_index_stocks(index_code)sum_cap=0sum_net_profit=0for stock_code in stock_list:df_valuation = get_fundamentals(query(valuation.market_cap).filter(valuation.code == stock_code))cap = df_valuation['market_cap'][0]net_profit = get_last_4_seasons_self_net_profit(stock_code, context.current_dt)sum_cap = sum_cap + capsum_net_profit = sum_net_profit + net_profitep_mean = 100000000 * sum_cap / sum_net_profitreturn  ep_mean

策略核心:

## 开盘时运行函数
def market_open(context):# 确定时间是周几weekday = context.current_dt.isoweekday()# 操作代码index_code = '000016.XSHG'fund_code = '501050.XSHG'## 操作判定if weekday == 1:# 操作ped = index_ep(context, index_code)log.info('沪深300盈利收益率为%s' % ped)record(key=ped)if ped > 10.00:log.info('买入1000元'+fund_code)order_value(fund_code, 1000, 0)elif ped < 6.4 and ped > 0:log.info('卖出10000元'+fund_code)order_value(fund_code, -10000, 0)

回测结果:

由于这次测试是做等权计算盈利收益率,这样得出的结论是《指数基金投资指南》的盈利收益率并不是有效的策略。当然这只是我个人的测试结果。

验证下《指数基金投资指南》中的策略是否有效相关推荐

  1. 2019读书计划(3)——《指数基金投资指南》

    原文地址:2019读书计划(3)--<指数基金投资指南> 这本书其实已经读完有一段时间了,现在进行下回顾 为了节约你的时间,你也可以快速浏览黄色标记的内容 从书的名字就能知道,这本书的主要 ...

  2. 读书笔记-指数基金投资指南

    指数基金投资指南 1. 常见基金品种 1)指数基金 2) 行业指数基金 2. 如何挑选合适的基金 3. 如何买卖指数基金 4. 构建自己的定投计划 1. 常见基金品种 1)指数基金 指数:选股规则,按 ...

  3. 《指数基金投资指南》笔记整理

    书名:指数基金投资指南 作者:银行螺丝钉 书籍推荐公众号:银行螺丝钉 阅读来源:微信读书 常见的估值指标 估值指标 计算公式 适用范围 不适用 市盈率 PE=P/E,其中P代表公司市值,E代表公司盈利 ...

  4. 2020.6月书单,读后感简述:《灿烂千阳》、《指数基金投资指南》

    六月读了两本书 1.<灿烂千阳> 这个本是看了知乎某个推荐,前段时间顺手再tb买了,放在桌子上一段时间,偶然翻了几页便有了一口气读完的想法. 怎么说呢,可能平时是在影视剧里看中国历史的战争 ...

  5. 《指数基金投资指南》读书笔记_2022002

    2022年第二本,所属类别为理财类之基金理财. 为什么阅读 2022年开年,股票基金都迎来重大调整,承受了巨大压力:去年因为高位买了白酒和医药,导致没有挣钱. 越是压力大,越应该去努力学习. < ...

  6. 018 《指数基金投资指南》听后感

    年轻人,还是应该更多的关注到提升自身的技能方面,而不应该将重点放在如何钱生钱的问题上.这一点,最近的自己好像做的有点偏离轨道了,及时纠正一下方向. 理财从不怕晚,但越早开始越好,所以最好的是年轻人要更 ...

  7. 《 指数基金投资指南 》by 银行螺丝钉 - 笔记 - 4 - 第二部分

    文章目录 1.盈利收益率法挑选指数基金 概述 盈利收益率法的局限和适合的品种 2.博格公式法挑选指数基金 1.影响指数基金收益的三大因素 2.博格公式:指数基金的收益公式 3.如何使用博格公式 4.盈 ...

  8. 《指数基金投资指南》读书笔记---指数基金的分类

    1.上证50指数 上证50是上交易所挑选规模最大, 流动性最好的50只股票 指数的特点: 以大盘股为主. 只有上交所的股票,没有深交所的股票 指数基金从交易渠道上可以分为场内指数基金和场外指数基金,这 ...

  9. 4.《指数基金投资指南》读书笔记

    作者 封面 银行螺丝钉 文章目录 第一章 投资新手的建议 1. 想成为富人,你得攒资产 2. 找到长期收益率最高的资产 第二章 投资工具这么多,为什么要选指数基金 1. 什么是指数 2. 谁开发的股票 ...

  10. 指数基金投资指南读书笔记

    1 名词解析 1.1 市盈率:公司市值(P)/公司盈利(E) = PE = P/E 静态市盈率取用的是公司上一个年度的净利润,他最具参考意义,也是我们常说的市盈率. 市盈率反映了我们愿意为了一元的净利 ...

最新文章

  1. 2022年如何学习自动化测试?这篇文章告诉你
  2. 如何去掉latex中默认显示的日期
  3. Bert 中文使用方式
  4. 【物联网云端对接-1】 通过HTTP协议与微软Azure IoT hub进行云端通信
  5. 58同城沈剑:好的架构源于不停地衍变,而非设计
  6. android 把assets 里面的图片文件输出到SD卡
  7. Python3 —— if/while/input
  8. 面试精讲之面试考点及大厂真题 - 分布式专栏 20 降级组件Hystrix的功能特性
  9. python 核心编程_【02】Python核心编程 (全)
  10. cas 单点登录_5分钟明了单点登录SSO、OAuth、LDAP、CAS的流程与应用
  11. echarts 加载优化_【第1615期】React Native 图表性能优化实践
  12. 启动系统时无法正常启动提示\windows\system32\winload.efi 解决方案
  13. 傅里叶变换进行图像变换Matlab实现
  14. java 图片添加水印
  15. JavaScript 注册登录页面的简单实现
  16. Five I/O Models
  17. CSS公鸡走路动画js特效
  18. mac时间机器文件服务器,使用时间机器备份文件 - 处理文件和文件夹 - macOS使用手册...
  19. 模糊查询(java)
  20. OpenCV笔记11:利用HSV颜色空间进行目标检测和目标跟踪

热门文章

  1. 触摸式计算机屏幕,触控屏笔记本好不好 触摸屏笔记本优缺点分析【详细介绍】...
  2. 纬衡、金蝶、腾讯、迅雷获深圳软件明星企业称号
  3. mysql 没有 myd_MySQL中找不到.myd文件的问题
  4. 带你玩转软件项目测试管理——项目研发管理模式(一)
  5. 利用模式进行构建第九讲——树形模式
  6. Js 嵌套if选择结构
  7. 软件测试常见面试题分享
  8. 电脑键盘快捷键和组合键功能使用大全
  9. 线性代数笔记1-二阶行列式和三阶行列式
  10. 用 Python 构建实时股票警报消息系统机器人