Manual v0.2 實盤前 Preflight
這頁只做讀取與檢查,不送 Binance 訂單,也不修改策略。它用來判斷目前 dev-only execution 功能離「可以接實盤」還缺哪些關卡。
FAIL=1, WARN=5
30m->5m / TP 0.035
/var/lib/trad-staging/results/manual_v0_2/forward_paper_test/paper_state.sqlite
切 live 前建議為 0
需先轉 dry-run
需人工檢查
保留舊紀錄,不送單
fake/testnet 前需處理
fake/testnet lifecycle
Demo/Testnet 回寫次數
paper=BTCUSDT / testnet=BTCUSDT
需人工處理或重試
2026-09-21 19:48 +08:00
2026-09-21 19:48 +08:00
data_update/update_end
strategy_update/update_end
USDT
檢查清單
| 分類 | 檢查項目 | 狀態 | 白話說明 | 依據 |
|---|---|---|---|---|
| 設定檔 | dry-run execution 設定存在 | 通過 | 缺少 execution 設定時,無法確認風控與 dry-run audit 輸出。 | /var/lib/trad-staging/tmp/execution_dry_run_runtime.json |
| 設定檔 | 策略 frozen config 存在 | 通過 | 實盤前必須明確知道目前策略版本、TP/SL、部位大小與 forward 起點。 | /etc/trad-staging/manual_strategy_v0_2_frozen_candidate_linux.json |
| 風控設定 | 執行模式必須停在 dry-run/demo | 通過 | 目前只允許做下單前演練;正式 live 開關不應在這個階段打開。 | mode=dry_run, allow_live_trading=False |
| 風控設定 | 允許標的必須剛好等於策略標的 | 通過 | 避免 execution 白名單多出策略外幣種,也避免漏掉策略正在追蹤的幣種。 | strategy=BTCUSDT, VIRTUALUSDT, NEARUSDT, ONDOUSDT, allowed=BTCUSDT, VIRTUALUSDT, NEARUSDT, ONDOUSDT |
| 風控設定 | 只允許 MARKET 市價單 | 通過 | 目前策略規格是碰價後市價進出,尚未開放其他委託型態。 | MARKET |
| 風控設定 | 單筆名目上限需覆蓋策略單筆名目 | 通過 | 風控上限不能小於策略每筆預計名目,否則 dry-run 會一直被擋。 | strategy_notional=4000, max_order=4000 |
| 風控設定 | 單標的名目上限需等於一筆策略名目 | 通過 | 目前策略是同標的最多一筆;單標的上限等於一筆名目,才能防止同幣種疊倉。 | strategy_notional=4000, max_symbol=4000 |
| 風控設定 | 總名目上限需至少覆蓋一筆交易 | 通過 | 總持倉上限至少要容納一筆策略交易;更嚴格的同時持倉數由 max_total / strategy_notional 觀察。 | strategy_notional=4000, max_total=16000 |
| 風控設定 | 單日帳戶停手機制 | 注意 | 這不是目前策略規則;目前未啟用單日總虧損上限。若之後要接 live,再由使用者明確決定是否加入帳戶層停手機制。 | max_daily_loss=未啟用 |
| 風控設定 | 同標的只允許一筆持倉 | 通過 | 這要和目前策略的同標的持倉限制一致。 | one_position_per_symbol=True |
| 風控設定 | 交易所有未完成委託時必須擋單 | 通過 | 避免程式重啟、網路 timeout 或手動掛單時重複送單。 | block_open_exchange_orders=True |
| 風控設定 | 交易所持倉對帳必須啟用或保持 testnet-only | 注意 | live 前要強制比對 SQLite 與交易所持倉;demo 階段可先觀察,但不能直接沿用到 live。 | mode=dry_run, require_exchange_position_match=False |
| 風控設定 | 緊急停止檔案不存在 | 通過 | 檔案存在時,dry-run 風控會拒絕新單。 | execution_stop.flag |
| SQLite 狀態 | paper_state.sqlite 存在 | 通過 | 可以讀取 paper/runtime 狀態。 | /var/lib/trad-staging/results/manual_v0_2/forward_paper_test/paper_state.sqlite |
| SQLite 狀態 | 核心資料表存在 | 通過 | run_once、WebSocket paper 與 dashboard 需要這些表才能對帳。 | runs/watermarks/signals/trades/positions/fills |
| SQLite 狀態 | execution_orders 表存在 | 通過 | dry-run pipeline 執行後會寫入這張表;尚未執行 dry-run 時可能還沒有。 | execution_orders |
| SQLite 狀態 | 最近 run_once 成功 | 通過 | 最近一輪若剛好仍在 running,以上一輪已完成 success 作為可觀察狀態;若已結束但不是 success,才是阻擋項。 | latest=success, update_end=2026-09-21 19:48 +08:00 |
| SQLite 狀態 | 策略水位存在 | 通過 | 策略層至少要跑過一次,才能知道目前掃描到哪一根 K。 | 2026-09-21 19:44 +08:00 |
| SQLite 狀態 | 資料水位存在 | 通過 | 資料層至少要跑過一次,才能知道市場資料補到哪一根 1m K。 | 2026-09-21 19:48 +08:00 |
| SQLite 狀態 | 資料/策略水位差距可接受 | 通過 | split runtime 下資料水位每分鐘前進,策略水位約每 5 分鐘前進;差距太大代表策略掃描可能落後。 | data=2026-09-21 19:48 +08:00, strategy=2026-09-21 19:44 +08:00, lag_minutes=4.0 |
| SQLite 狀態 | 沒有 ledger / replay conflicts | 未通過 | conflict 代表重掃或狀態同步出現不一致,需要先查完。 | 1 |
| SQLite 狀態 | 切換實盤前不應有 paper 未平倉 | 注意 | 若目前已有 observable paper position,建議等它出場或手動決定如何承接。 | 1 |
| Dry-run 對帳 | 沒有尚未轉單的 observable fills | 通過 | WebSocket paper 已看到成交但 dry-run 還沒轉成預備訂單,需先跑 dry-run pipeline。 | 0 |
| Dry-run 對帳 | 沒有被風控擋下的 dry-run 訂單 | 通過 | 被擋下代表實盤前安全層仍有問題或需要人工接受。 | 0 |
| Dry-run 對帳 | 待 fake exchange 演練訂單 | 通過 | RISK_APPROVED / SUBMITTED / PARTIALLY_FILLED 代表這些單仍在開發演練流程中,未來接 testnet 前要能解釋清楚。 | 0 |
| Dry-run 對帳 | 沒有可重試交易所錯誤 | 通過 | FAILED_RETRYABLE 代表 fake/testnet 送單流程有可重試錯誤,應先處理或人工確認。 | 0 |
| Testnet 演練 | testnet 回報可寫入 lifecycle | 通過 | testnet submit / status 回報必須能追加到 execution_order_events,並更新 execution_orders 的生命週期。 | testnet_events=4720, touched_orders=97 |
| Testnet 對帳 | Paper 與 Testnet 持倉一致 | 通過 | 測試盤鏡像若和正式 paper 持倉不同,代表下單演練不能視為乾淨;已知舊差異只保留稽核,不延遲補單。 | paper=BTCUSDT;testnet=BTCUSDT |
| API 權限 | 提供 API 權限快照 | 注意 | 目前沒有實際檢查 Binance key 權限。dry-run 可以先跳過;live 前必須確認不能提領、正式環境需 IP 限制。 | 未提供 --permission-snapshot |
| Windows 排程 | 排程狀態檢查 | 注意 | 本次略過 Windows 排程查詢;若要接實盤前,仍需確認正式排程狀態。 | skip_scheduler=true |
最近 dry-run 預備訂單
這裡只列 SQLite 裡已經產生的預備訂單。若沒有資料,不代表策略沒有訊號,而是目前沒有 observable fill 被轉成 dry-run order。
| 建立時間 | 動作 | 狀態 | 生命週期 | 幣種 | 訂單方向 | 數量 | 名目 USDT | 預期成交價 | 只減倉 | 交易所 order id | 交易所狀態 | 已成交數量 | 平均成交價 | 最近錯誤 | 風控原因 | 對帳原因 | client order id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-09-21T09:02:46.625537+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | BTCUSDT | SELL | 0.0476 | 4,000 | 83,927.3064 | 否 | 28594681683 | FILLED | 0.0476 | 83789.700000 | [] | [] | TRADDRY645d0c8a3f92941849e37c63 | |
| 2026-09-21T08:49:28.371740+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | ONDOUSDT | SELL | 9,393 | 4,000 | 0.4408 | 是 | 365049942 | FILLED | 9393.0 | 0.44100000 | [] | [] | TRADDRY660f292086e7f9775faba07c | |
| 2026-09-21T08:12:20.134634+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | BTCUSDT | BUY | 0.0492 | 4,000 | 81,944.1936 | 是 | 28594138646 | FILLED | 0.0492 | 81893.000000 | [] | [] | TRADDRY665737a4fc6ed723ba0d693e | |
| 2026-09-21T05:02:17.961663+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | ONDOUSDT | BUY | 9,393 | 4,000 | 0.4258 | 否 | 364986133 | FILLED | 9393.0 | 0.42590000 | [] | [] | TRADDRY2c8283d080d8cc36704e8b2b | |
| 2026-09-20T18:20:40.024403+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | VIRTUALUSDT | BUY | 6,187.7 | 4,000 | 0.6789 | 是 | 240582923 | FILLED | 6187.7 | 0.67880000 | [] | [] | TRADDRY1099c82bfbf86827e1296523 | |
| 2026-09-20T16:52:06.292854+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | ONDOUSDT | BUY | 9,757 | 4,000 | 0.4305 | 是 | 364768190 | FILLED | 9757.0 | 0.43180000 | [] | [] | TRADDRYb579df28af40edfdca264a4d | |
| 2026-09-20T16:00:52.796759+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | BUY | 1,077 | 4,000 | 3.8994 | 是 | 632649758 | FILLED | 1077 | 3.9080 | [] | [] | TRADDRY16cd67843fc6024704e365a9 | |
| 2026-09-20T14:08:18.374327+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | VIRTUALUSDT | SELL | 6,187.7 | 4,000 | 0.6464 | 否 | 240514483 | FILLED | 6187.7 | 0.64550000 | [] | [] | TRADDRY469e878f319c8a075eec1f0e | |
| 2026-09-20T13:01:07.515226+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | SELL | 1,077 | 4,000 | 3.7126 | 否 | 632589740 | FILLED | 1077 | 3.7120 | [] | [] | TRADDRY01b9edbc13fee102253e6098 | |
| 2026-09-20T12:51:19.669252+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | BUY | 1,132 | 4,000 | 3.7084 | 是 | 632586089 | FILLED | 1132 | 3.6890 | [] | [] | TRADDRYb772f38d99e47b8437763151 | |
| 2026-09-20T09:16:11.126837+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | SELL | 1,132 | 4,000 | 3.5306 | 否 | 632515777 | FILLED | 1132 | 3.5270 | [] | [] | TRADDRYd28fff5958daa16b2bd37389 | |
| 2026-09-20T06:26:08.493079+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | ONDOUSDT | SELL | 9,757 | 4,000 | 0.41 | 否 | 364582355 | FILLED | 9757.0 | 0.40810173 | [] | [] | TRADDRY82bb94de2d86986feb7850f7 | |
| 2026-09-19T08:13:31.486679+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | BTCUSDT | SELL | 0.0492 | 4,000 | 81,197.6794 | 否 | 28591358708 | FILLED | 0.0492 | 81060.575203 | [] | [] | TRADDRY344043502d5604873fa77e4a | |
| 2026-09-18T08:09:12.527820+00:00 | exit | VOID_AUDIT | RISK_APPROVED | BTCUSDT | SELL | 0.053 | 4,000 | 77,675.8316 | 是 | paper_trade_closed_before_testnet_entry_was_confirmed | [] | [] | TRADDRY360fc4d53303fc38f874bb8f | ||||
| 2026-09-17T01:33:23.499223+00:00 | exit | VOID_AUDIT | RISK_APPROVED | VIRTUALUSDT | SELL | 6,787 | 4,000 | 0.6099 | 是 | paper_trade_closed_before_testnet_entry_was_confirmed | [] | [] | TRADDRYd13808e9bbca8f8fdf2e3f8c | ||||
| 2026-09-16T09:19:21.334839+00:00 | exit | VOID_AUDIT | RISK_APPROVED | NEARUSDT | SELL | 1,717 | 4,000 | 2.4108 | 是 | paper_trade_closed_before_testnet_entry_was_confirmed | [] | [] | TRADDRY0bf6ed40f01c5debba7489b6 | ||||
| 2026-09-16T08:09:33.396626+00:00 | entry | VOID_AUDIT | RISK_APPROVED | BTCUSDT | BUY | 0.053 | 4,000 | 75,437.243 | 否 | paper_trade_closed_before_testnet_entry_was_confirmed | [] | [] | TRADDRYd3f0e8199155b4e3d2396c26 | ||||
| 2026-09-16T08:02:05.555459+00:00 | entry | VOID_AUDIT | RISK_APPROVED | NEARUSDT | BUY | 1,717 | 4,000 | 2.3292 | 否 | paper_trade_closed_before_testnet_entry_was_confirmed | [] | [] | TRADDRY35b8423bf6fb127d823f4302 | ||||
| 2026-09-16T06:43:19.276390+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | BTCUSDT | SELL | 0.0514 | 4,000 | 75,842.815 | 是 | 28590437530 | FILLED | 0.0514 | 80888.000000 | [] | [] | TRADDRY67aa7ddf5a22695c8649354e | |
| 2026-09-15T18:48:52.228875+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | VIRTUALUSDT | SELL | 6,486.5 | 4,000 | 0.5857 | 是 | 239753975 | FILLED | 6486.5 | 0.65882742 | [] | [] | TRADDRYeb4530a65b8923067ba0277a | |
| 2026-09-15T18:48:52.085771+00:00 | entry | VOID_AUDIT | RISK_APPROVED | VIRTUALUSDT | BUY | 6,787 | 4,000 | 0.5894 | 否 | paper_trade_closed_before_testnet_entry_was_confirmed | [] | [] | TRADDRYfcbf644f526252025e39ce9c | ||||
| 2026-09-15T14:52:36.960449+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | ONDOUSDT | SELL | 11,250 | 4,000 | 0.3377 | 是 | 362656622 | FILLED | 11250.0 | 0.33720000 | [] | [] | TRADDRYc423dbcc9f5177df515acc54 | |
| 2026-09-15T07:42:35.698795+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | SELL | 1,619 | 4,000 | 2.3458 | 是 | 629878125 | FILLED | 1619 | 2.3460 | [] | [] | TRADDRYf4cfd68b42d15c2419da9679 | |
| 2026-09-14T23:40:25.686867+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | BUY | 1,619 | 4,000 | 2.4702 | 否 | 629706056 | FILLED | 1619 | 2.4755 | [] | [] | TRADDRYac2884af65c50e66f2b46185 | |
| 2026-09-14T23:05:46.433007+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | ONDOUSDT | BUY | 11,250 | 4,000 | 0.3555 | 否 | 362377660 | FILLED | 11250.0 | 0.35550000 | [] | [] | TRADDRY44a4d48c21919d96327bdb34 | |
| 2026-09-14T06:45:44.473483+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | BTCUSDT | BUY | 0.0514 | 4,000 | 77,694.3687 | 否 | 28584470371 | FILLED | 0.0514 | 77634.000000 | [] | [] | TRADDRY3e3c03e05d606146ad552a2d | |
| 2026-09-14T05:08:35.099677+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | BTCUSDT | SELL | 0.0518 | 4,000 | 77,568.2424 | 是 | 28584382010 | FILLED | 0.0518 | 77576.000000 | [] | [] | TRADDRY2fbdebdbe560183e48df7287 | |
| 2026-09-14T04:07:36.129528+00:00 | exit | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | SELL | 1,730 | 4,000 | 2.3928 | 是 | 629313458 | FILLED | 1730 | 2.3870 | [] | [] | TRADDRY34663ec94fc38fc79e1a199b | |
| 2026-09-13T22:11:02.350659+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | NEARUSDT | BUY | 1,730 | 4,000 | 2.3112 | 否 | 629195974 | FILLED | 1730 | 2.3180 | [] | [] | TRADDRYf9ffbfd0441a0df646b2fd0f | |
| 2026-09-13T22:00:57.593695+00:00 | entry | ACCEPTED_DRY_RUN | FILLED | VIRTUALUSDT | BUY | 6,486.5 | 4,000 | 0.6167 | 否 | 237871841 | FILLED | 6486.5 | 0.61710000 | [] | [] | TRADDRY7b512e87998ba55de5feb600 |
最近 run_once
用來確認本機 paper runtime 最近是否有正常跑。dev-only 功能不會自動接進這個排程。
| 開始 | 結束 | profile | phase | 處理到 | 狀態 | 錯誤 |
|---|---|---|---|---|---|---|
| 2026-09-21 19:49 +08:00 | 2026-09-21 19:49 +08:00 | split | data | 2026-09-21 19:48 +08:00 | success | |
| 2026-09-21 19:48 +08:00 | 2026-09-21 19:48 +08:00 | split | data | 2026-09-21 19:47 +08:00 | success | |
| 2026-09-21 19:47 +08:00 | 2026-09-21 19:47 +08:00 | split | data | 2026-09-21 19:46 +08:00 | success | |
| 2026-09-21 19:45 +08:00 | 2026-09-21 19:47 +08:00 | split | strategy | 2026-09-21 19:44 +08:00 | success | |
| 2026-09-21 19:44 +08:00 | 2026-09-21 19:44 +08:00 | split | data | 2026-09-21 19:43 +08:00 | success | |
| 2026-09-21 19:43 +08:00 | 2026-09-21 19:43 +08:00 | split | data | 2026-09-21 19:42 +08:00 | success | |
| 2026-09-21 19:42 +08:00 | 2026-09-21 19:42 +08:00 | split | data | 2026-09-21 19:41 +08:00 | success | |
| 2026-09-21 19:40 +08:00 | 2026-09-21 19:42 +08:00 | split | strategy | 2026-09-21 19:39 +08:00 | success | |
| 2026-09-21 19:39 +08:00 | 2026-09-21 19:39 +08:00 | split | data | 2026-09-21 19:38 +08:00 | success | |
| 2026-09-21 19:38 +08:00 | 2026-09-21 19:38 +08:00 | split | data | 2026-09-21 19:37 +08:00 | success | |
| 2026-09-21 19:37 +08:00 | 2026-09-21 19:37 +08:00 | split | data | 2026-09-21 19:36 +08:00 | success | |
| 2026-09-21 19:36 +08:00 | 2026-09-21 19:37 +08:00 | split | data | 2026-09-21 19:35 +08:00 | success | |
| 2026-09-21 19:35 +08:00 | 2026-09-21 19:36 +08:00 | split | strategy | 2026-09-21 19:34 +08:00 | success | |
| 2026-09-21 19:34 +08:00 | 2026-09-21 19:34 +08:00 | split | data | 2026-09-21 19:33 +08:00 | success | |
| 2026-09-21 19:33 +08:00 | 2026-09-21 19:33 +08:00 | split | data | 2026-09-21 19:32 +08:00 | success | |
| 2026-09-21 19:32 +08:00 | 2026-09-21 19:32 +08:00 | split | data | 2026-09-21 19:31 +08:00 | success | |
| 2026-09-21 19:30 +08:00 | 2026-09-21 19:31 +08:00 | split | strategy | 2026-09-21 19:29 +08:00 | success | |
| 2026-09-21 19:29 +08:00 | 2026-09-21 19:29 +08:00 | split | data | 2026-09-21 19:28 +08:00 | success | |
| 2026-09-21 19:28 +08:00 | 2026-09-21 19:28 +08:00 | split | data | 2026-09-21 19:27 +08:00 | success | |
| 2026-09-21 19:27 +08:00 | 2026-09-21 19:27 +08:00 | split | data | 2026-09-21 19:26 +08:00 | success |
本次輸入
config=/var/lib/trad-staging/tmp/execution_dry_run_runtime.json
strategy_config=/etc/trad-staging/manual_strategy_v0_2_frozen_candidate_linux.json
state_db=/var/lib/trad-staging/results/manual_v0_2/forward_paper_test/paper_state.sqlite
exchange_snapshot=/var/lib/trad-staging/results/manual_v0_2/execution_dry_run/exchange_snapshot_latest.json
output=/var/lib/trad-staging/reports/manual_strategy_v0_2_execution_preflight_dashboard.html