# 市場模型契約

## 範圍及單位

單一虛構資產，整股交易；金額以整數分記帳，顯示除以 100。初始參考價為 100.00，不是外部真實行情。100 位 bot 以同種子產生異質參數；玩家是額外一個持有初始資產且不自動交易的帳戶。沒有借貸、做空、外部入金或價格導演。

## 時間與資訊

模擬時間是整數毫秒。每個 bot 有獨立 PRNG，固定次數抽樣決定當次噪音、方向、數量及下一次等待；決策不使用 Date.now 或 Math.random。事件以最近醒來時間排序，同時醒來以固定代理編號排序。等待採帶 250ms 下限的指數分布，平均尺度因人而異。

醒來時觀察價格為 `P(max(0, t − delay × delayScale))`；記憶參考價為再往前 memory 毫秒的價格。P 是當時已形成的最後成交價，尚無成交則用初始參考價。bot 不讀取現在的最佳買賣價偷看延遲後的市場。

歷史環形緩衝保存 65,536 個事件末端價，覆蓋參數上限內 bot 的觀察窗口；落在已丟棄歷史以前的查詢拒絕而不偷用未來價。單筆撮合內多筆成交保存於 tape，但 bot 只在下一個事件開始時觀察當下完整結果。同一毫秒事件以處理順序可見。

## 四種策略

四種類型均為模型假設，不代表真實人的心理分類。心理估值固定於每個 bot 的初始 fair 值。

- 價值型：比較自己 fair 與延遲觀察價。
- 追勢型：依延遲觀察價和記憶價的差，按 trendScale 外推。
- 逆勢型：朝自己的記憶價回歸。
- 隨機型：以固定分布抽方向與報價偏移。

報價由觀察值、策略目標及有限噪音決定；目標高於觀察價偏向買入，低於觀察價偏向賣出。出價範圍的工程上限、策略係數及存續時間見 model.mjs 常數與 wake()。每次醒來先撤銷自己的舊單，再依可用資產掛新單或等待。輸出個體理由，用於看懂條件如何影響決策。

## 撮合與資源

每個帳戶至多一張有效限價單。買賣交叉才成交，依最佳價格、再依最早掛單序號選對手；成交用原有掛單價格。允許部分成交；未成交餘額留簿直到撤單、被替換或過期。過期時間到達即不再可撮合；UI 先清除已到期單再呈現。禁止自成交。

帳戶 cash 與 shares 表示含保留部分的總額；買單保留 `限價 × 餘量`，賣單保留餘量股數。替換訂單先完整驗證，失敗時保留原單。價格與股數、合法 side、帳戶、費率、模式及時間均驗證後才修改。

成交金額 `g = p × q`，買方 cash 減 g、shares 加 q；賣方 shares 減 q、cash 加 `g − fee`；基金加 fee。`fee = floor(g × feeBps / 10000)`，只對賣方收取，使用成交當時費率。總 cash 加基金及總 shares 分別守恆；估值財富 `cash + shares × lastPrice` 不守恆，不能把價格重估當成資金流入。

## 干預、重播與挑戰

成功的人類命令保存模擬時間與順序。切模式不重設世界；買賣僅於交易模式開放，改規則及開挑戰僅於規則模式開放。撤單可於任意模式執行，避免離開交易模式後無法管理原單。重播先推進到命令時間、套用命令，再推進到匯出終止時間。格式包含模型版本，拒絕不符版本或無效、倒退的時間。

挑戰從開始時刻起計 60 秒，至少 30 筆成交且期間每筆成交價相對開始參考價偏離不超過 5%。挑戰在時間到達時結算；超過截止時間的成交不得計入。允許期間改規則，所有干預留痕；這是遊戲任務，不是市場穩定性的學術判準。

## 報價邊界與診斷

報價限制為 0.01～10,000.00；模型輸出 clampedQuotes 計數，UI 也提示報價遭截斷的次數。追勢與過時資訊可能導致極端波動並觸及邊界；碰到邊界的實驗包含工程截斷效應，不能將其尾端分布解讀為真實市場性質。

## 限制

沒有公司獲利、股息、新聞網路、交易成本校準、學習型代理或真實行情驗證。心理估值、噪音、最短反應時間及價格邊界都是假設。100 人用線性掃描排程／選單，避免不必要的通用交易所依賴；擴大規模前須量測再選擇優先佇列。批次實驗應保留多種子摘要，不能把單一路徑當作結論。
