Fix OO trade records: include Put PnL and show dual-leg detail clearly.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"""期期成交盈亏汇总:须计入 option2(Put)腿。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.sim.pnl import summarize_fills_pnl
|
||||
|
||||
|
||||
def test_summarize_oo_both_legs() -> None:
|
||||
fills = [
|
||||
{
|
||||
"leg": "option",
|
||||
"action": "open",
|
||||
"side": "long",
|
||||
"fill_px": 12.6,
|
||||
"qty_eth": 3.5,
|
||||
"fee": 0.0221,
|
||||
"slip": 0,
|
||||
},
|
||||
{
|
||||
"leg": "option2",
|
||||
"action": "open",
|
||||
"side": "long",
|
||||
"fill_px": 9.0,
|
||||
"qty_eth": 5.0,
|
||||
"fee": 0.0225,
|
||||
"slip": 0,
|
||||
},
|
||||
{
|
||||
"leg": "option",
|
||||
"action": "close",
|
||||
"side": "sell",
|
||||
"fill_px": 0.0,
|
||||
"qty_eth": 3.5,
|
||||
"fee": 0.0,
|
||||
"slip": 0,
|
||||
},
|
||||
{
|
||||
"leg": "option2",
|
||||
"action": "close",
|
||||
"side": "sell",
|
||||
"fill_px": 0.0,
|
||||
"qty_eth": 5.0,
|
||||
"fee": 0.0,
|
||||
"slip": 0,
|
||||
},
|
||||
]
|
||||
s = summarize_fills_pnl(fills)
|
||||
assert s["option_pnl"] == -12.6 * 3.5
|
||||
assert s["option2_pnl"] == -9.0 * 5.0
|
||||
assert s["perp_pnl"] is None
|
||||
assert abs(float(s["fees_option"] or 0) - 0.0446) < 1e-9
|
||||
assert abs(float(s["gross_pnl"] or 0) - (-44.1 - 45.0)) < 1e-9
|
||||
assert abs(float(s["net_pnl"] or 0) - (-89.1 - 0.0446)) < 1e-9
|
||||
|
||||
|
||||
def test_summarize_perp_option_unchanged() -> None:
|
||||
fills = [
|
||||
{"leg": "option", "action": "open", "fill_px": 10, "qty_eth": 2, "fee": 0.1, "slip": 0},
|
||||
{"leg": "perp", "action": "open", "side": "short", "fill_px": 100, "qty_eth": 1, "fee": 0.2, "slip": 0},
|
||||
{"leg": "option", "action": "close", "fill_px": 12, "qty_eth": 2, "fee": 0.1, "slip": 0},
|
||||
{"leg": "perp", "action": "close", "side": "short", "fill_px": 98, "qty_eth": 1, "fee": 0.2, "slip": 0},
|
||||
]
|
||||
s = summarize_fills_pnl(fills)
|
||||
assert s["option_pnl"] == 4.0
|
||||
assert s["perp_pnl"] == 2.0
|
||||
assert s["option2_pnl"] is None
|
||||
assert abs(float(s["net_pnl"] or 0) - (6.0 - 0.6)) < 1e-9
|
||||
Reference in New Issue
Block a user