市盈率(二):Graham价值策略

著名的Graham公式:
![][equtation]
[equtation]: http://latex.codecogs.com/svg.latex?\sqrt{22.5(EarningPerShare)(BookValuePer~Share)}
据说巴菲特早期就是用这个公式选股的,至于赚不赚不知道。

插句话,想起小时候我爸炒股的时候,就是还有深发展的那个时代,电视上就有人在讲巴菲特怎么买可口可乐的,记忆最深的是那人吹“美国宪法都有修正案,但可口可乐的配方不能改”(实际上也改过)。最近也看了看被抓大佬徐翔的报道。

我的大致感受是,其实这种人买股票对小资金的参考意义不大。巴菲特建仓某个股票可以直接换掉公司管理层;徐翔炒股也靠内幕消息可以赌重大利好。我能干嘛?写代码跑回测找bug。

不说了上代码(ricequant):

import pandas as pd
import numpy as np
import datetime
import math

def init(context):
    scheduler.run_monthly(rebalance,8)
    #按月调仓,每月第八个交易日
    
def handle_bar(context, bar_dict):
    pass
    
def before_trading(context):
    num_stocks = 10
    #删选股票
    fundamental_df = get_fundamentals(
        query(
            fundamentals.eod_derivative_indicator.pb_ratio,
            fundamentals.eod_derivative_indicator.pe_ratio,
            fundamentals.financial_indicator.inc_earnings_per_share,
            fundamentals.financial_indicator.inc_profit_before_tax,
            fundamentals.financial_indicator.quick_ratio,
            fundamentals.financial_indicator.earnings_per_share,
            fundamentals.financial_indicator.book_value_per_share,
        )
        .filter(
            fundamentals.eod_derivative_indicator.pe_ratio<15
        )
        .filter(
            fundamentals.eod_derivative_indicator.pb_ratio<1.5
        )
        .filter(
            fundamentals.financial_indicator.inc_earnings_per_share>0
        )
        .filter(
            fundamentals.financial_indicator.inc_profit_before_tax>0
        )
        .filter(
            fundamentals.financial_indicator.current_ratio>2
        )
        .filter(
            fundamentals.financial_indicator.quick_ratio>1
        )
        .order_by(
            fundamentals.eod_derivative_indicator.market_cap.desc()
        ).limit(
            num_stocks
        )
    )

    context.fundamental_df = fundamental_df
    context.stocks = context.fundamental_df.columns.values

    
def rebalance(context,bar_dict):
    
    #调仓
    for stock in context.portfolio.positions:
        if stock not in context.fundamental_df:
            order_target_percent(stock, 0)
    #仓中不符合条件的股票全部卖出
    weight = update_weights(context, context.stocks)

    for stock in context.fundamental_df:
        if weight != 0 and stock in context.fundamental_df:
            order_target_percent(stock,weight)
    #新选进来的股票按比例建仓
def update_weights(context,stocks):
    if len(stocks) == 0:
        return 0 
    else:
        weight = .95/len(stocks)
        return weight

回测结果如下:


市盈率(二):Graham价值策略_第1张图片

发现四年间的收益还是很不错的,但是最大回撤有些受不了。

同样我测了一下16年初到现在的情况:

市盈率(二):Graham价值策略_第2张图片

发现在15、16年上半年,出现了很长时间的空仓,筛不出来符合条件的股票,当然我们也可以买国债。但我们也可以修正一下参数,毕竟pe<15和pb<1.5或许只是符合七十年代的美股。

如果我们把参数改到了20和1.8:

市盈率(二):Graham价值策略_第3张图片
市盈率(二):Graham价值策略_第4张图片

被现实打了脸,还不如原来的。
原来15、16空仓期的确很危险!

反思

回到策略,这个公式的大致思路是还是只买便宜的,可以认为是一种非常保守的价投策略。由上一篇文章我们可以知道,单纯的市盈率因子是很有问题的,那么结合了PB之后的Graham呢?看看知乎大神是怎么说的。我们挑选两个看上去比较有价值的回答粘在这里。

市盈率越低的股票越好吗?

@leon:

P/E只是一种估值方式,重点不在倍率本身,而在和同业的P/E比较、和公司历史上的P/E比较,行业景气度。在内地股市,行业龙头的估值相对低廉,反映市场投机倾向明显,小盘股的机构投资者占比相对少,波动大,久而久之估值也较高。


市盈率(二):Graham价值策略_第5张图片

市盈率(二):Graham价值策略_第6张图片

市盈率长期处于低位暗示着较大的discount,恰恰说明存在不少负面因素。我举几个例子银行:低P/E+低P/B反映投资人对地产泡沫,透明度(港股投资人担忧中央政府不按套路出牌),SOE性质(没有约束机制,完全可以忽视中小投资人利益),不成熟的金融系统,企业治理,过速扩张导致资产质量下滑,互联网金融等的诸多担心。资源:资源价格的超级下降周期仍未结束,环保议题削弱需求预期。地产:分歧加大,退化成低成长性行业,商业地产应使用NAV估值。家电:普及期结束,更换周期变长,即便挖掘新功能仍伴随单价下降,投资人的兴趣下降。高速公路:非常稳定,应使用DCF法估值。

@冯迅(果仁老板):

很多人认为市盈率越低,股票越便宜,股票越安全,未来收益会越好。这个观点在A股是否适用,做一些量化分析很容易验证。我的分析方法是将2千多只A股按照PE由小到大排名, PE越小的股票得分越高,并按照排名的先后分成10个排名段,每个排名段大约有2百只股票,然后计算每个股票排名段的年化收益(假设股票在排名段中是等权重), 再比较各个排名段的收益。回测区间从2011年8月3日开始到2016年8月3日。 每隔20 个交易日,对所有股票重新排名,调整排名分段中的股票。在下图中,最右面90-100分段里的股票PE最小也就是最便宜的股票,最左面0-10分段里的股票PE最大或者干脆就是负数,也就是投机最强的股票。最左面的红色柱子是沪深300在过去五年的年化收益, 蓝色柱子是各个PE分段在过去5年的年化收益。比较蓝色柱子的收益,我们可以看出PE最小的股票的收益率并不是最好的,收益最好是得分80-90分段的股票,也就是PE较小但不是最小的股票。而PE最大股票收益是最差的。(细心的朋友会观察到所有股票分段的收益都超过红色的沪深300收益,这里面的原因,是大盘股在过去5年的收益远不如小盘股。)


市盈率(二):Graham价值策略_第7张图片
全A股PE分段过去5年年化收益比较

所以一个简单的结论是我们应该回避PE最高的股票, 但是买PE最低的股票并不能给我们带来特好的收益。但是如果我们把投资域限制在沪深300内,则会见到完全不一样的图形。沪深300的市盈率和市净率分段收益我将沪深300按PE排名分成10段,每段大约30只股票。在下图中,最左面90-100分段里的股票PE最小,最右面0-10分段里的股票PE最大。


市盈率(二):Graham价值策略_第8张图片
沪深300成分股PE分段过去5年年化收益比较

我们可以看到沪深300中PE最小的股票(最右面分段)的收益率最高,而PE最高分段的收益率最低,在过去4年为负数。 这确实印证了市盈率越低越有投资价值的观点。沪深300大都是成熟的股票, 对于成熟的股票,选股使用PE这样的基本面指标更靠谱些。最后的结论是投资者应回避PE最高的或者是盈利是负数的股票。投资沪深300,选取PE小的股票会的得到更好的收益, 而投资一般的A股, PE最小的股票不一定最有优势。

我个人的看法:

Graham策略在长期来看能保证在25%左右的年收益率,如果在价值投资的角度来看,其实已经是一种堪用的策略,但回撤基本和大盘保持一致,或者说容灾能力不够强,遇上大跌会被客户按在车库打。

现在我们来做一件很枯燥的事情,如果我们认为按月调仓太乏味,我们可以改为按周调仓,回测了2016-01-01至2017-5-11的数据,然后分别将调仓时间由每周第一个交易日到第五个交易日跑了一遍,发现一个事情:

调仓频率,第n个交易日 回测年化收益 基准年化收益 Alph Beta Sharpe Volatility 最大回撤
weekly,1 28.951% -2.815% 0.274 0.545 1.1932 0.2135 14.727%
weekly,2 28.895% -2.501% 0.2318 0.5177 0.9963 0.216 14.725%
weekly,3 12.275% -2.501% 0.1273 0.4612 0.5684 0.198 14.742%
weekly,4 17.982% -2.501% 0.1809 0.5286 0.7889 0.2078 14.73%
weekly,5 13.01% -2.815% 0.1342 0.4431 0.6043 0.1963 14.728%

有意思的事情发生了,收益差这么多!但最大回撤基本上保持了一致。
看看持仓记录,原来第一笔交易:威孚高科(000581) 在一月份正在涨,选择后面几天建仓就踏空了。

说明的问题:

  1. 拍脑门决定调仓日是不行的,应该包含一个合适的择时策略!!
  2. 单纯的Graham策略基本可以保证让利润奔跑,但无法截断亏损!!可贵的利润都在大盘回调中吐了出来,甚至在四月底这次大跌中都没有及时调整仓位,一个与大盘相关的仓位控制系统是保证胜利果实的关键。
  3. 在合乎条件的股票数量不多时,该系统选择了一两只股票全仓杀进杀出,没有合理分散风险,这是非常愚蠢的。

所以说接下来的工作,我们可以将精力放在与之配套的择时策略和仓位控制策略上。

你可能感兴趣的:(市盈率(二):Graham价值策略)