觀察
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 的定義是:
- 初始資金加累積已實現與未實現損益;或
- 現金加持倉依當下價格清算後的淨值。
兩種定義在手續費、交易稅與股利的處理上必須保持一致。確認後可補三個測試:無交易
時權益不變、買進後只反映交易與預估清算成本、最後權益變化與 FinalProfit 一致。
TAIEX 比較目前另將 cumulative log return 直接傳入預期 arithmetic return 的
period_return2annual_return;建議另開修正,避免在同一 PR 混入第二種計算語意。
觀察
simulate()目前以「剩餘現金加累積損益」計算EverytimeTotalProfit:EverytimeProfit已包含持倉的未實現損益。再把它加到買進後的剩餘現金,沒有把持倉價值放回權益,因而在持倉期間大幅低估資產。
現有
0056測試中的第一筆買進即可重現:EverytimeProfitEverytimeTotalProfit同一測試最後的
FinalProfitPer是-1.35%,但以這條權益曲線算出的CumDailyReturn是-0.61003,兩者不一致。期望行為
建議先確認
EverytimeTotalProfit的定義是:兩種定義在手續費、交易稅與股利的處理上必須保持一致。確認後可補三個測試:無交易
時權益不變、買進後只反映交易與預估清算成本、最後權益變化與
FinalProfit一致。TAIEX 比較目前另將 cumulative log return 直接傳入預期 arithmetic return 的
period_return2annual_return;建議另開修正,避免在同一 PR 混入第二種計算語意。