消えたエッジの話 仮想通貨botter Advent Calendar 2024 22日目

https://qiita.com/advent-calendar/2024/botter



仮想通貨botter Advent Calender 2024の22日目の記事です。

# 消えたエッジ編


https://github.com/richmanbtc/mlbot_tutorial


## みんな大好きrichmanbtc式MLBOT



![スクリーンショット 2024-12-09 125022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573208/e2dce005-4fd7-9896-c073-99b6c2a8bb59.png)



<BR>


自分がbotを始めた2022/06
2023年はすでにrichmanbtc式MLBOTは効かなくなったという話が出ておりました。

<BR>


しかし、当時ChatGPTもろくになかった為、
richmanbtc式MLBOTのチュートリアルを必死に勉強していました。

<BR>


だって何やっていいか分からなかったから...

<BR>



https://note.com/nupinupinu/n/n505efd532226


<BR>


botterにとって技術的に参考になる記事はたくさんあると思いますが、
一番メンタル的に参考にしたのが、ぬぴぬぴぬ氏の記事でした






「今まで食べたパンの枚数さながら、試したbacktestの回数などはもはや覚えていません。」

上記の文言は痺れましたね。俺もやってやるぞ。と決意した事を覚えているし、
今でも忘れずにやっています








# 消えたエッジ編
<BR>
<BR>




下記はrichmanbtc式MLBOTのベースルールを使った累積リターンです。
基本的なロジックは12H足のATR

2022から2024の3月くらいまで12時間でBTCの価格が反発する
というサイクルがあった事が見られます

ATR6期間を算出し、0.2~0.25の範囲で反発



スタートは
2020-03-25 09:00:00+00:00	
2020-03-25 21:00:00+00:00
～
2024-11-03 09:00:00+00:00
2024-11-03 21:00:00+00:00

<BR>


本家richmanbtc式MLBOTでは15ｍ足でしたが、
自分が見つけたロジックは12Ｈ足でした

<BR>


ベースルール、ＭＬなしの累積リターンです



![output12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573208/ff1895c5-7e11-9dc2-63af-ed5423728f4e.png)





```
    # ATRを計算する関数
def calculate_atr(high, low, close, timeperiod):
 tr = np.maximum(high - low, np.abs(high - close.shift(1)), np.abs(low - close.shift(1)))
 atr = tr.rolling(window=timeperiod).mean()
 return atr

timeperiod = 6
df['ATR_2'] = calculate_atr(df['hi'], df['lo'], df['cl'], timeperiod)
df['ATR_shift'] = df['ATR_2'].shift(1)
df['ATR_shift'] = np.floor(df['ATR_shift'] * 10) / 10
```


ATRでは計算ミスしないように.shift(1)を使い
```

limit_price_dist_2 = df['ATR_shift'] * 0.25
limit_price_dist_2 = np.maximum(1, (limit_price_dist_2 /pips).round().fillna(1)) * pips

limit_price_dist = df['ATR_shift'] * 0.21
limit_price_dist = np.maximum(1, (limit_price_dist / pips).round().fillna(1)) * pips

# 終値から両側にlimit_price_distだけ離れたところに、買い指値と売り指値を出します
df['buy_price'] = df['cl'] - limit_price_dist_2
df['sell_price'] = df['cl'] + limit_price_dist
```





bybitのメイカー手数料は0.02 %
多めに見積もって0.04％でバックテストを作ってます


<BR>


<BR>



ML無手数料0.04％計算


<BR>






ML有手数料0.04％計算

![output13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573208/e4ff316f-7618-2e12-01eb-c18871abab2d.png)


richmanbtc式MLBOTは2023年”終わった”という話が出回っていたと思いますが（うろ覚え）12H足で2022年中盤からジワジワと右肩上がりでした。特に2023～2024の期間そこそこ強く。ML有では十分運用可能なレベルだったと思います。

<BR>

<BR>


MLのモデルは2023までを学習期間に使用して作成しました。



https://x.com/yonkusuki/status/1798731581416518064



<BR>



自分の旧損益グラフです（ロットをころころ変えてたので分かりにくい
2023年夏頃に当エッジに気付いていましたが、printもfor文も良く分かっていなかった自分に実運用に耐えれるMLを作成する事ができず、2023冬頃やっとまともなMLが作成出来ても、エッジの終焉3月頃になってしまいボコボコにやられました。

写真がこれしか残ってない...



![スクリーンショット 2024-12-09 122613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573208/5db84b6c-7f1e-829f-bed8-4693d01610a7.png)


やっとそこそこのMLも作成出来て、バックテスト通りに運用出来たのが2023/12頃
１月は強く１か月の勝率が90％の時もありましたが、
バックテストを見た通り2024-3月以降完全に相場が変わり効かなくなってしまいました。

<BR>
<BR>

このまま12H足が効いてくれたらS級だったのに( ;∀;)



<BR>
<BR>
<BR>




<BR>


消えたエッジの話、から分かることはある特定の値動きが終わると、また新しい値動きが出てくる可能性があること、終わったエッジというものが本当に終わったのか多角的に検証し続ける事が大事だと学びました。
<BR>
<BR>
15m→12H→？？？


<BR>
自分の様な一般人に新しく強いロジックを見つけるというのはとても難しいです。
過去の文献をしっかり調査して
Aという案を見つけたら

A1
A2
A3

上記がダメなら

A1-1
A1-2

などと検証する方法を各種変えて調査するしかないです。
MLbotに関する記事が2024のアドカレに多くとても嬉しいです。
botterの皆さん仲良くしてください！！！

<BR>

確認しやすいように公開してます。
気になった方はどうぞ

<BR>
<BR>



https://github.com/chanta093/-2024