Bot

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

2025年3月25日

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

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

📊 初週チェック結果の分析とシステム調整

次のステップでは、初週チェック結果の分析を行い、その結果をもとにシステムの最適化を実施します。


1. 初週チェックの分析項目

以下の指標に基づき、システムの状態とパフォーマンスを評価します。

✅ パフォーマンス評価指標

指標説明目標値
取引成功率取引件数のうち、成功した割合60%以上
P&D検出成功率P&Dイベントの実際の発生数との一致率85%以上
APIエラー発生率APIエラーの発生回数 / 全リクエスト数5%以下
Slack通知精度発生した異常がすべて通知されているか100%
CPU/メモリ使用率各Podのリソース使用率70%以下

2. データ収集と分析

✅ ログデータの取得

各Podのログを収集し、データを分析します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
kubectl logs <data_collector_pod> > data_collector.log
kubectl logs <pnd_detector_pod> > pnd_detector.log
kubectl logs <trade_executor_pod> > trade_executor.log
kubectl logs <data_collector_pod> > data_collector.log kubectl logs <pnd_detector_pod> > pnd_detector.log kubectl logs <trade_executor_pod> > trade_executor.log
kubectl logs <data_collector_pod> > data_collector.log
kubectl logs <pnd_detector_pod> > pnd_detector.log
kubectl logs <trade_executor_pod> > trade_executor.log

✅ データの統合

収集したログデータをもとに、評価指標を算出します。

データ統合スクリプト (log_analyzer.py)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import pandas as pd
# データ読み込み
data_collector_log = "./data_collector.log"
pnd_detector_log = "./pnd_detector.log"
trade_executor_log = "./trade_executor.log"
# データ分析
def analyze_logs():
with open(data_collector_log, "r") as file:
data_lines = file.readlines()
with open(pnd_detector_log, "r") as file:
pnd_lines = file.readlines()
with open(trade_executor_log, "r") as file:
trade_lines = file.readlines()
# 指標の集計
total_trades = sum("Trade Executed" in line for line in trade_lines)
successful_trades = sum("Trade Successful" in line for line in trade_lines)
pnd_events = sum("P&D Event Detected" in line for line in pnd_lines)
successful_pnd_events = sum("P&D Success" in line for line in pnd_lines)
api_errors = sum("API Error" in line for line in trade_lines)
# 評価指標計算
trade_success_rate = successful_trades / total_trades * 100
pnd_success_rate = successful_pnd_events / pnd_events * 100
api_error_rate = api_errors / total_trades * 100
# 結果出力
print(f"✅ 取引成功率: {trade_success_rate:.2f}%")
print(f"✅ P&D検出成功率: {pnd_success_rate:.2f}%")
print(f"✅ APIエラー率: {api_error_rate:.2f}%")
if __name__ == "__main__":
analyze_logs()
import pandas as pd # データ読み込み data_collector_log = "./data_collector.log" pnd_detector_log = "./pnd_detector.log" trade_executor_log = "./trade_executor.log" # データ分析 def analyze_logs(): with open(data_collector_log, "r") as file: data_lines = file.readlines() with open(pnd_detector_log, "r") as file: pnd_lines = file.readlines() with open(trade_executor_log, "r") as file: trade_lines = file.readlines() # 指標の集計 total_trades = sum("Trade Executed" in line for line in trade_lines) successful_trades = sum("Trade Successful" in line for line in trade_lines) pnd_events = sum("P&D Event Detected" in line for line in pnd_lines) successful_pnd_events = sum("P&D Success" in line for line in pnd_lines) api_errors = sum("API Error" in line for line in trade_lines) # 評価指標計算 trade_success_rate = successful_trades / total_trades * 100 pnd_success_rate = successful_pnd_events / pnd_events * 100 api_error_rate = api_errors / total_trades * 100 # 結果出力 print(f"✅ 取引成功率: {trade_success_rate:.2f}%") print(f"✅ P&D検出成功率: {pnd_success_rate:.2f}%") print(f"✅ APIエラー率: {api_error_rate:.2f}%") if __name__ == "__main__": analyze_logs()
import pandas as pd

# データ読み込み
data_collector_log = "./data_collector.log"
pnd_detector_log = "./pnd_detector.log"
trade_executor_log = "./trade_executor.log"

# データ分析
def analyze_logs():
    with open(data_collector_log, "r") as file:
        data_lines = file.readlines()
    with open(pnd_detector_log, "r") as file:
        pnd_lines = file.readlines()
    with open(trade_executor_log, "r") as file:
        trade_lines = file.readlines()

    # 指標の集計
    total_trades = sum("Trade Executed" in line for line in trade_lines)
    successful_trades = sum("Trade Successful" in line for line in trade_lines)
    pnd_events = sum("P&D Event Detected" in line for line in pnd_lines)
    successful_pnd_events = sum("P&D Success" in line for line in pnd_lines)
    api_errors = sum("API Error" in line for line in trade_lines)

    # 評価指標計算
    trade_success_rate = successful_trades / total_trades * 100
    pnd_success_rate = successful_pnd_events / pnd_events * 100
    api_error_rate = api_errors / total_trades * 100

    # 結果出力
    print(f"✅ 取引成功率: {trade_success_rate:.2f}%")
    print(f"✅ P&D検出成功率: {pnd_success_rate:.2f}%")
    print(f"✅ APIエラー率: {api_error_rate:.2f}%")

if __name__ == "__main__":
    analyze_logs()

✅ スクリプトの実行

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
python log_analyzer.py
python log_analyzer.py
python log_analyzer.py

3. システムの調整

🟩 改善すべき点と調整方法

課題改善方法具体的な対策
取引成功率が低いパラメータ最適化STOP_LOSS 4.2% ➔ 3.8% / TAKE_PROFIT 6.8% ➔ 7.2%
P&D検出の誤検出フィルタ条件の追加ボラティリティフィルタの強化 (過去10分間の平均変動率導入)
APIエラーが多発APIリトライ設定強化APIエラー時のリトライ回数を3回 ➔ 5回に変更
CPU使用率が高いコンテナのリソース最適化CPUリミット500m ➔ 700m、メモリ1Gi ➔ 1.5Gi
Slack通知漏れ通知機能の強化Slack API接続障害時のリトライ処理を追加

✅ システムの再デプロイ

  1. 新しいDockerイメージのビルドとプッシュ
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker build -t your_dockerhub_username/crypto_bot:latest .
docker push your_dockerhub_username/crypto_bot:latest
docker build -t your_dockerhub_username/crypto_bot:latest . docker push your_dockerhub_username/crypto_bot:latest
docker build -t your_dockerhub_username/crypto_bot:latest .
docker push your_dockerhub_username/crypto_bot:latest
  1. Kubernetesデプロイの更新
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
kubectl apply -f deployment.yaml
kubectl apply -f hpa.yaml
kubectl apply -f deployment.yaml kubectl apply -f hpa.yaml
kubectl apply -f deployment.yaml
kubectl apply -f hpa.yaml

4. 最終評価

✅ システムの安定性を再確認
✅ 取引成功率、P&D検出率、エラー率の再測定
✅ 必要に応じて、さらなる微調整を実施


5. 次のステップ

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

✅ デプロイ後の安定性確認

  • システムの長期運用状況を確認し、安定稼働を確保
  • CPU、メモリ、APIエラー、データ損失の発生有無を重点的にチェック
Yodaka

次のステップでは、システムの安定性を確保するためのポイントについてまとめます。

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

続きを見る

-Bot

S