BTCの価格は1万ドル付近。対してPremium
はプラスマイナス0.001あたりの数値を取っており同じグラフ上にプロットすると値が違いすぎて全く比較にならない。
統計学ではこのように異なるデータ同士を比較するために「標準化」が行われる。
※「標準化」はIT用語でも規格を定める意味で使われるワードではあるが、統計学のそれとは違うものである。
今回は価格変動とBITMEXのPremium
(Funding Rateの計算式の元となる値)に関係がないかを調べていくために両者を「標準化」して見た目でも分かりやすく表現する。
確率変数をX, 平均をμ, 標準偏差σとするときのZ値(標準化得点)は
σは分散の正の平方根(ルート)。そもそも分散がよくわからん場合は...まぁヨシ!高校でたぶん皆一度は習っている。
特に難しい式ではないので気になる人は別サイトに譲りたい。
とにかくこれでヨシなのだ。
stdev
」Pineには標準偏差を取る関数が用意されているのでこれだけは覚えておきたい。
例えば
stdev(close,200)
こうすると、200日分で計算された終値の標準偏差が出力される。
また、標準偏差は皆がよく知っているボリンジャーバンドで使われているので知らなかった場合は頭の隅に入れておきたい。
sma
が移動平均線、つまり平均を意味するので
close_sma = sma(close, n)
close_Zscore = ( close - close_sma ) / stdev(close,n) //標準化
こうなる。
次を標準化して並べてみた。
コードは
plot(0,color=color.white) //単に0の線をわかりやすくしているだけ
close_sma = sma(close, n)
close_Zscore = ( close - close_sma ) / stdev(close,n) //標準化
xbt_pi_sma = sma(xbt_pi,n)
xbt_pi_Zscore = ( xbt_pi - xbt_pi_sma ) / stdev(xbt_pi,n) //標準化
eth_pi_sma = sma(eth_pi,n)
eth_pi_Zscore = ( eth_pi - eth_pi_sma ) / stdev(eth_pi,n) //標準化
volume_sma = sma(volume, n)
volume_Zscore = ( volume - volume_sma ) / stdev(volume,n) //標準化
average = (xbt_pi_Zscore + eth_pi_Zscore + close_Zscore) / 3
plot(close_Zscore,color=color.orange)
plot(xbt_pi_Zscore,color=color.red)
plot(eth_pi_Zscore,color=color.blue)
plot(volume_Zscore,color=color.gray)
plot(average,color=color.white)
ちなみにBTC終値の価格は全く関係ないByBit
を使用している。
グラフをみてもなんだか線が多すぎてよくわからないかもしれないが、もともと全く違う値を持ったグラフが標準化されおおよそ同じ幅に収まっている事がわかる。
単純に価格のZ値を見れば0を下回れば下降トレンド。0を上回れば上昇トレンドと言って良さそうだ。
Close
のZ値だけを見てトレードするとシンプルにトレンドフォローになる。
longCondition = close_Zscore > 0
shortCondition = close_Zscore < 0
ByBit:BTCUSD
3時間足足は適当に見て一番PFが高い物を選択。
確かに勝てているが、これは余り面白みがない。
シャープレシオも低い(0.3強)
あれ、ここまで?という声が聞こえてきそうではあるが
今回は「標準化」して違うグラフを同じ土俵に持ってくることが目的なのでストラテジはおまけだと考えてもらいたい。
次回はボリュームのZ値を使ってもう少しストラテジに変化をもたせてみたい。