今回作成したコードはそのままはむとれの大会へ応募した。ストラテジ名をとにかく明るい八つ墓村
として提出(BFS-Xで稼働している私の物とは別物)
現在開催中のためぜひとも挑戦してもらいたい。
ストラテジー開発大会~BATTLE OF THE BOT RETURNS~
これで5個目
本日は今まで使ってきた「標準化」と「尖度」を使ってなんとかシンプソン相場を見分けられないか、という実験である。
シンプソンのスタートから見分けるのはこの記事では不可能。
このストラテジは反対側の戻りを僅かながら検出した。
結果的にある程度は見分けられているためPFはプラスになっているが、シンプソンでない箇所も逆張りしてしまう。
サンプル数が少なく本運用には不安が残る結果。
シンプソンは偶然発生するものではなくその異様な形状からかならずどこぞの「大口」が仕掛けていると考えている。
ビットコインの相場において時々見られるチャートの形状。
「ザ・シンプソンズ」というアメリカのTVアニメに出てくるキャラクターに似ているためそう呼ばれている。
※Joe Shlabotnik
氏による写真 https://www.flickr.com/photos/joeshlabotnik/2476932129/ より引用(ライセンス:CC2.0)
頭の形がまさにソレである。
前回も述べたが、基本的にビットコインはまだ成長段階のチャートでありシンプルな「トレンドフォロー」戦略で稼げている状態である。
よってシンプルなボットは概ねトレンドフォローが多いのではないかと考える。
しかし、それをあざ笑うかのようにこの相場が現れるとボットは次のように動作することが多い。
天井でロング。よく見ると右側、底でショートしている。こんなトレードしてしまったらお財布が大恐慌である。
動いた方向にポジションを取ることが多いので、最悪上の画像のようになりがち。
初心者ボッターが単純にトレンドフォローで相場に入ってこれない理由の一つだと言える。
まず残念ながらシンプソンが発生する最初の兆しはこの方法では取れない。しかし、発生した「後」の戻りは取る方法はないだろうか。
これは大口が**「仕掛けて」来たところの返り**を取れば良いと仮定する。
連日の戦略作成記事にて何度も出てきているXBTUSDPI
。これはBITMEX
で異様にポジションが積まれている時にグラフが跳ねる。
かなりシンプルで正直穴だらけの戦略かもしれないが、今までの記事で作ってきた「標準化
」と「尖度
」を使ってここが異常値になった時に逆張りをしてやろうという戦略である。
BITMEX
は世界的に見ても大きな取引所になっており仕掛け対象になりやすい取引所だ。TradingView
(Pine Script)
から情報が取れるため使用している。
なんと全公開。無料。
//@version=4
strategy("とにかく明るい八つ墓村", overlay=false)
n = input(type=input.integer,defval=200 ,title="標準化に使用する期間")
k_shikiichi = input(28, title="尖っていると判断する閾値")
k_n = input(43,title="尖度を計測する期間")
eth_pi = security("ETHUSDPI", timeframe.period, close)
xbt_pi = security("XBTUSDPI", timeframe.period, close)
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)
// volumeの尖度
volume_kurtosis = sma(pow(volume_Zscore,4),k_n) - 3
bgcolor(volume_kurtosis <= 0 ? color.gray : na)
plot(volume_kurtosis,color=color.green)
//closeの尖度
close_kurtosis = sma(pow(close_Zscore,4),k_n) - 3
bgcolor(close_kurtosis <= 0 ? color.gray : na)
plot(close_kurtosis,color=color.teal)
//xbt_pi_Zscoreの尖度
xbt_pi_kurtosis = sma(pow(xbt_pi_Zscore,4),k_n) - 3
xbt_pi_spike = xbt_pi_kurtosis > k_shikiichi
bgcolor(xbt_pi_spike ? color.red : na)
bgcolor(xbt_pi_kurtosis <= 0 ? color.gray : na)
plot(xbt_pi_kurtosis,color=color.red)
//eth_pi_Zscoreの尖度
eth_pi_kurtosis = sma(pow(eth_pi_Zscore,4),k_n) - 3
eth_pi_spike = eth_pi_kurtosis > k_shikiichi
bgcolor(eth_pi_spike ? color.blue : na)
bgcolor(eth_pi_kurtosis <= 0 ? color.gray : na)
plot(eth_pi_kurtosis,color=color.aqua)
longCondition = close_Zscore < 0 and xbt_pi_spike and not eth_pi_spike
shortCondition = close_Zscore > 0 and xbt_pi_spike and not eth_pi_spike
closeCondition = xbt_pi_kurtosis <= 0 and close_kurtosis <=0 and 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()
※記事中のスクリーンショットではclose_kurtosis
のplot
に色を付けるのを忘れており青線が複数存在するので注意。上のコードでは修正しteal
にしてある。
最後のcondition
と付いている変数郡がエントリーの条件である。
ここだけ解説しておく。
close_Zscore
が0より大きいということは、標準化した終値が正の値。つまり「価格が上昇している」の判定である。
この状態でxbt_pi_spike
がtrue
すなわち「XBTUSDPI
の尖度が高い=異常に尖ったチャートになった」と判定できる。
つまりここがポジションが大量に積まれたポイントで「大口がしかけてきているかも?」と仮定する。
見ている。
少しでも勝率を上げるための策として試験的に導入した。
これは逆にETHに仕掛けが入っているときに引きずられているだけの相場はシンプソンとは言えなさそうなのでは?という仮定で逆にスルーするプログラムを入れてみたところ、僅かに戦績が上昇したため置いている。
クローズ条件はいずれの尖度も0より小さくなった時。つまり相場の熱が消えてきたと判断されたらクローズする。
はむとれ大会中なのでByBit
で見る。15分足。
XBTUSDPI
はBITMEX
の物だが、世界中のBTC相場は相関しているのでどのチャートに適応しても根本的にはOKのはずだ。
まず、PFは高いが相変わらずトレード回数が少ないため信頼性は低い。
またストラテジテスタの「パフォーマンスサマリー」を見ると
以前解説したシャープレシオはそれほど高くない(できれば1欲しい)
ココ最近シンプソンと呼ばれるチャートを描く職人が減っているため直近の物しかないがこのようにうまく取れているようにもみえる。
しかしながら
こんな風にあれてしまう箇所もある(奇跡的にほぼ勝ちになっているが...)
長い間PI
の尖度が高いのでかなり売り買いがあった?もしかして大口が仕込んでいる箇所か?
大きなバトルの結果トレンド発生に繋がったとも言えるかもしれない。
無駄にエントリーしている箇所もあるかと思えば、こういう完全スルーの箇所もある。
BITMEX
ではない取引所主体で価格がうごいたか?(適当)
※スクリーンショットで青になっている線はETHUSDPI
の尖度ではなくClose
の尖度。色が指定されてなかったので上のコードでは修正済み。
まだまだ判定が甘い印象。よりシンプソンの判定基準を洗練させる余地がありそう。
例えば前回使ったボリューム等も加味するのも良いかもしれない。
なぜかbitFlyer
に当てはめるとより強い。
しかもシャープレシオがいい感じになっている
相変わらずトレード回数が極めて少ないので「実用」には危険だと言えるので慎重になって頂ければと思う。
bF
だけ異様に逆張りが取れるのは、トレンドフォロー系Botterの多さを物語っているのだろうか?
このあたりは謎である。
そろそろ実験的内容の記事が増えてきそうである。
実は私自身戦略作成に関しては苦手で、これもまた試行錯誤の過程であることをある程度ご理解頂ければと思う。
ただ「100%適当じゃなくて一応順を追って戦略考えてますよ」というエッセンスを感じて頂けたのであれば幸いだ。