ステータス
PID
起動引数
⏳ コマンド待機中(次のcron実行で処理されます)
💡 コマンドは bot_control.py が次のcron実行時(最大1分以内)に処理します。--once なしで起動すると常駐モードになります。
Portfolio Value / 資産評価額
Realized PnL / 確定損益
Position / ポジション
Trades / 取引回数
BTC/JPY Chart / チャート
Recent Trades / 直近取引
| Time | Action | BTC/JPY | PnL |
|---|---|---|---|
| No trades yet | |||
Regime Distribution / 市場状態の分布
Training History / 学習履歴
学習レポートが見つかりません
ローカルでWalk-Forward学習を実行し、レポートをアップロードしてください。
PF:
SR:
DD: %
Training Report Detail / レポート詳細
Model Checkpoints / モデル一覧
モデルファイルが見つかりません
checkpoints/ ディレクトリに .zip モデルをアップロードしてください。
Configuration / 設定(読み取り専用)
Botが使用している現在の設定です。変更は YAML ファイルを直接編集してください。
設定ファイル: bitcoin/config/main.yaml
API Keys / キー管理
登録済みのキーは中央部分がマスクされます。生のキー値はサーバー側にのみ保存され、画面には表示されません。
API Keyが登録されていません
「新規登録」ボタンからキーを追加してください。
「bitFlyer」と入力すると bitcoin/.env の BITFLYER_API_KEY / SECRET に自動反映されます
Setup Guide / セットアップガイド
サーバーに設置するファイル一式と、Botを稼働させるために必要な情報です。
Bot稼働状況 / Current Status
ステータス
状態ファイル更新
最新ログ
サーバー環境
| サーバー管理 | dev-admin(Docker コンテナ型) |
| Web UI 言語 | PHP 8.4 |
| Bot 言語 | Python 3.13 |
| cron | dev-admin UI から設定可能(PHP / Python 両対応) |
| コンテンツルート | /var/dev-admin/contents/py.kakunin.me/ |
| ドキュメントルート | /var/dev-admin/contents/py.kakunin.me/htdocs/ |
ディレクトリ構成
同一サーバー上に htdocs(PHP Web UI)と bitcoin(Python Bot)が並列で配置されます。
/var/dev-admin/contents/py.kakunin.me/ ├── htdocs/ ← ドキュメントルート(PHP 8.4) │ ├── index.html ← SPA本体 │ ├── .htaccess ← アクセス制御 │ ├── api/ ← PHP API群 │ │ ├── dashboard.php │ │ ├── config.php │ │ ├── status.php │ │ ├── apikeys.php │ │ ├── training.php │ │ ├── models.php │ │ └── lib/ ← Spyc, CsvReader, ConfigSchema │ ├── config/ │ │ └── apikeys.json ← API Key(自動生成) │ ├── data/ → ../bitcoin/data ← シンボリックリンク │ ├── logs/ → ../bitcoin/logs ← シンボリックリンク │ ├── reports/ ← 学習レポート(JSON) │ └── static/ │ ├── js/app.js │ └── css/style.css │ └── bitcoin/ ← Python Bot(Python 3.13) ├── .env ← 環境変数(MODE, APIキー等) ├── config/ │ └── main.yaml ← Bot設定(Web UIから参照) ├── checkpoints/ ← 学習済みモデル ├── scripts/ │ ├── start_paper_trading.py ← メイン取引ループ │ ├── bot_control.py ← プロセス制御(cron毎分) │ ├── health_monitor.py ← ヘルスチェック(cron用) │ ├── simulate_hourly.py ← バックテスト │ └── train_walkforward.py ← Walk-Forward学習 ├── src/ │ ├── live_trading/ │ │ ├── trading_engine.py ← 取引エンジン │ │ └── ticker_collector.py ← Ticker収集・緊急検知 │ ├── features/ ← テクニカル指標・レジーム │ ├── risk/ ← リスク管理・ポジションサイジング │ ├── models/ ← PPOモデル・GatingAgent │ └── ... ├── data/ ← Bot出力先(htdocsからリンク) │ ├── trading_state.json │ ├── paper_trades.csv │ ├── btc_jpy_1h_730days.csv ← OHLCVチャートデータ │ ├── ticker_snapshots.csv ← TickerCollector出力(毎分) │ ├── bot.pid ← プロセスPID(自動生成) │ └── simulations/ └── logs/ ├── bot_stdout.log ← Bot標準出力 ├── bot_stderr.log ← Botエラー出力 └── trading_bot_*.log ← 日次ログ
⚠ データ同期について
サーバーでは htdocs/data/ → ../bitcoin/data/、htdocs/logs/ → ../bitcoin/logs/ のシンボリックリンクが設置されています。
コピースクリプトは不要です。Botが bitcoin/data/ に書いたファイルは即座にWeb UIから参照可能です。詳しくは「データの流れ」タブを参照。
Step 1: 環境変数の設定 / .env
初回のみ bitcoin/.env.example を bitcoin/.env にSFTPでコピーし、MODE等を設定します。
# ファイル: /var/dev-admin/contents/py.kakunin.me/bitcoin/.env
# 動作モード
MODE=paper # paper(デモ)/ live(本番)/ backtest
# 使用モデル
RL_ALGORITHM=PPO
# その他のリスク管理・DB設定等はデフォルトのままでOK
✓ 取引所APIキーはこのWeb UIから設定できます
API Keys ページでサービス名「bitFlyer」としてキーを登録すると、bitcoin/.env の BITFLYER_API_KEY / BITFLYER_API_SECRET に自動反映されます。
Step 2: Bot起動方法 / 2つの方式
Botの起動方法は2つあります。推奨は 方式A(Web UIからの制御)です。
方式A: Web UIからプロセス制御(推奨)
bot_control.py をcronで毎分実行し、Dashboard の「Bot プロセス制御」パネルからBotを起動・停止できます。
仕組み:
- Web UI(PHP)が
htdocs/data/bot_command.jsonにコマンドを書き出す bot_control.pyが毎分cronで実行され、コマンドを検知してstart_paper_trading.pyを起動/停止- 起動されたBotはバックグラウンドで常駐(
--onceなしの場合、毎時自動実行) - 常駐モードでは
TickerCollectorが毎分bitFlyer tickerを取得し、急落(5%以上)検知時に緊急売却を実行 - プロセス状態は
htdocs/data/bot_process.jsonに記録され、Dashboardに表示
※ PHPの disable_functions 制限によりPHPから直接プロセスを起動できないため、cronを中継しています。
方式B: cron で毎時 --once 実行
cronで start_paper_trading.py --once を毎時実行する方式です。常駐プロセスなし。シンプルですがWeb UIからの制御はできません。
主なオプション(起動引数):
--once ← 1回実行して終了(方式Bの場合に必須) --capital 1580000 ← 初期資金(JPY) --btc-start ← BTC保有状態からスタート --initial-btc 0.149 ← 開始時BTC量(--btc-start時) --model checkpoints/p33_main_best.zip ← 使用モデル --interval-minutes 60 ← 実行間隔(デフォルト60分) --live ← 本番モード(.env の MODE=live 必須)
Step 3: Cron設定 / dev-admin UI から登録
dev-admin の VirtualHost管理 → cron設定 から以下を登録します。言語は Python 3.13 を選択。
| 用途 | スケジュール | 実行ファイルパス |
|---|---|---|
| Bot制御(方式A必須) | * * * * * | bitcoin/scripts/bot_control.py |
| Bot毎時実行(方式Bの場合) | 1 * * * * | bitcoin/scripts/start_paper_trading.py --once --btc-start --initial-btc 0.149 --capital 1580000 |
| ヘルスチェック | */5 * * * * | bitcoin/scripts/health_monitor.py --check |
| トレード通知 | 10 * * * * | bitcoin/scripts/health_monitor.py --notify-trades |
💡 方式A を使う場合、bot_control.py のcron(毎分)だけ登録すればOKです。Botの起動・停止はDashboardの「Bot プロセス制御」パネルから行えます。
※ dev-admin のcron設定では、ファイルパスは /var/dev-admin/contents/py.kakunin.me/ 以降を入力します。
稼働判定の基準
DashboardとこのGuideページに表示されるBot状態の判定基準です。
| ステータス | 条件 | 意味 |
|---|---|---|
| 稼働中 | trading_state.json が 2時間以内に更新 | 正常に毎時実行されている |
| 応答遅延 | trading_state.json が 2〜6時間前 | 何らかの問題の可能性あり |
| 停止中 | trading_state.json が 6時間以上前 or 未検出 | Botが停止している |
Bot → Web UI のデータフロー
サーバーでは htdocs/data/ → ../bitcoin/data/ のシンボリックリンクにより、Botの出力をWeb UIが直接参照します。
| Botの出力元 | Web UIの読取先 | 更新頻度 | 用途 |
|---|---|---|---|
| bitcoin/data/trading_state.json | htdocs/data/trading_state.json | 毎時 | サマリー・稼働判定 |
| bitcoin/data/paper_trades.csv | htdocs/data/paper_trades.csv | 取引時 | 取引履歴 |
| bitcoin/data/simulations/*.csv | htdocs/data/simulations/*.csv | シミュレーション時 | チャート・レジーム |
| bitcoin/data/btc_jpy_1h_730days.csv | htdocs/data/btc_jpy_1h_730days.csv | 毎時 | ローソク足チャート |
| bitcoin/data/ticker_snapshots.csv | htdocs/data/ticker_snapshots.csv | 毎分 | Ticker履歴・デバッグ |
| bitcoin/logs/*.log | htdocs/logs/*.log | 常時 | Bot実行ログ |
同期方法 / シンボリックリンク方式
サーバーではシンボリックリンクにより、Botの出力ファイルをWeb UIが直接参照します。コピースクリプトは不要です。
# サーバー初期設定時に一度だけ実行
cd /var/dev-admin/contents/py.kakunin.me/htdocs/
ln -s ../bitcoin/data data
ln -s ../bitcoin/logs logs
これにより htdocs/data/ → ../bitcoin/data/、htdocs/logs/ → ../bitcoin/logs/ として直接アクセスできます。
TickerCollector のデータフロー
Bot常駐時(--once なし)に待機ループ内で毎分動作します。
1. bitFlyer ticker API → 現在価格を取得(60秒間隔)
2. ticker_snapshots.csv に追記(timestamp, price, bid, ask, spread)
3. 1時間OHLCバーをリアルタイム構築(yfinance 1-2h遅延を補完)
4. 基準価格から5%以上の下落検知 → emergency_sell() で緊急売却
API確認: status.php?action=ticker_csv&lines=10 / status.php?action=log_tail&lines=50&source=stderr
Config の管理
設定ファイルは bitcoin/config/main.yaml の1つだけです。Botが直接読み込み、Web UIの Config ページからも参照表示されます。
# 設定ファイル(Bot + Web UI 共通) bitcoin/config/main.yaml # 設定を変更する場合 SFTPで直接編集 → Botを再起動
よくある問題
Bot が「停止中」と表示される
trading_state.json が6時間以上更新されていません。
確認ポイント:
- SFTPで
bitcoin/data/trading_state.jsonの更新日時を確認 - SFTPで
bitcoin/logs/の最新ログファイルの内容を確認 - dev-admin でcronジョブが正常に登録されているか確認
- .env の MODE 設定が正しいか確認
Dashboard にデータが表示されない
htdocs/data/ にファイルが存在しない可能性があります。
確認ポイント:
- SFTPで
htdocs/data/trading_state.jsonが存在するか確認 htdocs/data/が../bitcoin/data/へのシンボリックリンクになっているか確認htdocs/logs/が../bitcoin/logs/へのシンボリックリンクになっているか確認
Config を変更したい場合
SFTPで bitcoin/config/main.yaml を直接編集し、Dashboard から Bot を再起動してください。Web UI の Config ページは読み取り専用です。
API Key ページでエラーが出る
htdocs/config/ ディレクトリにPHPからの書き込み権限が必要です。SFTPクライアントでディレクトリのパーミッションを 755 に設定してください。
TickerCollector が動作しない
ticker_snapshots.csv が更新されていない場合。
確認ポイント:
- Botが
--onceで起動されていないか確認(常駐モードでのみ動作) api/status.php?action=ticker_csvで状態を確認bitcoin/config/main.yamlのticker_collection.enabledがtrueか確認api/status.php?action=log_tail&source=stderrでエラーログを確認
ログの確認方法(SFTPなし)
SFTPを使わずにAPIからBotのログを確認できます。
api/status.php?action=log_tail&lines=100&source=stderr→ Botエラーログ末尾api/status.php?action=log_tail&lines=100&source=stdout→ Bot標準出力ログ末尾api/status.php?action=ticker_csv&lines=20→ ticker_snapshots.csv 末尾api/status.php?action=heartbeat→ Bot稼働状態サマリー