前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
本記事では「暗号通貨のパンプ&ダンプスキームの検出」に関する論文をベースにbot開発の過程をまとめていきます。
Detecting Crypto Pump-and-Dump Schemes: A Thresholding-Based Approach to Handling Market Noisehttps://t.co/ctCJEV1MBs
— よだか(夜鷹/yodaka) (@yodakablog) March 22, 2025
ここでは、既存のBotに新しい戦略(ブレイクアウト戦略や機械学習モデル)を追加する方法を紹介します。
✅ 新戦略を追加する目的
- 📈 複数戦略でリスク分散(相場の変化に強い構成へ)
- 🧠 データ駆動型の意思決定(従来のルールベースと併用)
- 🔄 既存Botの柔軟な拡張(新モジュールとして組み込む)
🧩 戦略の追加方法:構成イメージ
strategies/ ├── breakout_strategy.py ← ブレイクアウト戦略 ├── ml_predictor.py ← MLモデル戦略 (e.g. XGBoost, LSTM) ├── __init__.py
メインロジック(executorなど)で戦略を切り替え可能にします:
from strategies.breakout_strategy import breakout_signal from strategies.ml_predictor import ml_predict_signal signal = breakout_signal(df) # or signal = ml_predict_signal(df)
📈 ① ブレイクアウト戦略の例
def breakout_signal(df, window=20): high = df['high'].rolling(window).max() low = df['low'].rolling(window).min() price = df['close'].iloc[-1] if price > high.iloc[-2]: return "buy" elif price < low.iloc[-2]: return "sell" else: return None
🔎 「過去N期間の高値を超えたら買い/安値を割ったら売り」というシンプルかつ強力なモメンタム型ロジック。
🧠 ② 機械学習モデルによる戦略の例
特徴量例(データ準備):
pythonコピーする編集するdf['returns'] = df['close'].pct_change()
df['ma_5'] = df['close'].rolling(5).mean()
df['volatility'] = df['returns'].rolling(10).std()
学習済みモデルを使った推論(例:XGBoost)
import joblib import pandas as pd model = joblib.load("models/xgb_model.pkl") def ml_predict_signal(df): latest = df.iloc[-1:][["returns", "ma_5", "volatility"]] pred = model.predict(latest)[0] return "buy" if pred == 1 else "sell" if pred == -1 else None
📌 学習モデルは過去データで「次の価格が上がる/下がる/横ばい」などを分類予測させます。
🔄 ③ 複数戦略を切り替えるロジック例
def select_signal(strategy_name, df): if strategy_name == "breakout": from strategies.breakout_strategy import breakout_signal return breakout_signal(df) elif strategy_name == "ml": from strategies.ml_predictor import ml_predict_signal return ml_predict_signal(df) else: return None
→ .env
やconfig.yaml
から選択戦略を動的に切り替え可能!
🔜 次のステップ候補
ステップ | 内容 |
---|---|
📁 strategies/ フォルダ構成の準備 | 既存Botから切り出し・共通化 |
⚙️ config.yaml に戦略切替パラメータを追加 | strategy: breakout など |
📉 学習モデルの作成 or 取得 | XGBoost / LSTMなど |
🧪 バックテストによる精度評価 | 各戦略の勝率・収益比較 |
次に進める内容としては:
breakout_strategy.py
を完成させたい- ML戦略の学習コード(XGBoost or LSTM)を作りたい
- 複数戦略を切り替える管理ロジックを構築したい
などがあります。

次回は、他通貨ペアのBotを追加し、複数のBotを並列で運用する方法について、設計から実装、運用までを具体的に説明します。
-
-
開発記録#166(2025/4/2)「論文ベースのbot開発フローpart.28 複数通貨ペアBotの並列運用」
続きを見る
👇ラジオで話したこと
新戦略追加|単一Botから「多機能Bot」への拡張
タイトル:Botを進化させる──ブレイクアウト戦略と機械学習モデルの導入法
【オープニング】
こんにちは、よだかです。
今日のテーマは「Botに新しい戦略を追加する方法」。
開発がある程度進んだら、「今のロジックだけでいいのか?」「もっと多様な相場に対応できないか?」と感じることが増えてきます。
そこで今回は、既存のBotを進化させるために、新しい売買戦略を組み込む方法を、初心者の方にもわかるようにお話ししていきます。
【セクション1|なぜ新しい戦略を追加するのか?】
まず、そもそもなぜ新戦略を追加する必要があるのか?
理由は大きく3つあります。
📈 1. 複数戦略によるリスク分散
→ たったひとつのロジックだけでは、相場の変化に対応できません。複数の戦略を持てば、異なる市況に強くなれます。
🧠 2. データ駆動型の意思決定を取り入れる
→ 従来のルールベース戦略だけでなく、機械学習を使った「統計的に優位な判断」も組み合わせることで、より精度の高い運用が可能になります。
🔄 3. Botの拡張性アップ
→ 設計の段階でモジュール化しておけば、あとからどんどん新しいロジックを追加できる、柔軟なBotに育てられます。
【セクション2|実際の戦略追加イメージ】
では、具体的にどうやって新戦略を追加するかを見ていきましょう。
🧩ファイル構成イメージ:
strategies/ ├── breakout_strategy.py ← ブレイクアウト戦略 ├── ml_predictor.py ← 機械学習ベースの戦略 ├── __init__.py
**メインの実行プログラム(executor)**では、戦略をインポートして切り替えるだけ。
例えばこんな風に:
from strategies.breakout_strategy import breakout_signal from strategies.ml_predictor import ml_predict_signal signal = breakout_signal(df) # or signal = ml_predict_signal(df)
戦略を「差し替え可能なパーツ」にしておくイメージですね。
【セクション3|追加する戦略の具体例】
では、それぞれの戦略をもう少し詳しく紹介します。
📈① ブレイクアウト戦略
シンプルですが、非常に効果的なモメンタム型ロジックです。
- 過去N期間の高値を超えたら買い
- 安値を割ったら売り
コードはこんな感じ:
def breakout_signal(df, window=20): high = df['high'].rolling(window).max() low = df['low'].rolling(window).min() price = df['close'].iloc[-1] if price > high.iloc[-2]: return "buy" elif price < low.iloc[-2]: return "sell" else: return None
→ 相場が「勢いよく動いたとき」を捉える設計です。特にトレンド相場に強い!
🧠② 機械学習(ML)戦略
こちらは、データからパターンを学習させるアプローチ。
まず、特徴量を作成します。 例:
df['returns'] = df['close'].pct_change() df['ma_5'] = df['close'].rolling(5).mean() df['volatility'] = df['returns'].rolling(10).std()
それを使って、あらかじめ学習済みのモデル(たとえばXGBoost)に予測させます。
import joblib model = joblib.load("models/xgb_model.pkl") def ml_predict_signal(df): latest = df.iloc[-1:][["returns", "ma_5", "volatility"]] pred = model.predict(latest)[0] return "buy" if pred == 1 else "sell" if pred == -1 else None
→ 「次に上がるか下がるか」をAIに判定させ、それに応じて売買を行う、という流れですね。
【セクション4|複数戦略の切り替え設計】
そして、ここが大事。
複数戦略をどう切り替えるか?
ロジック例はこうです:
def select_signal(strategy_name, df): if strategy_name == "breakout": from strategies.breakout_strategy import breakout_signal return breakout_signal(df) elif strategy_name == "ml": from strategies.ml_predictor import ml_predict_signal return ml_predict_signal(df) else: return None
.env
ファイルやconfig.yaml
に、
strategy: breakout
みたいに書いておけば、Botを再起動するだけで戦略を切り替えられます。
→ 現場で戦略を変更する柔軟性が手に入るわけです。
【ラストセクション|まとめと次のステップ】
今日お話ししたポイントをまとめます。
- 📈 ブレイクアウト戦略でトレンドを捉える
- 🧠 機械学習戦略でデータからパターンを掘り出す
- 🔄 モジュール化と戦略切替でBotを柔軟に進化させる
ここまでできれば、Botの性能はぐっと上がりますし、何より「戦略追加が怖くなくなる」んです。
🔜次回予告
次回は、さらにスケールアップ!
他通貨ペアのBotを追加して、複数のBotを並列運用する方法について、設計から実装、運用までを具体的に解説していきます。
Bot開発の"本格的なチーム化"に向けた第一歩です。
ぜひお楽しみに!
おまけトーク|テーマ:戦略を増やすとき、気をつけるべきこと
【タイトル】
「戦略を増やす前に、まず1本を安定させよう」
さて、ここからはちょっとおまけトークです。
今、新しい戦略をBotに追加していく方法を紹介しましたが──
実際に、いま私自身がMMbotを作りながら感じている、リアルなことを少し話してみたいと思います。
【セクション1|戦略を増やすメリット・デメリット】
まず、戦略を増やすことにはもちろんメリットがあります。
リスクを分散できるし、色んな相場に対応できる可能性も広がります。
でも──
戦略を増やした分だけ、管理する負荷も確実に増えます。
たとえば、
- どの戦略が動いているのか?
- どの戦略でエラーが出ているのか?
- どの戦略が実際に稼げているのか?
これを、全部ちゃんと追いかけなきゃいけない。
単純に「戦略が2本になったら、管理工数も2倍になる」と考えたほうがいいです。
戦略の数=手間も増える。
これは甘く見ないほうがいいなと、いま実感しています。
【セクション2|まずは1本を安定させること】
だから、初心者の方に本気で伝えたいのはこれです。
「まず1本、安定して走らせること。」
勝率、損益、エラー発生率──
このあたりが「ほぼ想定通り」で回るBotを、まず1本きちんと作る。
そこまでは、絶対に焦らないほうがいいです。
Botって、本番に出すと必ず想定外の動きをしてきます。
小さなバグ、微妙なパフォーマンス低下、APIの仕様変更、思わぬ市場変動。
そういうのにきちんと気づいて、手を打てるか?
その能力を鍛えるのに、まずは「単戦略Botを1本安定させる」フェーズがめちゃくちゃ大事だと、私は感じています。
【ラストまとめ】
戦略を増やすのは、そのあとでも遅くない。
まず1本、確かなものを。
それが、結果的には一番早く、強いBot運用にたどり着く近道だと思います。
──以上、いまMMbot開発中のリアルな実感から、おまけトークでした。
それではまた次回の放送でお会いましょう。
よだかでした!