【TradingView】仮想通貨取引ストラテジを作る 5日目 「シンプソン見分けれない?」【Pine】

June 10, 2020

ビットコインでボッターが皆損するシンプソン相場。いいことなにもない。しかし未だシンプソンの兆しを掴む手法はない。せめてシンプソン相場の戻りだけでも取れたらと考えた。

title

はむとれで大会が開催中!

今回作成したコードはそのままはむとれの大会へ応募した。ストラテジ名をとにかく明るい八つ墓村として提出(BFS-Xで稼働している私の物とは別物)

現在開催中のためぜひとも挑戦してもらいたい。

ストラテジー開発大会~BATTLE OF THE BOT RETURNS~

これで5個目

本題:シンプソン相場見分けられないか?

本日は今まで使ってきた「標準化」と「尖度」を使ってなんとかシンプソン相場を見分けられないか、という実験である。

先に結論

シンプソンのスタートから見分けるのはこの記事では不可能。

このストラテジは反対側の戻りを僅かながら検出した。

結果的にある程度は見分けられているためPFはプラスになっているが、シンプソンでない箇所も逆張りしてしまう。

サンプル数が少なく本運用には不安が残る結果。

大口に仕掛けられてる?

シンプソンは偶然発生するものではなくその異様な形状からかならずどこぞの「大口」が仕掛けていると考えている。

シンプソン(またはシンプソンズ)とは

ビットコインの相場において時々見られるチャートの形状。

image-20200609234419165

「ザ・シンプソンズ」というアメリカのTVアニメに出てくるキャラクターに似ているためそう呼ばれている。

2476932129_97b95b9f32_o

Joe Shlabotnik氏による写真 https://www.flickr.com/photos/joeshlabotnik/2476932129/ より引用(ライセンス:CC2.0)

頭の形がまさにソレである。

BOTが損する相場

前回も述べたが、基本的にビットコインはまだ成長段階のチャートでありシンプルな「トレンドフォロー」戦略で稼げている状態である。

よってシンプルなボットは概ねトレンドフォローが多いのではないかと考える。

しかし、それをあざ笑うかのようにこの相場が現れるとボットは次のように動作することが多い。

image-20200608153650954

天井でロング。よく見ると右側、底でショートしている。こんなトレードしてしまったらお財布が大恐慌である。

動いた方向にポジションを取ることが多いので、最悪上の画像のようになりがち。

初心者ボッターが単純にトレンドフォローで相場に入ってこれない理由の一つだと言える。

どうやって判別するのか

まず残念ながらシンプソンが発生する最初の兆しはこの方法では取れない。しかし、発生した「」の戻りは取る方法はないだろうか。

これは大口が「仕掛けて」来たところの返りを取れば良いと仮定する。

連日の戦略作成記事にて何度も出てきている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_kurtosisplotに色を付けるのを忘れており青線が複数存在するので注意。上のコードでは修正しtealにしてある。

売買条件

最後のconditionと付いている変数郡がエントリーの条件である。

ここだけ解説しておく。

close_Zscoreが0より大きいということは、標準化した終値が正の値。つまり「価格が上昇している」の判定である。

この状態でxbt_pi_spiketrueすなわち「XBTUSDPIの尖度が高い=異常に尖ったチャートになった」と判定できる。

つまりここがポジションが大量に積まれたポイントで「大口がしかけてきているかも?」と仮定する。

なんかETHのPIも見てるのだが?

見ている。

少しでも勝率を上げるための策として試験的に導入した。

これは逆にETHに仕掛けが入っているときに引きずられているだけの相場はシンプソンとは言えなさそうなのでは?という仮定で逆にスルーするプログラムを入れてみたところ、僅かに戦績が上昇したため置いている。

クローズ

クローズ条件はいずれの尖度も0より小さくなった時。つまり相場の熱が消えてきたと判断されたらクローズする。

結果

はむとれ大会中なのでByBitで見る。15分足。

XBTUSDPIBITMEXの物だが、世界中のBTC相場は相関しているのでどのチャートに適応しても根本的にはOKのはずだ。

image-20200610001454620

まず、PFは高いが相変わらずトレード回数が少ないため信頼性は低い。

またストラテジテスタの「パフォーマンスサマリー」を見ると

image-20200610001548615

image-20200610001604830

以前解説したシャープレシオはそれほど高くない(できれば1欲しい)

チャートを見る

image-20200610002624042

ココ最近シンプソンと呼ばれるチャートを描く職人が減っているため直近の物しかないがこのようにうまく取れているようにもみえる。

しかしながら

image-20200610001749584

こんな風にあれてしまう箇所もある(奇跡的にほぼ勝ちになっているが...)

長い間PIの尖度が高いのでかなり売り買いがあった?もしかして大口が仕込んでいる箇所か?

image-20200610003040307

大きなバトルの結果トレンド発生に繋がったとも言えるかもしれない。

反応しないこともある

image-20200610004513555

無駄にエントリーしている箇所もあるかと思えば、こういう完全スルーの箇所もある。

BITMEXではない取引所主体で価格がうごいたか?(適当)

※スクリーンショットで青になっている線はETHUSDPIの尖度ではなくCloseの尖度。色が指定されてなかったので上のコードでは修正済み。

より良くするために

まだまだ判定が甘い印象。よりシンプソンの判定基準を洗練させる余地がありそう。

例えば前回使ったボリューム等も加味するのも良いかもしれない。

おまけ

なぜかbitFlyerに当てはめるとより強い。

image-20200610001931744

しかもシャープレシオがいい感じになっている

image-20200610001947560

相変わらずトレード回数が極めて少ないので「実用」には危険だと言えるので慎重になって頂ければと思う。

bFだけ異様に逆張りが取れるのは、トレンドフォロー系Botterの多さを物語っているのだろうか?

このあたりは謎である。

さいごに

そろそろ実験的内容の記事が増えてきそうである。

実は私自身戦略作成に関しては苦手で、これもまた試行錯誤の過程であることをある程度ご理解頂ければと思う。

ただ「100%適当じゃなくて一応順を追って戦略考えてますよ」というエッセンスを感じて頂けたのであれば幸いだ。

この記事をシェア:

author icon

仮想トイレ @CrypticToilet
プログラミングや仮想通貨のシステムトレードに関する情報を更新中!どんな情報を流しても詰まらないトイレ。