【TradingView】仮想通貨取引ストラテジを作る 4日目「Volumeと尖度」【Pine】

June 09, 2020

本日はVolumeの尖度を計測しストラテジに落とし込む。統計学で使う尖度も解説する。

sendo

ボリュームのスパイクを判定したい

本日は前回制作したVolumeを標準化したものを使ってストラテジを考えてみる。

ボリュームとは単位時間の「取引量」

前回の記事で取引量を「標準化」することで他の指標と比べやすくしているのでまだ読んでいない方はそちらを参照。

【TradingView】仮想通貨取引ストラテジを作る 三日目「標準化」【Pine】

単に0を閾値にするだけでは判断しかねる

Volumeも標準化すれば0を上回ったらは上昇傾向、下回れば下降傾向...なのだが

Volumeは上がり下がりが非常に激しいため何をもってVolumeが大きいと定義するのが難しい。

そこで尖度の式を利用して一定期間の間にグラフが「尖ったかどうか」をわかりやすくする。

尖度

Wikipedia「尖度」より引用

正規分布と比べて、尖度が大きければ鋭いピークと長く太い裾を持った分布を持ち、尖度が小さければより丸みがかったピークと短く細い尾を持った分布であるという事が判断できる。

要するにグラフが尖っているかどうかを評価する計算式である。

尖度の計算式はネットで調べると複雑なものが多いが、標準化したスコアを4乗してサンプル数で割ってやれば同じものになる。

つまり尖度の式は次のようになる。

1n(Xμσ)4\frac{1}{n}\sum(\frac{X-\mu}{\sigma})^4

尖度も統計学の基礎であるのでまだ知らない人は覚えておいて損はないはず。

コード例

累乗はPine Scriptでpow関数。

// volumeの尖度
volume_kurtosis = sma(pow(volume_Zscore,4),n) - 3
bgcolor(volume_kurtosis <= 0 ? color.gray : na)

nμを計測した期間と同じ。

尖度いくつなら「尖っている」のか

まず尖度はプラスなら上に尖ったグラフ。マイナスなら下に尖ったグラフ。

仮想通貨であれば取引量が突然減るということはめったに無いので基本的には「上に尖る=突然取引量が増える」というパターンが多い。

また、正規分布の尖度が「3」であることから、計算式から3を引いてプラスになれば「鋭い」マイナスになれば「鋭くない」と判断できる。

そのため上のコードでは最初に「3」を引いているのである。

実際のチャートで確認

では、実際のチャートで見てみよう。

灰色のラインはVolumeを標準化したデータ。

上のコードでは灰色の部分が「尖度が低い=取引量が低い」である。

image-20200608151415868

うーん?よくわからない。

なんでそこが灰色に?という印象を受ける。

※そもそもなんで全部灰色なのかというおディスはご遠慮願う。

判別が微妙な原因

これはnが標準化した時のnと同じ値(ここでは200)になっているので期間が非常に大きくなってしまっているのが原因。

尖度を計測する期間を変えよう

標準化のnと尖度のnは別のものなので、ここは自由に数値を入れ替えてみる。

volume_kurtosis = sma(pow(volume_Zscore,4),ここに好きな数字) - 3

例えば20

image-20200608151648993

どうだろうか。よく見てみるとグラフが突然上に尖った時に色が灰色から黒になっているところが殆どになっていることが分かる。

尖度の計算式はどうやら目視でも使えそうに見える。

ストラテジを作ってみよう

トレード部分のコードのみ記す

longCondition = close_Zscore > 0
shortCondition = close_Zscore < 0
closeCondition = volume_kurtosis <= 0

if (longCondition and not shortCondition and not closeCondition)
    strategy.entry("My Long Entry Id", strategy.long)

if (shortCondition and not longCondition and not closeCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
if(closeCondition)
    strategy.close_all()

3行目で尖度によるクローズ条件を指定し、最後のif文で実際に尖度が低くなったときは強制クローズしている。

結果

image-20200608152607336

シャープレシオ0.795

悪くない。そこそこ効いている模様。

ByBitのチャート自体がまだ短いのでサンプル数には不安が残る。

Volume尖度フィルタがなかったらどうか

尖度でフィルタしなかった場合どうなるだろうか。

closeCondition = false //volume_kurtosis <= 0

上のコードの尖度フィルタを強制falseにしてしまえば簡単にフィルタをオフにできる。

image-20200608152836312

シャープレシオ0.519

おお!

フィルタをオフにすると成績が目に見えて悪くなった。

正直ここまで効いているとは思っていなかった。

良い結果がでてよかった。

追記

2020/06/08でBLOG下書き。後06/09に精査中パラと足を失念し上記グラフが再現できなくなった。ByBitのつもりで違う取引所に設定していたかも。

代わりに別のパラで再調整したところこのようなグラフが完成した。

15分足

シャープレシオ2.034

image-20200609221232707

結果としてはトレード数とSRが向上しているので良かったが、再現できなかったのは大変に申し訳ない。

欠点

ぱっと思いつくこのストラテジの欠点を上げる

エントリーが連続する

image-20200608153329945

単純にエントリーするかしないかの判断が標準化した価格が0を超えるかそうでないかであるので、ニュートラルな箇所で連続して取引が起こる。

見た目だけのトレード数稼ぎを行ってしまっているとも言える。

「ニュートラル」の定義をプログラミングしてやればある程度は回避可能。

※同一足でロングとショートが同時に行われているストラテジは詐欺ストラテジなので、こういった密集したトレードは1足1回のエントリーになっていることを確認する。

天井ロングする

バーに付き1回ではなく、バー終値に1回の判断でありトレンドフォロー。なおかつVolumeが大きくなってからエントリーするので....

image-20200608153650954

天井でロングする(右側で底ショートもしている)

したがって「シンプソン」に弱いと言える。

シンプソン相場専用のアイデアがなければ回避不可能

さいごに

実際にストラテジは試行錯誤の結果偶然出た物をヨシとすることが多い。

今回は「ボリュームが低いときは損するから、取引しなければよいのでは?」という仮説がある程度正しいということがデータで証明できた。

このストラテジはこの記事を公開する前にハムトレの大会へ送信した。

より時間をかければまだまだ洗練されたものが作れそうなので、このコードは自由におパクり頂ければと思う。

(パクってできたストラテジを私に送信していただけますようよろしくおねがい致します)

この記事をシェア:

author icon

仮想トイレ @CrypticToilet
仮想通貨のシステムトレードに役立つ情報を配信中。どんな情報を流しても詰まらないトイレ。当BLOGのメインライター。