Record trader mode no-trade feedback
This commit is contained in:
+3
-2
@@ -837,11 +837,12 @@ Automation execution-layer PXX remains closed and its known scope stays frozen.
|
||||
- S7/S8 read-only reliability and trader SOP is implemented, deployed, and remote-verified: added `docs/AI_ICT_只读实盘可靠性与交易员SOP_S7S8_2026-05-21_v1.md`, `maintenance_summary.readonly_live_reliability`, and `trader_mode_summary.ops_duty_panel.trader_safe_health`. Trader Cockpit now shows only a trader-safe read-only use conclusion plus recovery action, while System Ops exposes proxy / market freshness / runtime / review packet / REST fallback / stream / news-account diagnostics. Warning states remain analysis-use guidance only and are not trade signals. Validation passed focused unit/static checks, script static checks, full unit discovery (`807` tests), deploy smoke over 11 endpoints, remote ops smoke, readonly live analysis smoke, field smoke, and gstack browser verification on `/trader-mode#system-ops` with no console errors.
|
||||
- S9 Trader Cockpit status copy compression is implemented, deployed, and remote-verified: added `docs/AI_ICT_TraderCockpit状态话术压缩_S9_2026-05-21_v1.md`; `trader_mode_summary.trader_readout` now exposes fixed six-card copy fields `Now / Reason / Wait / Risk / Historical Edge / Boundary`, and the frontend prioritizes those compressed fields before fallback text. `Review Now` now reads as manual review only, `Observe Only` as wait/no-trade, and `Do Not Use` as restore data/runtime first. Chinese Trader Cockpit display now renders the six cards as trader-readable sentences and removes the visible S9 residues `Risk:`, `Wait for FVG`, `Trader Mode changed:`, and raw `sweep -> MSS -> FVG` on `/trader-mode`. Validation passed focused operator/static/docs tests, `node --check`, script static checks, full unit discovery (`807` tests), `git diff --check` with only LF/CRLF warnings, deploy smoke over 11 endpoints, remote ops smoke, readonly live analysis smoke, six-card field smoke, and gstack browser verification with no console errors. Evidence screenshot: `output/playwright/s9-trader-cockpit-six-card-copy-final2-1366x768.png`.
|
||||
- S10 real intraday feedback validation is implemented, deployed, and remote-verified: added `docs/AI_ICT_TraderCockpit真实反馈验证_S10_2026-05-21_v1.md`; used real remote evidence (`operator_feedback_count=3`, recent Candidate `4610` observation with `operator_agreement=unclear`, `paper_ticket_count=0`, `paper_execution_count=0`, `weekly_review_entry_count=0`) to tighten the six-card copy without adding features. `Observe Only` now says the explicit gap (`FVG retrace is not confirmed yet; no trade`), `Wait` says the operator should wait for `trigger-chart FVG retrace confirmation`, `Risk` warns against treating the watch as a signal, and `Historical Edge` is reduced to Study / Review-only language without first-screen PF/DD/expectancy detail. Validation passed focused operator/static/docs tests, `node --check`, script static checks, full unit discovery (`807` tests), `git diff --check` with only LF/CRLF warnings, deploy smoke over 11 endpoints, remote ops smoke, readonly live analysis smoke, six-card field smoke, and gstack browser verification with no console errors. Evidence screenshot: `output/playwright/s10-trader-cockpit-real-feedback-six-card-1366x768.png`.
|
||||
- Current assisted-analysis next gate: proceed to S11 only: continue real intraday use on `/trader-mode`; if `unclear` appears again, adjust only existing `Reason` / `Wait` / `Risk` wording or hide overly detailed text. Do not add new product features, do not restart external-context/archive/digest long-tail work, do not physically delete S1 deprecated surfaces yet, and keep R2 sample collection honest. Paper ticket / paper execution / weekly review gates still wait for a real executable candidate and cannot be backfilled from blocked candidates.
|
||||
- S11 real intraday use loop is implemented, deployed, and remote-verified: remote `/trader-mode` showed the S10 six-card conclusion clearly (`FVG retrace is not confirmed yet; no trade`), so the operator recorded a real `No Trade` instead of tuning more copy. This created observation `9237` with `operator_agreement=no_trade` for Candidate `4610`; `operator_feedback_count` increased from `3` to `4`, while `paper_ticket_count=0`, `paper_execution_count=0`, and `weekly_review_entry_count=0` stayed unchanged. A feedback mapping bug was fixed so Trader Cockpit buttons now write `no_trade` and `need_more_evidence` explicitly instead of collapsing both into `unclear`. Validation passed focused tests, `node --check`, deploy smoke over 11 endpoints, remote ops smoke, readonly live analysis smoke, field verification, and gstack browser verification with no console errors. Evidence screenshot: `output/playwright/s11-trader-mode-no-trade-feedback-1366x768.png`.
|
||||
- Current assisted-analysis next gate: proceed to S12 only: collect one more real `/trader-mode` operator feedback sample to move `operator_feedback_count` from `4/5` to `5/5`; do not tune copy unless the next real feedback is `unclear` or `disagree`. Paper ticket / paper execution / weekly review gates still wait for a real executable candidate and cannot be backfilled from blocked candidates. Do not add new product features, do not restart external-context/archive/digest long-tail work, do not physically delete S1 deprecated surfaces yet, and keep `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, and operator confirmation protocol unchanged.
|
||||
|
||||
## Exact Next Step
|
||||
|
||||
Use `docs/AI_ICT_实盘辅助分析决策助手ICT主线开发方案_2026-05-21_v1.md`, `docs/AI_ICT_ICT主线概念字典_S2_2026-05-21_v1.md`, `docs/AI_ICT_ReviewNow主线Gate_S3S4_2026-05-21_v1.md`, `docs/AI_ICT_Cockpit链路句与反馈错误分类_S5S6_2026-05-21_v1.md`, `docs/AI_ICT_只读实盘可靠性与交易员SOP_S7S8_2026-05-21_v1.md`, `docs/AI_ICT_TraderCockpit状态话术压缩_S9_2026-05-21_v1.md`, and `docs/AI_ICT_TraderCockpit真实反馈验证_S10_2026-05-21_v1.md` as the active anchors. Continue with S11: use `/trader-mode` in the real intraday loop and collect the next real operator feedback. If the next feedback is still `unclear` or `disagree`, adjust only existing text/hiding rules around `Reason`, `Wait`, and `Risk`; if feedback is clear, stop tuning and wait for a real executable candidate before paper ticket / paper execution evidence. Do not restart external-context/archive/digest long-tail work, do not create order-submission features, do not physically delete S1 deprecated surfaces yet, and do not fabricate R2 paper samples. Keep `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, and operator confirmation protocol unchanged.
|
||||
Use `docs/AI_ICT_实盘辅助分析决策助手ICT主线开发方案_2026-05-21_v1.md`, `docs/AI_ICT_ICT主线概念字典_S2_2026-05-21_v1.md`, `docs/AI_ICT_ReviewNow主线Gate_S3S4_2026-05-21_v1.md`, `docs/AI_ICT_Cockpit链路句与反馈错误分类_S5S6_2026-05-21_v1.md`, `docs/AI_ICT_只读实盘可靠性与交易员SOP_S7S8_2026-05-21_v1.md`, `docs/AI_ICT_TraderCockpit状态话术压缩_S9_2026-05-21_v1.md`, and `docs/AI_ICT_TraderCockpit真实反馈验证_S10_2026-05-21_v1.md` as the active anchors. Continue with S12: use `/trader-mode` in the real intraday loop and collect the fifth real operator feedback sample. If it is clear (`agree` / `no_trade`), do not tune copy; if it is `unclear` or `disagree`, adjust only existing text/hiding rules around `Reason`, `Wait`, and `Risk`. Do not restart external-context/archive/digest long-tail work, do not create order-submission features, do not physically delete S1 deprecated surfaces yet, and do not fabricate R2 paper samples. Keep `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, and operator confirmation protocol unchanged.
|
||||
|
||||
## Validation Commands Used Recently
|
||||
|
||||
|
||||
@@ -941,9 +941,10 @@
|
||||
- [x] S7/S8 read-only live reliability and trader SOP: Trader Cockpit now shows a trader-safe read-only use conclusion / recovery action, System Ops exposes proxy / market freshness / runtime / review packet / REST fallback / stream / news-account diagnostics, and the one-page intraday/backtest/review SOP is documented, deployed, remote-smoked, field-smoked, and gstack browser-verified with no console errors
|
||||
- [x] S9 Trader Cockpit status copy compression: first-screen readout now uses fixed `Now / Reason / Wait / Risk / Historical Edge / Boundary` cards, keeps `Review Now` as manual review only, `Observe Only` as wait/no-trade, and `Do Not Use` as restore data/runtime first without adding features or widening beyond the ICT book mainline; deployed and remote-verified on `/trader-mode` with Chinese six-card wording and no S9 English residue in the checked cards
|
||||
- [x] S10 real intraday feedback validation: used real `operator_agreement=unclear` feedback on Candidate `4610` to tighten the six-card copy; `Observe Only` now names the missing FVG confirmation, `Wait` points to trigger-chart FVG retrace confirmation, `Risk` warns not to treat the watch as a signal, and `Historical Edge` is Study / Review-only without first-screen PF/DD/expectancy detail; deployed and remote/browser verified
|
||||
- [ ] S11 next gate: continue real `/trader-mode` use and collect the next real operator feedback; if `unclear`/`disagree` recurs, tune only existing `Reason` / `Wait` / `Risk` text or hiding rules, otherwise stop tuning and wait for a real executable candidate before paper ticket / paper execution evidence
|
||||
- [x] S11 real intraday use loop: `/trader-mode` six-card wording was clear enough to record a real `No Trade`; fixed existing feedback mapping so `No Trade` writes `operator_agreement=no_trade` and `Need More Evidence` writes `need_more_evidence`; remote observation `9237` increased `operator_feedback_count` from `3` to `4` while paper ticket / execution / weekly review stayed at `0`
|
||||
- [ ] S12 next gate: collect one more real `/trader-mode` operator feedback sample to move `operator_feedback_count` from `4/5` to `5/5`; only tune copy if the feedback is `unclear` or `disagree`
|
||||
- [ ] R2 paper-ticket sample gate is waiting on a real executable candidate; do not fabricate paper tickets from blocked candidates
|
||||
- [ ] R2 operator feedback sample gate still needs 2 more real feedback samples (`operator_feedback_count=3/5`)
|
||||
- [ ] R2 operator feedback sample gate still needs 1 more real feedback sample (`operator_feedback_count=4/5`)
|
||||
- [ ] R2 weekly review visible gate still needs a real execution-derived journal/weekly review entry (`weekly_review_entry_count=0`)
|
||||
- [x] R3 OKX sandbox isolated smoke tooling: guarded script and service can call OKX demo submit/query/cancel/query/fills only when `OKX_SANDBOX_SMOKE_EXECUTE=1`; local validation, deploy smoke, and remote ops smoke passed
|
||||
- [ ] R3 sandbox credential permission gate deferred: current phase is assisted analysis / decision support only, so do not request trade-permission credentials or make submit/cancel smoke the next gate
|
||||
|
||||
@@ -58,3 +58,20 @@ S10 改为更明确的盘中语言:
|
||||
- 如果还有 `unclear`,优先压缩 `Reason` 和 `Wait`。
|
||||
- 如果出现 `disagree`,优先检查 `Risk` 是否遗漏了交易员看到的关键阻塞。
|
||||
- 只有出现真实 executable candidate,才能进入 paper ticket / paper execution 样本采集。
|
||||
|
||||
## 6. S11 真实反馈闭环记录
|
||||
|
||||
2026-05-21 S11 继续使用远端 `/trader-mode` 主屏:
|
||||
|
||||
- 首屏显示:`Observe Only: FVG retrace is not confirmed yet; no trade.`
|
||||
- 中文页面显示:`仅观察:FVG 回撤尚未确认;不交易。`
|
||||
- 交易员动作:记录 `No Trade`
|
||||
- 写入结果:`operator_agreement=no_trade`
|
||||
- `operator_feedback_count` 从 `3` 增长到 `4`
|
||||
- `paper_ticket_count=0`
|
||||
- `paper_execution_count=0`
|
||||
- `weekly_review_entry_count=0`
|
||||
|
||||
本轮还修复了一个已有映射问题:`No Trade` 和 `Need More Evidence` 按钮不再都写成 `unclear`,而是分别写入 `no_trade` 与 `need_more_evidence`。这属于现有反馈闭环修正,不是新增交易能力。
|
||||
|
||||
S11 结论:六卡片在本轮盘中观察里已经能支持明确 `No Trade`,本轮不继续调文案;后续只继续真实反馈采集,不能伪造 paper ticket / paper execution / weekly review 样本。
|
||||
|
||||
@@ -7,7 +7,14 @@ from src.repositories.shadow_paper_observation_repository import ShadowPaperObse
|
||||
|
||||
|
||||
OPERATOR_AGREEMENT_PENDING = "pending"
|
||||
OPERATOR_AGREEMENT_VALUES = {"agree", "disagree", "unclear", OPERATOR_AGREEMENT_PENDING}
|
||||
OPERATOR_AGREEMENT_VALUES = {
|
||||
"agree",
|
||||
"disagree",
|
||||
"no_trade",
|
||||
"need_more_evidence",
|
||||
"unclear",
|
||||
OPERATOR_AGREEMENT_PENDING,
|
||||
}
|
||||
|
||||
|
||||
class ShadowPaperSampleCollectionService:
|
||||
|
||||
@@ -874,7 +874,13 @@ async function recordTraderAction(action) {
|
||||
tags: ['trader-mode', 'quick-note'],
|
||||
});
|
||||
} else {
|
||||
const agreement = action === 'agree' ? 'agree' : (action === 'disagree' ? 'disagree' : 'unclear');
|
||||
const agreementByAction = {
|
||||
agree: 'agree',
|
||||
disagree: 'disagree',
|
||||
no_trade: 'no_trade',
|
||||
need_more_evidence: 'need_more_evidence',
|
||||
};
|
||||
const agreement = agreementByAction[action] || 'unclear';
|
||||
await postJson('/trading/shadow-paper/observe', {
|
||||
instrument_id: instrumentId,
|
||||
timeframe,
|
||||
|
||||
@@ -58,6 +58,25 @@ class ShadowPaperSampleCollectionServiceTests(unittest.TestCase):
|
||||
self.assertIn("wait_for_executable_candidate_before_paper_ticket", payload["next_collection_actions"])
|
||||
self.assertNotIn("build_shadow_paper_ticket_for_latest_candidate", payload["next_collection_actions"])
|
||||
|
||||
def test_records_explicit_no_trade_and_need_more_evidence_feedback(self) -> None:
|
||||
now = datetime(2026, 5, 17, 12, 0, tzinfo=timezone.utc)
|
||||
for agreement in ["no_trade", "need_more_evidence"]:
|
||||
with self.subTest(agreement=agreement):
|
||||
repository = _ObservationRepository(candidate_status="blocked")
|
||||
service = ShadowPaperSampleCollectionService(repository=repository)
|
||||
|
||||
payload = service.record_daily_observation(
|
||||
instrument_id=1,
|
||||
operator_agreement=agreement,
|
||||
operator_note=f"{agreement} from Trader Cockpit",
|
||||
runtime_status={"current_blockers": []},
|
||||
now=now,
|
||||
)
|
||||
|
||||
self.assertEqual(payload["observation_status"], "operator_feedback_recorded")
|
||||
self.assertEqual(payload["operator_agreement"], agreement)
|
||||
self.assertEqual(repository.upsert_call["operator_agreement"], agreement)
|
||||
|
||||
|
||||
class _ObservationRepository:
|
||||
def __init__(self, *, candidate_status: str = "executable") -> None:
|
||||
|
||||
Reference in New Issue
Block a user