Bot

開発記録#165(2025/4/2)「論文ベースのbot開発フローpart.27 新戦略の追加」

2025年4月2日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

本記事では「暗号通貨のパンプ&ダンプスキームの検出」に関する論文をベースにbot開発の過程をまとめていきます。

ここでは、既存の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

.envconfig.yamlから選択戦略を動的に切り替え可能!


🔜 次のステップ候補

ステップ内容
📁 strategies/ フォルダ構成の準備既存Botから切り出し・共通化
⚙️ config.yaml に戦略切替パラメータを追加strategy: breakout など
📉 学習モデルの作成 or 取得XGBoost / LSTMなど
🧪 バックテストによる精度評価各戦略の勝率・収益比較

次に進める内容としては:

  • breakout_strategy.py を完成させたい
  • ML戦略の学習コード(XGBoost or LSTM)を作りたい
  • 複数戦略を切り替える管理ロジックを構築したい

などがあります。

Yodaka

次回は、他通貨ペアの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開発中のリアルな実感から、おまけトークでした。
それではまた次回の放送でお会いましょう。
よだかでした!

-Bot