著名的Graham公式:
![][equtation]
[equtation]: http://latex.codecogs.com/svg.latex?\sqrt{22.5(EarningPerShare)(BookValuePer~Share)}
據(jù)說巴菲特早期就是用這個公式選股的,至于賺不賺不知道。
插句話,想起小時候我爸炒股的時候,就是還有深發(fā)展的那個時代,電視上就有人在講巴菲特怎么買可口可樂的,記憶最深的是那人吹“美國憲法都有修正案,但可口可樂的配方不能改”(實際上也改過)。最近也看了看被抓大佬徐翔的報道。
我的大致感受是,其實這種人買股票對小資金的參考意義不大。巴菲特建倉某個股票可以直接換掉公司管理層;徐翔炒股也靠內(nèi)幕消息可以賭重大利好。我能干嘛?寫代碼跑回測找bug。
不說了上代碼(ricequant):
import pandas as pd
import numpy as np
import datetime
import math
def init(context):
scheduler.run_monthly(rebalance,8)
#按月調(diào)倉,每月第八個交易日
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):
#調(diào)倉
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
回測結(jié)果如下:

發(fā)現(xiàn)四年間的收益還是很不錯的,但是最大回撤有些受不了。
同樣我測了一下16年初到現(xiàn)在的情況:

發(fā)現(xiàn)在15、16年上半年,出現(xiàn)了很長時間的空倉,篩不出來符合條件的股票,當(dāng)然我們也可以買國債。但我們也可以修正一下參數(shù),畢竟pe<15和pb<1.5或許只是符合七十年代的美股。
如果我們把參數(shù)改到了20和1.8:


被現(xiàn)實打了臉,還不如原來的。
原來15、16空倉期的確很危險!
反思
回到策略,這個公式的大致思路是還是只買便宜的,可以認為是一種非常保守的價投策略。由上一篇文章我們可以知道,單純的市盈率因子是很有問題的,那么結(jié)合了PB之后的Graham呢?看看知乎大神是怎么說的。我們挑選兩個看上去比較有價值的回答粘在這里。
@leon:
P/E只是一種估值方式,重點不在倍率本身,而在和同業(yè)的P/E比較、和公司歷史上的P/E比較,行業(yè)景氣度。在內(nèi)地股市,行業(yè)龍頭的估值相對低廉,反映市場投機傾向明顯,小盤股的機構(gòu)投資者占比相對少,波動大,久而久之估值也較高。
市盈率長期處于低位暗示著較大的discount,恰恰說明存在不少負面因素。我舉幾個例子銀行:低P/E+低P/B反映投資人對地產(chǎn)泡沫,透明度(港股投資人擔(dān)憂中央政府不按套路出牌),SOE性質(zhì)(沒有約束機制,完全可以忽視中小投資人利益),不成熟的金融系統(tǒng),企業(yè)治理,過速擴張導(dǎo)致資產(chǎn)質(zhì)量下滑,互聯(lián)網(wǎng)金融等的諸多擔(dān)心。資源:資源價格的超級下降周期仍未結(jié)束,環(huán)保議題削弱需求預(yù)期。地產(chǎn):分歧加大,退化成低成長性行業(yè),商業(yè)地產(chǎn)應(yīng)使用NAV估值。家電:普及期結(jié)束,更換周期變長,即便挖掘新功能仍伴隨單價下降,投資人的興趣下降。高速公路:非常穩(wěn)定,應(yīng)使用DCF法估值。
@馮迅(果仁老板):
很多人認為市盈率越低,股票越便宜,股票越安全,未來收益會越好。這個觀點在A股是否適用,做一些量化分析很容易驗證。我的分析方法是將2千多只A股按照PE由小到大排名, PE越小的股票得分越高,并按照排名的先后分成10個排名段,每個排名段大約有2百只股票,然后計算每個股票排名段的年化收益(假設(shè)股票在排名段中是等權(quán)重), 再比較各個排名段的收益。回測區(qū)間從2011年8月3日開始到2016年8月3日。 每隔20 個交易日,對所有股票重新排名,調(diào)整排名分段中的股票。在下圖中,最右面90-100分段里的股票PE最小也就是最便宜的股票,最左面0-10分段里的股票PE最大或者干脆就是負數(shù),也就是投機最強的股票。最左面的紅色柱子是滬深300在過去五年的年化收益, 藍色柱子是各個PE分段在過去5年的年化收益。比較藍色柱子的收益,我們可以看出PE最小的股票的收益率并不是最好的,收益最好是得分80-90分段的股票,也就是PE較小但不是最小的股票。而PE最大股票收益是最差的。(細心的朋友會觀察到所有股票分段的收益都超過紅色的滬深300收益,這里面的原因,是大盤股在過去5年的收益遠不如小盤股。)
全A股PE分段過去5年年化收益比較
所以一個簡單的結(jié)論是我們應(yīng)該回避PE最高的股票, 但是買PE最低的股票并不能給我們帶來特好的收益。但是如果我們把投資域限制在滬深300內(nèi),則會見到完全不一樣的圖形。滬深300的市盈率和市凈率分段收益我將滬深300按PE排名分成10段,每段大約30只股票。在下圖中,最左面90-100分段里的股票PE最小,最右面0-10分段里的股票PE最大。
滬深300成分股PE分段過去5年年化收益比較
我們可以看到滬深300中PE最小的股票(最右面分段)的收益率最高,而PE最高分段的收益率最低,在過去4年為負數(shù)。 這確實印證了市盈率越低越有投資價值的觀點。滬深300大都是成熟的股票, 對于成熟的股票,選股使用PE這樣的基本面指標(biāo)更靠譜些。最后的結(jié)論是投資者應(yīng)回避PE最高的或者是盈利是負數(shù)的股票。投資滬深300,選取PE小的股票會的得到更好的收益, 而投資一般的A股, PE最小的股票不一定最有優(yōu)勢。
我個人的看法:
Graham策略在長期來看能保證在25%左右的年收益率,如果在價值投資的角度來看,其實已經(jīng)是一種堪用的策略,但回撤基本和大盤保持一致,或者說容災(zāi)能力不夠強,遇上大跌會被客戶按在車庫打。
現(xiàn)在我們來做一件很枯燥的事情,如果我們認為按月調(diào)倉太乏味,我們可以改為按周調(diào)倉,回測了2016-01-01至2017-5-11的數(shù)據(jù),然后分別將調(diào)倉時間由每周第一個交易日到第五個交易日跑了一遍,發(fā)現(xiàn)一個事情:
| 調(diào)倉頻率,第n個交易日 | 回測年化收益 | 基準(zhǔ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% |
有意思的事情發(fā)生了,收益差這么多!但最大回撤基本上保持了一致。
看看持倉記錄,原來第一筆交易:威孚高科(000581) 在一月份正在漲,選擇后面幾天建倉就踏空了。
說明的問題:
- 拍腦門決定調(diào)倉日是不行的,應(yīng)該包含一個合適的擇時策略??!
- 單純的Graham策略基本可以保證讓利潤奔跑,但無法截斷虧損?。】少F的利潤都在大盤回調(diào)中吐了出來,甚至在四月底這次大跌中都沒有及時調(diào)整倉位,一個與大盤相關(guān)的倉位控制系統(tǒng)是保證勝利果實的關(guān)鍵。
- 在合乎條件的股票數(shù)量不多時,該系統(tǒng)選擇了一兩只股票全倉殺進殺出,沒有合理分散風(fēng)險,這是非常愚蠢的。
所以說接下來的工作,我們可以將精力放在與之配套的擇時策略和倉位控制策略上。



