ファイナンス機械学習:戦略リスク 戦略失敗の確率

投資戦略で決定できるパラメータは、損益閾値$${[\pi_-, \pi_+]}$$と、ベット頻度であり、戦略の投資すべきか否かの正確度$${p}$$は、市場で左右され確率変数$${E[p]}$$となる。目標となる年率換算シャープレシオ$${\theta^\ast}$$を下回る$${p}$$の値を、$${p_{\theta^\ast}}$$とすると、$${p_{\theta^\ast}=\max\{p | \theta \le \theta^\ast\}}$$ である。
$${\theta^\ast=0}$$とし、前記事の非対称のペイアウトの式を使う。

$${\theta=0}$$より$${n}$$が式から落ちるから、$${\pi_-=-0.01, \pi_+=0.015}$$である場合、ベット頻度に関係なく$${p_{\theta^\ast=0}=2/3}$$で、かなりの高正確率を必要とされる戦略であり、また$${p<p_{\theta^\ast=0}}$$であれば、シャープレシオは負となり投資は失敗する。ゆえに、この上限下限の取り方はかなり危険度の高い戦略と言える。
この戦略の失敗する可能性を$${P[p \le p_{\theta^\ast=0}]}$$と表す。
 $${P[p \le p_{\theta^\ast=0}]}$$は、以下のアルゴリズムで計算できる。
時系列のベット結果$${\{\pi_t\},t=1,\cdots, T}$$から、損失の期待値と利益の期待値を計算する。
$${\pi_-=E[\{\pi_t| \pi_t \lt 0 \},t=1,\cdots, T]}$$
$${\pi_+=E[\{\pi_t| \pi_t \gt 0 \},t=1,\cdots, T]}$$
 これは、二つのガウス分布からなる混合分布をフィットしても得られる。
年間頻度を$${t=1}$$から$${t=T}$$を年換算して$${n=T/y}$$とする。
 $${p}$$の分布をブーストラップを用いて求める。
 $${k}$$を戦略を評価する年数とし、
 イテレーション$${i=1,\cdots, I}$$に対し、$${\{\pi_t\},t=1,\cdots, T}$$から$${nk}$$個のサンプルを復元抽出し、$${\{\pi_j^{(i)}\},j=1,\cdots, \lfloor nk \rfloor}$$とする。
 ある$${i}$$からの正確度$${p_i=\displaystyle{\frac{1}{\lfloor nk \rfloor} \parallel \{\pi_j^{i}| \pi_j^{i} > 0 \},j=1,\cdots,\lfloor nk \rfloor \parallel }}$$とする。
 この$${\{p_i\}i=1,\cdots I}$$にカーネル密度推定量(KDE)を適用し、$${p}$$の確率密度関数PDFを$${f[p]}$$近似で得る。
 $${k}$$が十分に大きい時は、確率密度関数$${f[p]}$$は、
平均$${\displaystyle{\bar{p}=E[p]=\frac{1}{T}\parallel \{\pi_t^{i}| \pi_t^{i} > 0 ,t=1,\cdots,T \} \parallel }}$$、分散$${\bar{p}(1-\bar{p})}$$の標準分布
$${\mathcal{N}[\bar{p},\bar{p}(1-\bar{p})]}$$に近似できる。
 ここで、閾値のシャープレシオ$${\theta^\ast}$$からの$${p_{\theta^\ast}}$$を用いて、
$${P[p < p_{\theta^\ast}]=\displaystyle{\int^{p_{\theta^\ast}}_{-\infty} f[p]dp }}$$と計算される。
 このアルゴリズムの実装はスニペット15.5で与えられている。

def mixGaussians(mu1, mu2, sigma1, sigma2, prob1, nObs):
    ret1 = np.random.normal(mu1, sigma1, size=int(nObs * prob1))
    ret2 = np.random.normal(mu2, sigma2, size=nObs - ret1.shape[0])
    ret = np.append(ret1, ret2, axis=0)
    np.random.shuffle(ret)
    return ret

def probFailure(ret, freq, tSR):
    import scipy.stats as ss
    rPos, rNeg = ret[ret > 0].mean(), ret[ret <= 0].mean()
    p = ret[ret > 0].shape[0] / float(ret.shape[0])
    thresP = binHR([rNeg, rPos], freq, tSR)
    risk = ss.norm.cdf(thresP, p, p * (1 - p))    # approximation to bootstrap
    return risk

mu1, mu2, sigma1, sigma2, prob1, nObs=0.05, -.1, .05, .1, .75, 2600
tSR,freq=2., 260
ret=mixGaussians(mu1,mu2,sigma1,sigma2,prob1,nObs)
probF=probFailure(ret,freq,tSR)
probF

mixGaussiansは二つのガウス分布を足してテストデータとしている。

 一般に、$${P[p<p_{\theta^\ast}] > 0.05}$$の戦略はリスクが高すぎ、ボラテリティの低い証券に対しての投資でも、長い投資期間内で失敗する可能性が出てくるため採用しない。

この記事が気に入ったらサポートをしてみませんか?