Revise strategy: TTM+ATM+leverage option pick, % exit, perp leverage/margin.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-25 08:38:03 +08:00
parent 7db4c9c8a3
commit 3957a83761
16 changed files with 532 additions and 261 deletions
+21 -19
View File
@@ -1,10 +1,11 @@
from app.strategy.signal import decide
from app.strategy.exits import check_exits
from app.sim.pricing import option_fill, perp_fill
from app.strategy.clock import can_open_new, window_key
from datetime import datetime
from zoneinfo import ZoneInfo
from app.sim.pricing import option_fill, perp_fill
from app.strategy.clock import can_open_new, window_key
from app.strategy.exits import check_exits
from app.strategy.signal import decide
_SH = ZoneInfo("Asia/Shanghai")
@@ -26,13 +27,19 @@ def test_signal_equal() -> None:
assert decide(10.0, 10.0) is None
def test_exit_premium_and_move() -> None:
assert check_exits(
perp_upl=50, initial_premium=40, move_points=1, exit_move_points=30
).reason == "premium_cover"
assert check_exits(
perp_upl=1, initial_premium=40, move_points=30, exit_move_points=30
).reason == "move_points"
def test_exit_premium_and_move_pct() -> None:
assert (
check_exits(
perp_upl=50, initial_premium=40, move_pct=0.1, exit_move_pct=2
).reason
== "premium_cover"
)
assert (
check_exits(
perp_upl=1, initial_premium=40, move_pct=2.0, exit_move_pct=2
).reason
== "move_pct"
)
def test_perp_pricing() -> None:
@@ -47,15 +54,10 @@ def test_option_open_close_pricing() -> None:
assert c.fill_px < 10
def test_window() -> None:
# 17:00 can open, window key today
def test_window_always_open() -> None:
n = datetime(2026, 7, 24, 17, 0, tzinfo=_SH)
assert can_open_new(n) is True
assert window_key(n) == "20260724"
# 10:00 cannot open
n2 = datetime(2026, 7, 24, 10, 0, tzinfo=_SH)
assert can_open_new(n2) is False
# 07:00 still previous window, can open
n3 = datetime(2026, 7, 24, 7, 0, tzinfo=_SH)
assert can_open_new(n3) is True
assert window_key(n3) == "20260723"
assert can_open_new(n2) is True
assert window_key(n2) == "20260724"