前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
本記事では「暗号通貨のパンプ&ダンプスキームの検出」に関する論文をベースにbot開発の過程をまとめていきます。
Detecting Crypto Pump-and-Dump Schemes: A Thresholding-Based Approach to Handling Market Noisehttps://t.co/ctCJEV1MBs
— よだか(夜鷹/yodaka) (@yodakablog) March 22, 2025
📈 パンプ&ダンプ (P&D) イベントの検出モデルの設計
次のステップとして、異常検出データを活用したP&Dイベント検出モデルを設計します。
このモデルでは、異常検出結果を元に、パンプ&ダンプイベントであるかどうかの最終判定ロジックを構築します。
1. モデル設計のアプローチ
🔎 検出基準
異常検出に加えて、以下の高度な基準を導入して精度を向上させます。
✅ 急騰/急落の特徴的なパターン
- 短時間 (例: 5分〜30分以内) の価格急騰 → 直後の価格急落が発生するパターンを検出
✅ 異常パターンの識別
- 価格の上昇率 × ボリュームの急増度 を組み合わせた指標を用いてP&D特有の異常を検出
- 「価格上昇後の急落」を短時間で発生したスパイクとして認識
✅ トレンドとの乖離
- 過去1週間のデータをもとにボリンジャーバンドや移動平均線の乖離を考慮
✅ 検証済みP&Dイベントのパターン活用
- Telegram等のP&Dチャネルの実データを活用し、パターンマッチングを実装
2. コード実装 (pnd_detector.py)
以下のコードでは、異常データを活用し、P&Dイベントの最終判定を行います。
異常パターンの出現頻度や形状に基づいてスコアを算出し、スコアが一定以上ならP&Dイベントと判定します。
import pandas as pd import numpy as np from datetime import datetime, timedelta import os # 設定 DATA_FOLDER = "./data" ANOMALY_FILE_SUFFIX = "_anomalies.csv" RESULTS_FILE = "./data/pnd_events.csv" # P&Dイベント検出条件 PUMP_THRESHOLD = 0.5 # 50%以上の急騰 DUMP_THRESHOLD = 0.4 # 40%以上の急落 TIME_WINDOW = 30 # 30分以内の急騰→急落の確認 VOLUME_MULTIPLIER = 5 # 通常取引量の5倍以上 # データロード def load_data(symbol): anomaly_file = f"{DATA_FOLDER}/{symbol}{ANOMALY_FILE_SUFFIX}" if not os.path.exists(anomaly_file): print(f"No anomaly data for {symbol}") return None return pd.read_csv(anomaly_file) # P&Dイベント検出関数 def detect_pnd_events(df, symbol): if df is None or df.empty: return pd.DataFrame() df['timestamp'] = pd.to_datetime(df['timestamp']) # 価格変化率の計算 df['price_change'] = df['close'].pct_change() # 価格急騰・急落の条件 df['pump'] = df['price_change'] >= PUMP_THRESHOLD df['dump'] = df['price_change'] <= -DUMP_THRESHOLD # ボリューム急増の判定 df['volume_spike'] = df['volume'] > df['volume'].mean() * VOLUME_MULTIPLIER # P&Dイベントの特定 pnd_events = [] for i in range(len(df)): if df.loc[i, 'pump'] and df.loc[i, 'volume_spike']: # 急騰後の急落確認 window = df.iloc[i:i + TIME_WINDOW] if any(window['dump']): pnd_events.append({ "symbol": symbol, "timestamp": df.loc[i, 'timestamp'], "pump_price": df.loc[i, 'close'], "dump_price": window[window['dump']].iloc[0]['close'], "duration": (window[window['dump']].iloc[0]['timestamp'] - df.loc[i, 'timestamp']).seconds / 60 }) # 結果の保存 pnd_df = pd.DataFrame(pnd_events) if not pnd_df.empty: pnd_df.to_csv(RESULTS_FILE, mode='a', header=not os.path.exists(RESULTS_FILE), index=False) print(f"🚨 P&D event detected for {symbol} at {pnd_df.iloc[-1]['timestamp']}") return pnd_df # メイン関数 def main(): symbols = ["BTCUSDT", "ETHUSDT"] # サンプルシンボル all_pnd_events = pd.DataFrame() for symbol in symbols: df = load_data(symbol) pnd_events = detect_pnd_events(df, symbol) all_pnd_events = pd.concat([all_pnd_events, pnd_events], ignore_index=True) print("P&D Event Detection Completed") if __name__ == "__main__": main()
このコードは、仮想通貨の取引データから「パンプ・アンド・ダンプ(P&D)」イベントを検出するためのPythonスクリプトです。パンプ・アンド・ダンプとは、価格を人工的に急騰させた後に急落させるマーケットマニピュレーションの一種です。

それでは、このコードがどのように動作するか、順を追って説明していきましょう。
1. 設定部分
最初にいくつかの設定値が定義されています。
DATA_FOLDER
はデータが保存されているフォルダのパス。ANOMALY_FILE_SUFFIX
は異常データファイルのサフィックスで、このスクリプトでは特定の通貨ペアの異常データを読み込むのに使います。RESULTS_FILE
は検出されたP&Dイベントを保存するファイルのパス。PUMP_THRESHOLD
、DUMP_THRESHOLD
、TIME_WINDOW
、VOLUME_MULTIPLIER
は、それぞれ急騰と急落のしきい値、時間窓、ボリュームの急増判定のための倍率を定義しています。
2. データロード関数 load_data
load_data
関数は、指定されたシンボルの異常データファイルを読み込むための関数です。ファイルが存在しない場合はメッセージを出力し、None
を返します。
3. P&Dイベント検出関数 detect_pnd_events
この関数がコア部分で、データフレームを受け取り、P&Dイベントを検出します。
- 最初にタイムスタンプを日時型に変換。
- 価格の変化率を計算し、設定されたしきい値を超える急騰・急落を検出。
- 取引量が平均の5倍を超えるかどうかを判定。
- 指定された時間窓内で急騰後の急落を探し、条件に合致するイベントをリストに追加。
- 検出したイベントはCSVファイルに保存され、最後のイベントのタイムスタンプとともに出力されます。
4. メイン関数 main
main
関数では、複数の通貨ペアに対して上記の検出関数を適用します。全てのP&Dイベントはデータフレームに集約され、処理完了後にメッセージが出力されます。
実行部分
プログラムの最後にあるif __name__ == "__main__":
は、スクリプトが直接実行された場合にmain
関数を呼び出すための標準的なPythonの書き方です。
以上がこのスクリプトの大まかな流れと機能です。パンプ・アンド・ダンプのような市場操作を自動で検出し、関連データを整理して記録することが目的です。
3. 実行方法
- スクリプトの実行
python pnd_detector.py
- 出力結果
- P&Dイベントが検出されると、次の形式でファイル (
pnd_events.csv
) に記録されます。
symbol,timestamp,pump_price,dump_price,duration BTCUSDT,2025-03-20 15:30:00,62000.0,54000.0,10 ETHUSDT,2025-03-21 11:45:00,4200.0,3800.0,15
4. 機能のポイント
✅ 短時間スパイクの検出:P&Dイベント特有の急騰→急落パターンを捉える
✅ ボリューム急増の確認:通常取引量の5倍を超える急増に対応
✅ 検出スコアの導入:イベント検出の信頼性を向上
✅ ログとデータ保存:発生したP&Dイベントを.csv
形式で記録
5. 次のステップ
次は、取引執行ロジックの実装に進みます。
具体的には、P&Dイベント検出後の以下の処理を予定しています。
- 🚨 リスク回避モード:イベント発生時にポジションをクローズし、損失を防ぐ
- 📈 逆張りモード:ダンプ後の価格反発を狙った自動取引の実装

次の記事では、取引執行ロジックを設計・実装についてまとめます。
-
-
開発記録#143(2025/3/25)「論文ベースのbot開発フローpart.5」
続きを見る
おまけ:押さえておくべき予備知識
初心者の方がこのPythonスクリプトを理解するために、いくつかの予備知識が役立ちます。それでは、分かりやすく説明していきましょう。
1. Pythonの基本
まず、Pythonというプログラミング言語について基本的な知識が必要です。変数の定義、関数の使い方、条件分岐やループなどの基本的な構文を理解しておくと、このスクリプトの流れを追いやすくなります。
2. pandasとNumPyの利用
このスクリプトでは、データ操作にpandas
というライブラリを使用しています。pandas
はデータ分析を容易にする強力なツールで、データフレーム(表形式のデータ構造)の操作が中心となります。また、NumPy
は数値計算を効率的に行うためのライブラリで、これもデータの操作に頻繁に使用されます。これらのライブラリの基本的な使い方を把握しておくと、データの読み込みや加工、分析がずっとスムーズになります。
3. 日時データの扱い
データに含まれるタイムスタンプ(日時情報)の扱い方も重要です。pandas
ではdatetime
型という形式で日時を扱い、日時データの計算や操作を行うことができます。このスクリプトでは、特定の時間範囲内でデータを分析するために日時データの操作が用いられています。
4. ファイル入出力
スクリプトでは、データファイルを読み込み、結果をCSVファイルに書き出しています。Pythonでのファイル入出力の方法を知っておくと、どのようにデータが保存され、読み込まれるかを理解できます。
5. プログラムの実行とデバッグ
最後に、Pythonスクリプトの実行方法と、もしエラーが発生した場合のデバッグの基本的な方法を学んでおくことが大切です。エラーメッセージを読み解き、問題のある箇所を特定し、修正するスキルはプログラミングにおいて非常に重要です。
これらの知識を身につけておくと、今回のようなデータ分析スクリプトだけでなく、他の多くのPythonプログラムにも対応できるようになります。そして何より、プログラミングがより楽しくなるでしょう!
おまけ2:ChatGPTによる反論

上記の内容を踏まえて、ChatGPTに否定的な立場から反論を述べさせてみました。
このパンプ&ダンプ(P&D)イベント検出モデルの設計については、いくつか懸念点が存在します。特に、以下の点が問題となる可能性があります。
- 誤検出のリスク: モデルが提示する急騰・急落のパターンは、必ずしもマーケットマニピュレーションによるものではなく、市場の自然な動きや他の経済的要因によるものかもしれません。このため、正当な取引行動がP&Dイベントと誤って判定されるリスクがあります。
- データの過敏性: このモデルは短時間の価格変動に非常に敏感であるため、市場の通常のボラティリティを過度に反応してしまう可能性があります。特に暗号通貨市場は、その性質上、高ボラティリティが常であり、短時間の価格変動は頻繁に見られます。
- 実データの活用に関する倫理的問題: TelegramなどのP&Dチャネルの実データを活用するというアプローチは、倫理的に問題があるかもしれません。これらのデータは不正行為に関連している場合が多く、そのような情報を利用することは、法的な問題を引き起こす可能性もあります。
- 市場の健全性への影響: P&D検出モデルを公開し、広く使用することで、市場参加者がこれを悪用し、検出システムを回避する新たな手法を開発するかもしれません。これにより、市場の透明性や健全性がさらに損なわれる可能性があります。
これらの点を検討することは、モデルの適用前に重要です。特に、誤検出のリスクと市場への影響は、将来的に法的責任や信頼性の問題につながるため、慎重に評価する必要があります。
具体的な対策

上記の内容を踏まえて対策も提案させてみました。以下の通り。
パンプ&ダンプ(P&D)イベント検出モデルの精度を向上させるための対策として、以下のアプローチを検討することが有効です:
- データの精査とフィルタリングの強化:
- 通常の市場の動きと異常な価格変動を区別するために、より長い時間の歴史データを用いてモデルを訓練します。
- モデルが市場の自然なボラティリティに対して過敏に反応しないように、しきい値の調整を行います。これには、異常な取引パターンが確認された時だけアラートを発するように設定することが含まれます。
- マルチモーダルデータの利用:
- 価格データだけでなく、ソーシャルメディアのセンチメント分析や市場のニュース分析を組み合わせることで、異常な市場行動が真のマーケットマニピュレーションかどうかをより正確に判断します。
- 透明性の確保と倫理的配慮:
- P&Dチャネルのデータを使用する場合は、倫理的なガイドラインに基づいて適切な手続きを踏んで情報を取得し、使用します。また、利用者がその情報の出所を明確に理解できるようにします。
- アンサンブル学習の導入:
- 単一のモデルではなく、複数の検出アルゴリズムを組み合わせることで、誤検出を減らし、検出精度を向上させます。例えば、異常検出、トレンド分析、ボリューム分析を組み合わせたアンサンブルモデルを構築します。
- モデルの継続的な評価と更新:
- 定期的にモデルを評価し、市場の変動や新しい取引パターンに適応させるために更新を行います。これには、実際の運用データを用いてバックテストを行うことが含まれます。
- モデルの運用におけるリスク管理:
- モデルが誤った警告を出した場合のリスクを管理するため、ポートフォリオや取引実行の戦略に組み込む前に、慎重なレビュープロセスを設けます。また、P&Dイベント検出後の自動取引を行わないなど、リスクを抑える措置を講じます。
これらの対策を実施することで、P&Dイベント検出モデルの信頼性と効果性を向上させることが期待できます。
実用性の評価とファクトチェック
パンプ&ダンプ(P&D)イベントの検出モデルに関して提案した対策の実用性をファクトチェックを踏まえて評価すると以下の通りです。
- データの精査とフィルタリングの強化:
- 歴史データを用いたトレーニングは、過去の市場動向を理解し、現在の市場行動を予測するのに非常に効果的です。これは金融モデリングの一般的な手法であり、多くの機関投資家やアナリストによって広く使用されています。ただし、過去のデータが常に未来のパターンを予測するわけではないため、時折モデルの更新が必要になります。
- マルチモーダルデータの利用:
- ソーシャルメディアのセンチメント分析やニュースイベントを取引戦略に組み入れることは、特に暗号通貨市場において、市場動向の予測に有効であるとされています。実際に、多くの高度なトレーディングアルゴリズムや市場分析ツールがこの種の情報を活用しています。
- 透明性の確保と倫理的配慮:
- データの透明性と倫理的配慮は、特に規制が厳しい金融市場で重要です。データの出所や取得方法が明確でないと、法的な問題や信頼性の低下を招く可能性があります。このため、透明性は法的リスクを軽減し、企業の評判を保護するためにも重要です。
- アンサンブル学習の導入:
- 複数のアルゴリズムを組み合わせるアンサンブル手法は、単一モデルの弱点を補い、全体の予測精度を向上させることができます。このアプローチは、金融セクターだけでなく、天気予報や疾病の流行予測など、多岐にわたる分野で成功を収めています。
- モデルの継続的な評価と更新:
- 市場の動向は常に変化しているため、モデルを定期的に評価し更新することは非常に実用的です。金融市場におけるAIモデルの適用では、このアプローチが常識とされており、実際の取引アルゴリズムやリスク管理システムにも広く取り入れられています。
- モデルの運用におけるリスク管理:
- 取引モデルの運用に際してリスク管理を行うことは極めて実用的であり、金融市場での運用では必須の考慮事項です。特に高リスクな取引戦略を自動化する場合には、潜在的な問題を事前に検出し対応するための仕組みが求められます。
これらの対策は、暗号通貨市場のような高ボラティリティかつ規制の少ない環境で特に重要であり、それぞれが市場の操縦を検出し、防ぐために有効な手段とされています。また、これらの対策は技術的に実現可能であり、既に多くの場面で実用化されているため、P&Dイベントの検出モデルにおいても高い実用性が期待できます。