Bot

開発記録#158(2025/3/25)「論文ベースのbot開発フローpart.20」

2025年3月25日

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

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

🚀 トレードロジックの強化

まずは、トレードロジックの強化に取り組みます。具体的には以下の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. 実行方法

  1. 依存ライブラリのインストール
pip install pandas ccxt numpy
  1. スクリプトの実行
python enhanced_trade_logic.py

6. 改善後の期待効果

取引の精度向上 → ATRとRSIに基づくエントリーポイントの最適化
P&Dイベントの精度向上 → 異常検出とRSIの反発を組み合わせたトリガー設計
リスク管理の強化 → ATR活用による相場の不安定さ検知


7. 次のステップ

次は、以下のタスクに進みます。

セキュリティ強化 (APIキーのローテーションとデータバックアップの導入)
パフォーマンス最適化 (非同期処理とモデルの高速化)

Yodaka

次回の記事では、セキュリティ強化 (APIキーのローテーションとデータバックアップの導入)についてまとめます。

関連
開発記録#159(2025/3/25)「論文ベースのbot開発フローpart.21」

続きを見る

-Bot