何を収益とするか
時点 t の戦略資産価値を Vt、同じ期間の無リスク収益を rf,t とします。固定間隔の超過対数収益を次で定義します。
価格差ではなく比率を使い、日次・週次など観測間隔を固定します。
- 期間をまたいで足し算できる:日次の対数収益を足すと、その期間全体の対数収益になります。単純な変化率は (1+r1)(1+r2)… と掛け算でつなぐ必要があります。
- 上げと下げが釣り合う:100→110→100 と戻ったとき、単純な変化率は +10% と −9.09% で、平均すると +0.45% と増えたように見えます。対数収益なら +0.0953 と −0.0953 で、合計も平均もちょうど0です。
- 小さな値動きではほぼ同じ値:1日±1%程度なら ln(1.01) = 0.00995 で、単純な変化率0.01とほとんど変わりません。差が目立つのは大きく動いた日と、長い期間の複利です。
単純な変化率の平均と対数収益の平均は、変動が大きいほど離れ、差はおおよそσ²/2(σは変化率の標準偏差)です。この差が長期の複利成長を左右する理由は第9回で扱います。
トレード単位のR倍率と日次の口座収益は別の系列です。日次Sharpeを出すなら、ノーポジションの日も含む日次口座収益を使います。取引が起きた日だけを抜くと、待機時間と資本拘束を消してしまいます。
日次なら常に252、月次なら常に12と機械的に掛ける前に、休日、日足境界、欠損、ノーポジション日の扱いを固定します。異なる頻度のSharpeを同じ表で比較しません。
Sharpeは標本統計量
T個の超過収益から標本平均と不偏標本分散を計算します。
観測Sharpeは次の比率です。帽子は「未知の母集団値ではなく推定値」であることを表します。
分子も分母も標本で揺れます。したがってSR̂=1.0と0.8の差が、実質的な差か標本誤差かは、この数値だけでは判断できません。
年率化の前提
1年にq期あるとき、独立同分布を仮定すれば年率Sharpeは √q 倍です。
しかし自己相関があれば、複数期収益の分散には共分散が入ります。ラグkの自己共分散をγkとすると、q期合計の分散は次です。
正の自己相関を無視して√q倍すると、年率Sharpeを過大評価し得ます。保有重複、価格の平滑化、ポジションの段階変更も依存を生みます。
自己相関と非正規性
Sharpe自体は平均と分散が有限なら定義できますが、推定誤差の近似には分布仮定が関わります。歪んだ損益や厚い裾では、正規分布だけを使う標準誤差が楽観的になり得ます。
r = np.log(equity / equity.shift(1)).dropna()
mean = r.mean()
std = r.std(ddof=1)
sharpe = mean / std
print("n", len(r))
print("skew", scipy.stats.skew(r, bias=False))
print("excess_kurtosis", scipy.stats.kurtosis(r, fisher=True, bias=False))
print("JB p", scipy.stats.jarque_bera(r).pvalue)
print("lag1 autocorr", r.autocorr(lag=1))これは採用判定ではなく記述統計です。実際の検証ではコスト、欠損、タイムゾーン、先読みも別に確認します。
最低限の報告項目
- 収益系列の定義と観測頻度
- サンプル数Tと対象期間
- SR̂と年率化方法
- 無リスク金利とコストの扱い
- 歪度・超過尖度・Jarque–Bera p値
- 主要ラグの自己相関
- T<30なら「サンプル不足」と表示
- 平均収益の95%CIがゼロを含むか
Sharpeが推定量だと分かれば、次の問いは「基準Sharpeを上回る確率はどれくらいか」「何通りも試した後でも信用できるか」です。これをPSRとDSRで扱います。
ミニテスト
4問で確認します。
Q1. 観測Sharpeの正しい理解は?
期間や経路が変われば観測値も変わります。
Q2. 日次戦略収益へ含めるものは?
資本が待機した時間も戦略の一部です。
Q3. √qの単純年率化が危険になる条件は?
複数期分散へ自己共分散が加わります。
Q4. Sharpeと一緒に示すべきものは?
計算条件と推定不確実性を併記します。
参考資料
年率化と自己相関は Andrew W. Lo, The Statistics of Sharpe Ratios を参照。次回の非正規性補正はBailey and López de Pradoの研究へ進みます。