前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
本記事では「暗号通貨のパンプ&ダンプスキームの検出」に関する論文をベースにbot開発の過程をまとめていきます。
Detecting Crypto Pump-and-Dump Schemes: A Thresholding-Based Approach to Handling Market Noisehttps://t.co/ctCJEV1MBs
— よだか(夜鷹/yodaka) (@yodakablog) March 22, 2025
🚀 トレードロジックの強化
まずは、トレードロジックの強化に取り組みます。具体的には以下の3つの要素を追加・改善します。
✅ ATR (Average True Range) を活用したボラティリティ分析
✅ RSI (Relative Strength Index) を用いたエントリーポイントの改善
✅ サポート&レジスタンスラインの組み込み
1. ATRを活用したボラティリティ分析
🔎 ATRとは?
ATR (Average True Range) は、価格の変動幅 (ボラティリティ) を測定する指標です。
- ATRが高い → 価格が大きく変動している (不安定な相場)
- ATRが低い → 価格が安定している (レンジ相場)
✅ 活用方法
- ATRが急上昇した際に「異常な価格変動」を検出し、リスク回避モードに切り替え
- ATRが一定値以上のときのみエントリーする (ノイズトレードの防止)
2. RSIを活用したエントリーポイントの最適化
🔎 RSIとは?
RSI (Relative Strength Index) は、買われすぎ (70以上) / 売られすぎ (30以下) を判断する指標です。
✅ 活用方法
- RSIが30以下 ➔ 買いシグナル
- RSIが70以上 ➔ 売りシグナル
- RSIとATRを組み合わせて「高ボラティリティ × RSIの反発」で精度の高いエントリーを実現
3. サポート&レジスタンスラインの組み込み
🔎 サポート&レジスタンスとは?
- サポートライン:価格が下げ止まりやすいライン
- レジスタンスライン:価格が上げ止まりやすいライン
✅ 活用方法
- サポートライン付近でRSIが30以下 → 買いシグナル
- レジスタンスライン付近でRSIが70以上 → 売りシグナル
4. 改善版トレードロジックの実装
✅ コード (enhanced_trade_logic.py)
import pandas as pd import numpy as np import ccxt from datetime import datetime, timedelta # Bybit API接続設定 exchange = ccxt.bybit({ 'apiKey': 'YOUR_API_KEY', 'secret': 'YOUR_API_SECRET' }) # パラメータ設定 ATR_PERIOD = 14 RSI_PERIOD = 14 ATR_THRESHOLD = 100 RSI_OVERBOUGHT = 70 RSI_OVERSOLD = 30 # データ取得 def fetch_data(symbol, timeframe="1h", limit=200): ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit) df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') return df # ATR計算 def calculate_atr(df, period=ATR_PERIOD): df['tr'] = np.maximum((df['high'] - df['low']), np.abs(df['high'] - df['close'].shift(1)), np.abs(df['low'] - df['close'].shift(1))) df['atr'] = df['tr'].rolling(window=period).mean() return df # RSI計算 def calculate_rsi(df, period=RSI_PERIOD): delta = df['close'].diff() gain = (delta.where(delta > 0, 0)).rolling(window=period).mean() loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean() rs = gain / loss df['rsi'] = 100 - (100 / (1 + rs)) return df # サポート&レジスタンスの計算 def calculate_support_resistance(df): df['support'] = df['low'].rolling(window=20).min() df['resistance'] = df['high'].rolling(window=20).max() return df # トレードロジック def trade_logic(df, symbol): for i in range(1, len(df)): if df['atr'].iloc[i] > ATR_THRESHOLD: # 高ボラティリティのみエントリー if df['rsi'].iloc[i] < RSI_OVERSOLD and df['close'].iloc[i] <= df['support'].iloc[i]: print(f"✅ {symbol} - BUY at {df['close'].iloc[i]}") exchange.create_order(symbol, 'market', 'buy', 0.01) elif df['rsi'].iloc[i] > RSI_OVERBOUGHT and df['close'].iloc[i] >= df['resistance'].iloc[i]: print(f"✅ {symbol} - SELL at {df['close'].iloc[i]}") exchange.create_order(symbol, 'market', 'sell', 0.01) # メイン処理 def main(): symbol = 'BTCUSDT' df = fetch_data(symbol) df = calculate_atr(df) df = calculate_rsi(df) df = calculate_support_resistance(df) trade_logic(df, symbol) if __name__ == "__main__": main()
5. 実行方法
- 依存ライブラリのインストール
pip install pandas ccxt numpy
- スクリプトの実行
python enhanced_trade_logic.py
6. 改善後の期待効果
✅ 取引の精度向上 → ATRとRSIに基づくエントリーポイントの最適化
✅ P&Dイベントの精度向上 → 異常検出とRSIの反発を組み合わせたトリガー設計
✅ リスク管理の強化 → ATR活用による相場の不安定さ検知
7. 次のステップ
次は、以下のタスクに進みます。
✅ セキュリティ強化 (APIキーのローテーションとデータバックアップの導入)
✅ パフォーマンス最適化 (非同期処理とモデルの高速化)

次回の記事では、セキュリティ強化 (APIキーのローテーションとデータバックアップの導入)についてまとめます。
-
-
開発記録#159(2025/3/25)「論文ベースのbot開発フローpart.21」
続きを見る