ファイナンス機械学習:戦略リスク 対称的ペイアウト

年間で$${n}$$回の独立同分布なベットをする戦略において、ある回$${i, i\in [1,n]}$$でのベットの結果$${X_i}$$が利益$${\pi, \pi>0}$$となる確率を$${p}$$、損失$${-\pi}$$となる確率を$${1-p}$$とする。
$${P[X_i=\pi ]=p}$$
$${P[X_i=-\pi ]=1-p}$$
この$${p}$$は、利益か損失かに分けるバイナリ分類器の正解率precisionと解釈できる。
$${\pi>0}$$の時にベットし、$${\pi \le 0}$$ではベットしないこととする。
FNでも、ベットをしないことから、利益も出ないが損失も出さないが、FPであった場合はべナルティを科す。
ベットは互いに独立であるから、一回のベットからの予想損益は、
$${E[X_i]=\pi p -pi(1-p)=\pi(2p-1)}$$であり、分散は、
$${V[X_i]=E[X_i^2]-E[X_i]^2 = \pi^2p + \pi^2(1-p) - \pi^2(2p-1)^2 = s\pi^2p(1-p)}$$
これから年率換算のSRは
$${\theta(p,n)=\displaystyle{\frac{n\pi(2p-1)}{\sqrt{n 4\pi^2p(1-p)}} = \frac{(2p-1)\sqrt{n}}{2\sqrt{p(1-p)}}}}$$
これをグラフ化すると、

対照なペイアウト

また、これを以下のコードで計算機実験を行った。

def TargetSR(p, freq, ptsl=[1.0,-1.0], trials=1000_000):
    
    out = []
    rnd = np.random.binomial(n=1, p=p,size=trials)
    x = [ptsl[0] if i == 1 else ptsl[1] for i in rnd]
    sr = np.mean(x) / np.std(x) * np.sqrt(freq)
    return sr

ps=np.linspace(0.40,0.60,11)

srt=2.0
ann=250**.5

N=1000_000
Fs=[50,100,200,250]
for frq in Fs:
    SR=[]
    for p in ps:
        sr=TargetSR0(p, frq, trials=N)
        SR.append(sr)
    plt.plot(ps,SR,label=f'Frq={frq}')
plt.axhline(y=2.0, color='r', linestyle='-',label='AnnSR=2')
plt.axhline(y=0, color='g', linestyle='--',label='Frq=0')
plt.legend()
plt.xlabel('precision')
plt.ylabel('annualized SR')
plt.show()


ペイアウトが対象であると、シャープレシオは損益の閾値によらず、ベットの頻度と戦略のprecision$${p}$$に依存する。
 また、理論的には、$${p~0.5}$$でも、わずかに0.5より大きければ、ベット頻度を上げることでシャープレシオを高くできる。
 $${0\le p \le 1}$$で、$${\displaystyle{-4p^2+4p-\frac{n}{\theta^2+n} =0}}$$を解けば、$${p=\displaystyle{\frac{1}{2}\left( 1+ \sqrt{1-\frac{n}{\theta^2+n}} \right)}}$$。
 よって、年率換算シャープレシオ2を週次のベットの一年52回で得るには、戦略のprecisionは0.634と、高正解率を必要とされる。
 

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