本日は前回制作したVolume
を標準化したものを使ってストラテジを考えてみる。
ボリュームとは単位時間の「取引量」
前回の記事で取引量を「標準化」することで他の指標と比べやすくしているのでまだ読んでいない方はそちらを参照。
【TradingView】仮想通貨取引ストラテジを作る 三日目「標準化」【Pine】
Volume
も標準化すれば0を上回ったらは上昇傾向、下回れば下降傾向...なのだが
Volume
は上がり下がりが非常に激しいため何をもってVolume
が大きいと定義するのが難しい。
そこで尖度の式を利用して一定期間の間にグラフが**「尖ったかどうか」**をわかりやすくする。
Wikipedia「尖度」より引用
正規分布と比べて、尖度が大きければ鋭いピークと長く太い裾を持った分布を持ち、尖度が小さければより丸みがかったピークと短く細い尾を持った分布であるという事が判断できる。
要するにグラフが尖っているかどうかを評価する計算式である。
尖度の計算式はネットで調べると複雑なものが多いが、標準化したスコアを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
を標準化したデータ。
上のコードでは**灰色の部分が「尖度が低い=取引量が低い」**である。
うーん?よくわからない。
なんでそこが灰色に?という印象を受ける。
※そもそもなんで全部灰色なのかというおディスはご遠慮願う。
これはn
が標準化した時のn
と同じ値(ここでは200)になっているので期間が非常に大きくなってしまっているのが原因。
標準化のn
と尖度のn
は別のものなので、ここは自由に数値を入れ替えてみる。
volume_kurtosis = sma(pow(volume_Zscore,4),ここに好きな数字) - 3
例えば20
どうだろうか。よく見てみるとグラフが突然上に尖った時に色が灰色から黒になっているところが殆どになっていることが分かる。
尖度の計算式はどうやら目視でも使えそうに見える。
トレード部分のコードのみ記す
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文で実際に尖度が低くなったときは強制クローズしている。
シャープレシオ0.795
悪くない。そこそこ効いている模様。
ByBit
のチャート自体がまだ短いのでサンプル数には不安が残る。
Volume
尖度フィルタがなかったらどうか尖度でフィルタしなかった場合どうなるだろうか。
closeCondition = false //volume_kurtosis <= 0
上のコードの尖度フィルタを強制false
にしてしまえば簡単にフィルタをオフにできる。
シャープレシオ0.519
フィルタをオフにすると成績が目に見えて悪くなった。
正直ここまで効いているとは思っていなかった。
良い結果がでてよかった。
2020/06/08でBLOG下書き。後06/09に精査中パラと足を失念し上記グラフが再現できなくなった。ByBit
のつもりで違う取引所に設定していたかも。
代わりに別のパラで再調整したところこのようなグラフが完成した。
15分足
シャープレシオ2.034
結果としてはトレード数とSRが向上しているので良かったが、再現できなかったのは大変に申し訳ない。
ぱっと思いつくこのストラテジの欠点を上げる
単純にエントリーするかしないかの判断が標準化した価格が0を超えるかそうでないかであるので、ニュートラルな箇所で連続して取引が起こる。
見た目だけのトレード数稼ぎを行ってしまっているとも言える。
「ニュートラル」の定義をプログラミングしてやればある程度は回避可能。
※同一足でロングとショートが同時に行われているストラテジは詐欺ストラテジなので、こういった密集したトレードは1足1回のエントリーになっていることを確認する。
バーに付き1回
ではなく、バー終値に1回
の判断でありトレンドフォロー。なおかつVolume
が大きくなってからエントリーするので....
天井でロングする(右側で底ショートもしている)
したがって「シンプソン」に弱いと言える。
シンプソン相場専用のアイデアがなければ回避不可能
実際にストラテジは試行錯誤の結果偶然出た物をヨシとすることが多い。
今回は「ボリュームが低いときは損するから、取引しなければよいのでは?」という仮説がある程度正しいということがデータで証明できた。
このストラテジはこの記事を公開する前にハムトレの大会へ送信した。
より時間をかければまだまだ洗練されたものが作れそうなので、このコードは自由におパクり頂ければと思う。
(パクってできたストラテジを私に送信していただけますようよろしくおねがい致します)