Bot

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

2025年3月25日

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

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

🚀 取引執行ロジックの実装

次のステップとして、P&Dイベント検出後に自動でトレードを実行する取引執行ロジックを設計・実装します。


1. 取引戦略の方針

📋 取引方針

本システムでは、2つのモードでの取引を実装します。

リスク回避モード(デフォルト)

  • P&Dイベント検出時に保有ポジションの自動クローズ
  • 直後の市場の急変動リスクを回避

逆張りモード(オプション)

  • P&Dイベント検出後に、価格のリバウンドを狙って自動エントリー
  • ダンプ後の価格回復を利用して利益を狙う

2. 実装方針

🔎 Bybit API を活用した取引処理

  • ccxtライブラリを使用してBybit APIと連携し、次の機能を実装します。
    • ポジション確認
    • ポジションのクローズ
    • 逆張りエントリー
    • 損切り (Stop Loss) / 利益確定 (Take Profit)

3. コード実装 (trade_executor.py)

import ccxt
import pandas as pd
import json
from datetime import datetime

# 設定ファイルの読み込み
with open("config.json", "r") as file:
    config = json.load(file)

API_KEY = config["bybit_api_key"]
API_SECRET = config["bybit_api_secret"]

# Bybit API認証
exchange = ccxt.bybit({
    'apiKey': API_KEY,
    'secret': API_SECRET,
    'enableRateLimit': True
})

# 取引設定
RISK_AVOIDANCE_MODE = True  # デフォルトはリスク回避モード
REVERSE_TRADE_MODE = False  # 逆張りモードはオプション
STOP_LOSS_PERCENT = 0.03    # 3%の損切りライン
TAKE_PROFIT_PERCENT = 0.05  # 5%の利益確定ライン

# ポジション確認
def get_position(symbol):
    positions = exchange.fetch_positions()
    for position in positions:
        if position['symbol'] == symbol:
            return position
    return None

# ポジションのクローズ
def close_position(symbol):
    position = get_position(symbol)
    if position:
        exchange.create_order(symbol, 'market', 'sell', position['size'])
        print(f"✅ Position closed for {symbol}")

# 逆張りエントリー (Buy)
def place_reverse_trade(symbol, entry_price):
    # エントリー価格、損切り、利益確定の計算
    stop_loss_price = entry_price * (1 - STOP_LOSS_PERCENT)
    take_profit_price = entry_price * (1 + TAKE_PROFIT_PERCENT)

    # 成行注文の実行
    exchange.create_order(symbol, 'market', 'buy', 0.01)
    print(f"📈 Reverse trade executed for {symbol}")

    # 損切り注文の設定
    exchange.create_order(symbol, 'stop', 'sell', 0.01, stop_loss_price)
    print(f"⛔ Stop loss set at {stop_loss_price}")

    # 利益確定注文の設定
    exchange.create_order(symbol, 'limit', 'sell', 0.01, take_profit_price)
    print(f"🎯 Take profit set at {take_profit_price}")

# P&Dイベントに応じたアクション
def handle_pnd_event(row):
    symbol = row['symbol']
    pump_price = row['pump_price']
    
    if RISK_AVOIDANCE_MODE:
        close_position(symbol)

    if REVERSE_TRADE_MODE:
        place_reverse_trade(symbol, pump_price)

# メイン処理
def main():
    pnd_events = pd.read_csv('./data/pnd_events.csv')

    for _, row in pnd_events.iterrows():
        print(f"🚨 Handling P&D event for {row['symbol']} at {row['timestamp']}")
        handle_pnd_event(row)

if __name__ == "__main__":
    main()

4. 実行方法

  1. ccxtのインストール
pip install ccxt
  1. APIキーの登録
  • config.jsonに以下の情報を追加
{
    "bybit_api_key": "YOUR_BYBIT_API_KEY",
    "bybit_api_secret": "YOUR_BYBIT_API_SECRET"
}

3.スクリプトの実行

python trade_executor.py

5. 動作の流れ

P&Dイベントの確認 → 自動でポジションのクローズ or 逆張りエントリー
✅ 逆張りモードでは、損切り (Stop Loss)利益確定 (Take Profit) の両方を自動設定
✅ エラーハンドリングにより、API通信エラーや注文失敗時の再試行も考慮


6. テスト戦略

  • バックテスト:過去のP&Dイベントデータを使用し、取引執行のシミュレーション
  • パラメータ調整:損切り幅、利益確定幅の最適化
  • データ分析:P&Dイベント後の価格推移を分析し、より高精度なエントリーポイントの特定

7. 今後の改善点

  1. 🚨 リスク管理の高度化
    • ATR (Average True Range) を用いた動的な損切り設定
  2. 🔍 P&D予測モデルの追加
    • 機械学習 (LSTM / DQN) による将来のP&Dイベント予測
  3. 📈 市場センチメント分析
    • SNSデータやニュースデータの活用によるリアルタイム予測の導入

8. 次のステップ

  • 🔍 バックテスト環境の構築
  • 📊 パフォーマンス評価とパラメータ調整
  • 🚨 リアルタイム運用時の監視システム設計
Yodaka

次のステップとして、バックテスト環境の構築に取り組みます。具体的には、以下の内容で進める予定です。

🚀 バックテスト環境の設計

データ読み込み:収集した過去データを用いて、シミュレーション用データセットを作成
シミュレーションエンジン

  • 仮想取引環境でP&Dイベント検出モデルを実行し、取引エントリーポイントと結果をシミュレーション
    評価指標の設計
  • 損益 (PnL)、勝率、最大ドローダウン、シャープレシオなどの評価指標を用いて検証
    結果の可視化
  • MatplotlibやPlotlyを活用して、バックテスト結果のグラフ化
Yodaka

次の記事では、バックテストシステムの実装についてまとめます。

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

続きを見る

-Bot