執行邊界
接到你的券商
這條管線裡有意思的部分不是那筆委託,而是它之前的每一步。
先講那條線
TWMD 是資料與驗證層。沒有下單路徑、不曾持有任何券商憑證、看不到任何部位,這裡也沒有任何東西能送出、修改、取消或決定一筆委託的大小。任何用這個標題卻暗示相反意思的頁面,描述的是一個面積大得多的產品——而這個差別,對真正在意的人來說最要緊。
真正困難、而且是我們的那一半
送出委託是一個你的券商早就寫好文件的已解決問題。確保訊號是在「當時可知」的資料上算出來的,則不是——而安靜的虧損正是從這裡來的:一個讀了未來的回測不會失敗,它會產生一條比真相更好看的曲線,然後你把它上線。
從訊號到委託,界線就寫在程式裡
import requests
def prices_as_of(symbol: str, as_of: str, limit: int = 250):
r = requests.get(
"https://api.twmarketdata.com/v2/datasets/twse-daily-price",
params={"symbol": symbol, "limit": limit, "as_of": as_of},
timeout=30,
)
r.raise_for_status()
body = r.json()
ctx = body["request_context"]
# Refuse to proceed if the filter did not apply. A silent present-value response is the one
# bug in a backtest that never announces itself.
assert ctx["point_in_time"], f"as_of was not applied: {ctx}"
return body["rows"]
decision = strategy(prices_as_of("2330", today))
# Everything past this line is your broker's SDK, your risk limits and your responsibility.
# TWMD has no order path, holds no broker credentials, and cannot place, amend, cancel or
# size a trade.
broker.place(decision)assert 那一行是承重的。如果哪天參數被改名或被忽略,你會拿到現值而迴圈照跑——所以這個檢查該放在你的程式裡,而不是放在你對我們的信任裡。上面那個請求不需要 API 金鑰,你在還沒有帳號之前就能跑。
事後留下什麼
這個決策用到的每一個數值,都能對應到一份簽章快照,而第三方可以用免金鑰端點與一支不 import 我們任何程式碼的腳本自行驗證。那不是在說這筆交易是不是好主意——那是「這個策略當時看得到什麼」的紀錄,而那正是事後會被問、而且通常答不出來的問題。
本頁內容不構成投資建議。