Crypto Sentiment Analyzer & Backtest System (CSABS) は、仮想通貨のチャートデータとニュース記事のセンチメント分析を統合し、機械学習による先行指標モデルを構築してバックテストを実行する高度な分析システムです。
- 📊 複数銘柄対応: BTC、ETH、XRP等の主要仮想通貨に対応
- 🤖 AI駆動分析: 機械学習モデルによる価格変動予測
- 📰 ニュースセンチメント分析: VADER/TextBlobによる感情分析
- 📈 包括的なバックテスト: 過去データでの戦略検証とパフォーマンス評価
- 🔄 リアルタイム監視: WebSocketによる価格ストリーミングとシグナル生成
- 🖥️ 使いやすいGUI: Tkinterによる直感的なユーザーインターフェース
- 📁 SQLiteデータベース: 軽量で高速なデータ管理
┌─────────────────────────────────────────────────────────┐
│ プレゼンテーション層 (GUI - Tkinter) │
│ ┌────────────┬─────────────┬────────────┬──────────┐ │
│ │ダッシュボード│ バックテスト │ 設定・管理 │ ログ表示 │ │
│ └────────────┴─────────────┴────────────┴──────────┘ │
└─────────────────────────────────────────────────────────┘
↓↑
┌─────────────────────────────────────────────────────────┐
│ ビジネスロジック層 (Core Modules) │
│ ┌──────────┬───────────┬─────────────┬─────────────┐ │
│ │データ収集 │ 分析エンジン │ バックテスト │ リアルタイム │ │
│ │モジュール │ │ エンジン │ 監視 │ │
│ └──────────┴───────────┴─────────────┴─────────────┘ │
└─────────────────────────────────────────────────────────┘
↓↑
┌─────────────────────────────────────────────────────────┐
│ データアクセス層 (SQLite Database) │
│ ┌────────┬──────────┬─────────┬──────────┬────────┐ │
│ │価格Data│ニュースData│センチメント│バックテスト│モデル │ │
│ └────────┴──────────┴─────────┴──────────┴────────┘ │
└─────────────────────────────────────────────────────────┘
↓↑
┌─────────────────────────────────────────────────────────┐
│ 外部API層 (External Services) │
│ ┌──────────┬──────────┬───────────────────────────┐ │
│ │価格API │ニュースAPI│センチメント分析ライブラリ │ │
│ └──────────┴──────────┴───────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
- レイヤードアーキテクチャ: 各層の責務を明確に分離し、保守性を向上
- モジュール化: 独立性の高いモジュール設計で拡張性を確保
- スケーラビリティ: 新規銘柄・新規分析手法の追加が容易な設計
- オブザーバビリティ: ログ・メトリクス・トレースによる可観測性の実現
- 後方互換性: 設定ファイルとデータベーススキーマのバージョン管理
BTCFX-BOT/
│
├── Bitflyer実践用コード/ # 既存の参考プログラム
│ ├── BTCFX_BOT.py
│ ├── 使い方の説明.txt
│ ├── 元全文.txt
│ └── パラメータ設定の実際例.txt
│
├── src/ # ソースコードのルートディレクトリ
│ ├── __init__.py
│ ├── main.py # アプリケーションのエントリーポイント
│ │
│ ├── gui/ # プレゼンテーション層
│ │ ├── __init__.py
│ │ ├── main_window.py # メインウィンドウ
│ │ ├── dashboard.py # リアルタイムダッシュボード
│ │ ├── backtest_panel.py # バックテスト設定・実行パネル
│ │ ├── settings_panel.py # 設定管理パネル
│ │ ├── log_viewer.py # ログビューア
│ │ └── components/ # 再利用可能なGUIコンポーネント
│ │ ├── __init__.py
│ │ ├── chart_widget.py # チャート表示ウィジェット
│ │ └── table_widget.py # テーブル表示ウィジェット
│ │
│ ├── core/ # ビジネスロジック層
│ │ ├── __init__.py
│ │ │
│ │ ├── data_collector/ # データ収集モジュール
│ │ │ ├── __init__.py
│ │ │ ├── base_collector.py # 抽象基底クラス
│ │ │ ├── price_collector.py # 価格データ収集
│ │ │ ├── news_collector.py # ニュース記事収集
│ │ │ └── scheduler.py # データ収集スケジューラ
│ │ │
│ │ ├── analyzer/ # 分析エンジン
│ │ │ ├── __init__.py
│ │ │ ├── technical_analyzer.py # テクニカル分析
│ │ │ ├── sentiment_analyzer.py # センチメント分析
│ │ │ ├── feature_engineer.py # 特徴量エンジニアリング
│ │ │ └── indicators/ # テクニカル指標
│ │ │ ├── __init__.py
│ │ │ ├── trend.py # トレンド系指標
│ │ │ ├── momentum.py # モメンタム系指標
│ │ │ └── volatility.py # ボラティリティ系指標
│ │ │
│ │ ├── model/ # 機械学習モデル
│ │ │ ├── __init__.py
│ │ │ ├── base_model.py # モデル基底クラス
│ │ │ ├── predictor.py # 予測モデル
│ │ │ ├── trainer.py # モデル学習
│ │ │ └── evaluator.py # モデル評価
│ │ │
│ │ ├── backtest/ # バックテストエンジン
│ │ │ ├── __init__.py
│ │ │ ├── engine.py # バックテスト実行エンジン
│ │ │ ├── strategy.py # トレード戦略
│ │ │ ├── portfolio.py # ポートフォリオ管理
│ │ │ ├── performance.py # パフォーマンス評価
│ │ │ └── risk_manager.py # リスク管理
│ │ │
│ │ └── realtime/ # リアルタイム監視
│ │ ├── __init__.py
│ │ ├── monitor.py # リアルタイム監視
│ │ ├── signal_generator.py # シグナル生成
│ │ └── notifier.py # アラート通知
│ │
│ ├── data/ # データアクセス層
│ │ ├── __init__.py
│ │ ├── database.py # データベース接続管理
│ │ ├── models.py # ORMモデル定義
│ │ └── repositories/ # リポジトリパターン
│ │ ├── __init__.py
│ │ ├── price_repository.py
│ │ ├── news_repository.py
│ │ ├── sentiment_repository.py
│ │ └── backtest_repository.py
│ │
│ ├── api/ # 外部API層
│ │ ├── __init__.py
│ │ ├── base_api.py # API基底クラス
│ │ ├── crypto_api.py # 仮想通貨価格API
│ │ ├── news_api.py # ニュースAPI
│ │ └── adapters/ # APIアダプター
│ │ ├── __init__.py
│ │ ├── cryptowatch.py
│ │ ├── coingecko.py
│ │ └── newsapi.py
│ │
│ ├── utils/ # ユーティリティ
│ │ ├── __init__.py
│ │ ├── logger.py # ロギング設定
│ │ ├── config.py # 設定管理
│ │ ├── validators.py # データバリデーション
│ │ └── helpers.py # ヘルパー関数
│ │
│ └── exceptions/ # カスタム例外
│ ├── __init__.py
│ ├── api_exceptions.py
│ ├── data_exceptions.py
│ └── model_exceptions.py
│
├── config/ # 設定ファイル
│ ├── default_config.yaml # デフォルト設定
│ ├── symbols.yaml # 銘柄設定
│ └── api_keys.yaml.template # APIキーテンプレート
│
├── data/ # データディレクトリ
│ ├── database/ # SQLiteデータベース
│ │ └── crypto_analysis.db
│ ├── models/ # 学習済みモデル
│ └── cache/ # キャッシュデータ
│
├── logs/ # ログファイル
│ ├── application.log
│ ├── error.log
│ └── trading.log
│
├── tests/ # テストコード
│ ├── __init__.py
│ ├── unit/ # ユニットテスト
│ ├── integration/ # 統合テスト
│ └── fixtures/ # テストデータ
│
├── docs/ # ドキュメント
│ ├── architecture.md # アーキテクチャ設計書
│ ├── api_specification.md # API仕様書
│ └── user_guide.md # ユーザーガイド
│
├── scripts/ # ユーティリティスクリプト
│ ├── setup_database.py # データベース初期化
│ ├── collect_historical_data.py # 過去データ収集
│ └── train_model.py # モデル学習スクリプト
│
├── requirements.txt # Python依存パッケージ
├── setup.py # セットアップスクリプト
├── run.bat # Windows起動用バッチファイル
├── run.sh # Linux/Mac起動用シェルスクリプト
├── README.md # プロジェクトREADME
└── .gitignore # Git除外設定
機能要件:
- 複数銘柄(BTC, ETH, XRP等)の価格データ(OHLCV)を取得
- ニュース記事を複数ソースから収集
- データ収集の自動スケジューリング
- APIレート制限への対応(リトライ機構、キャッシング)
技術仕様:
- 価格データAPI: CryptoWatch / CoinGecko(フォールバック対応)
- ニュースAPI: NewsAPI / CryptoPanic
- データ取得間隔: 設定可能(デフォルト: 1時間足)
- エラーハンドリング: 指数バックオフリトライ
データベーススキーマ:
-- 価格データテーブル
CREATE TABLE price_data (
id INTEGER PRIMARY KEY,
symbol TEXT NOT NULL,
timestamp INTEGER NOT NULL,
open REAL NOT NULL,
high REAL NOT NULL,
low REAL NOT NULL,
close REAL NOT NULL,
volume REAL NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(symbol, timestamp)
);
-- ニュースデータテーブル
CREATE TABLE news_data (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
source TEXT NOT NULL,
url TEXT UNIQUE,
published_at TIMESTAMP NOT NULL,
symbols TEXT, -- JSON形式で関連銘柄を保存
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- センチメントスコアテーブル
CREATE TABLE sentiment_scores (
id INTEGER PRIMARY KEY,
news_id INTEGER NOT NULL,
symbol TEXT NOT NULL,
score REAL NOT NULL, -- -1.0 ~ 1.0
magnitude REAL,
analyzer_version TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(news_id) REFERENCES news_data(id)
);機能要件:
- SQLiteデータベースの自動初期化
- データの整合性チェック
- 古いデータの自動アーカイブ(1年以上経過)
- バックアップ・リストア機能
機能要件:
- 主要テクニカル指標の計算
- トレンド系: SMA, EMA, MACD, ADX
- モメンタム系: RSI, Stochastic, CCI
- ボラティリティ系: ATR, Bollinger Bands, ドンチャンチャネル
- カスタム指標の追加が容易な設計
- 複数時間軸での分析対応
技術仕様:
- ライブラリ: TA-Lib または pandas-ta
- 並列計算対応(複数銘柄・複数時間軸)
機能要件:
- ニュース記事の感情スコア算出(-1.0 ~ 1.0)
- 銘柄ごとのセンチメント集計
- 時系列でのセンチメント推移分析
- センチメントの急変検知
技術仕様:
- 分析ライブラリ: VADER Sentiment Analysis / TextBlob
- 日本語対応: 必要に応じてGoogleTranslate APIで翻訳
- スコアリング:
- positive: 0.05 ~ 1.0
- neutral: -0.05 ~ 0.05
- negative: -1.0 ~ -0.05
機能要件:
- テクニカル指標とセンチメントスコアの統合
- ラグ特徴量の生成(過去N期間のデータ)
- ローリング統計量の計算(移動平均、移動標準偏差)
- 特徴量の正規化・標準化
機能要件:
- 価格変動の方向性予測(上昇/下降/横ばい)
- 予測の信頼度スコア算出
- モデルの定期的な再学習
- 複数モデルのアンサンブル対応
技術仕様:
- モデル候補:
- ランダムフォレスト(初期実装)
- XGBoost(高度な実装)
- LightGBM(大規模データ対応)
- 評価指標: Accuracy, Precision, Recall, F1-Score, AUC-ROC
- 交差検証: Time Series Split(5-fold)
機能要件:
- 学習データ・検証データ・テストデータの分割
- ハイパーパラメータ最適化(Grid Search / Bayesian Optimization)
- モデルのバージョン管理
- 学習履歴の保存
データベーススキーマ:
CREATE TABLE model_metadata (
id INTEGER PRIMARY KEY,
model_name TEXT NOT NULL,
version TEXT NOT NULL,
algorithm TEXT NOT NULL,
hyperparameters TEXT, -- JSON形式
train_period_start TIMESTAMP,
train_period_end TIMESTAMP,
validation_score REAL,
test_score REAL,
file_path TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);機能要件:
- 指定期間でのシミュレーション実行
- 複数戦略の並列バックテスト
- スリッページ・手数料の考慮
- ポジション管理(ロング/ショート)
技術仕様:
- 初期資金: 設定可能(デフォルト: 1,000,000円)
- 手数料率: 設定可能(デフォルト: 0.1%)
- スリッページ: 設定可能(デフォルト: 0.05%)
- ポジションサイズ: 固定 or 資金比率
機能要件:
- 総リターン、年率リターンの計算
- シャープレシオ、ソルティノレシオの算出
- 最大ドローダウンの計算
- 勝率、平均利益/損失の集計
- 取引履歴のエクスポート(CSV)
データベーススキーマ:
CREATE TABLE backtest_results (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
symbol TEXT NOT NULL,
period_start TIMESTAMP NOT NULL,
period_end TIMESTAMP NOT NULL,
initial_capital REAL NOT NULL,
final_capital REAL NOT NULL,
total_return REAL,
sharpe_ratio REAL,
max_drawdown REAL,
win_rate REAL,
total_trades INTEGER,
model_id INTEGER,
strategy_config TEXT, -- JSON形式
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(model_id) REFERENCES model_metadata(id)
);
CREATE TABLE trade_history (
id INTEGER PRIMARY KEY,
backtest_id INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
action TEXT NOT NULL, -- BUY/SELL
price REAL NOT NULL,
quantity REAL NOT NULL,
pnl REAL,
FOREIGN KEY(backtest_id) REFERENCES backtest_results(id)
);機能要件:
- WebSocketによる価格データのストリーミング
- 定期的なニュース更新チェック
- データの自動保存
機能要件:
- 学習済みモデルによるリアルタイム予測
- エントリー/エグジットシグナルの生成
- シグナルの強度スコア表示
機能要件:
- GUI上でのポップアップ通知
- ログファイルへの記録
- オプション: LINE通知、メール通知
機能要件:
- リアルタイム価格チャート表示(複数銘柄)
- センチメントスコアの表示
- 最新シグナルの表示
- ポジション情報の表示
機能要件:
- バックテスト期間の設定
- 戦略パラメータの設定
- バックテスト実行ボタン
- 結果の可視化(チャート、統計)
機能要件:
- APIキーの設定
- データ収集間隔の設定
- 通知設定
- モデル選択
機能要件:
- リアルタイムログ表示
- ログレベルフィルタリング(DEBUG, INFO, WARNING, ERROR)
- ログファイルのエクスポート
- データ収集: 1銘柄あたり5秒以内
- センチメント分析: 1記事あたり1秒以内
- バックテスト: 1年分のデータで10秒以内(1銘柄)
- GUI応答性: 操作後100ms以内に反応
- APIキーの暗号化保存
- データベースアクセスの権限管理
- ログへの機密情報の非記録
- エラー時の自動リトライ
- ログによる障害追跡
- データベースの定期バックアップ
- モジュール間の疎結合
- 包括的なログ出力
- コメント・ドキュメントの充実
- Python 3.9+
- Tkinter (商用利用可能、Pythonビルトイン)
- SQLite3
- 価格データ: CryptoWatch API / CoinGecko API
- ニュースデータ: NewsAPI / CryptoPanic API
- scikit-learn: 機械学習モデル
- XGBoost / LightGBM: 勾配ブースティング
- pandas: データ操作
- numpy: 数値計算
- TA-Lib / pandas-ta: テクニカル分析
- VADER Sentiment: 英語センチメント分析
- TextBlob: テキスト処理
- requests: HTTP通信
- websocket-client: WebSocket通信
- pyyaml: YAML設定ファイル読み込み
- matplotlib / plotly: データ可視化
- pytest: テストフレームワーク
- Python 3.9以上
- pip(Pythonパッケージマネージャ)
- Windows 10/11、macOS、Linux
pip install -r requirements.txtpython scripts/setup_database.pyconfig/api_keys.yaml.templateをconfig/api_keys.yamlにコピー- 各種APIキーを設定
# config/api_keys.yaml
cryptowatch:
api_key: "YOUR_CRYPTOWATCH_API_KEY"
coingecko:
api_key: "" # CoinGeckoは無料プランではAPIキー不要
newsapi:
api_key: "YOUR_NEWSAPI_KEY"
cryptopanic:
api_key: "YOUR_CRYPTOPANIC_KEY"run.batchmod +x run.sh
./run.shpython src/main.py- データ収集モジュールの実装
- データベース設計・構築
- APIアダプターの実装
- テクニカル分析機能の実装
- センチメント分析機能の実装
- 特徴量エンジニアリング
- モデル学習パイプラインの構築
- 予測モデルの実装
- モデル評価システム
- バックテスト実行エンジンの実装
- パフォーマンス評価機能
- 結果可視化
- WebSocketストリーミング実装
- シグナル生成システム
- アラート通知機能
- メインウィンドウの実装
- ダッシュボード
- バックテストパネル
- 設定管理パネル
本プロジェクトは個人利用・商用利用ともに可能です。
Bitflyer実践用コード/BTCFX_BOT.py: ドンチャンチャネルブレイクアウトBOT
- このシステムは教育・研究目的で開発されています
- 実際の取引に使用する場合は、十分なバックテストと検証を行ってください
- 仮想通貨取引には高いリスクが伴います。投資は自己責任で行ってください
- APIキーは絶対に公開しないでください
ご質問やバグ報告は、GitHubのIssueまでお願いいたします。
Last Updated: 2026-01-20 Version: 1.0.0 (要件定義完了)