Skip to content

BackTest EverytimeTotalProfit understates equity while a position is open #452

Description

@ting-hong-shieh

觀察

simulate() 目前以「剩餘現金加累積損益」計算 EverytimeTotalProfit

self._trade_detail["EverytimeTotalProfit"] = (
    self._trade_detail["trader_fund"]
    + self._trade_detail["EverytimeProfit"]
)

EverytimeProfit 已包含持倉的未實現損益。再把它加到買進後的剩餘現金,沒有把持倉
價值放回權益,因而在持倉期間大幅低估資產。

現有 0056 測試中的第一筆買進即可重現:

欄位 數值
初始資金 500,000.00
買進後現金 474,814.16125
EverytimeProfit -96.82750
現行 EverytimeTotalProfit 474,717.33375
依初始資金加損益計算的權益 499,903.17250

同一測試最後的 FinalProfitPer-1.35%,但以這條權益曲線算出的
CumDailyReturn-0.61003,兩者不一致。

期望行為

建議先確認 EverytimeTotalProfit 的定義是:

  1. 初始資金加累積已實現與未實現損益;或
  2. 現金加持倉依當下價格清算後的淨值。

兩種定義在手續費、交易稅與股利的處理上必須保持一致。確認後可補三個測試:無交易
時權益不變、買進後只反映交易與預估清算成本、最後權益變化與 FinalProfit 一致。

TAIEX 比較目前另將 cumulative log return 直接傳入預期 arithmetic return 的
period_return2annual_return;建議另開修正,避免在同一 PR 混入第二種計算語意。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions