单独期权增加翻倍出场:可开关、自选倍数(默认1倍=盈利等于权利金),达标后买一限价平。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
"""单独期权翻倍出场命中条件."""
|
||||
from __future__ import annotations
|
||||
|
||||
import sqlite3
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from lib.options.options_db import init_options_tables
|
||||
from lib.options.options_profit_exit_lib import (
|
||||
normalize_profit_exit_mult,
|
||||
profit_exit_by_inst,
|
||||
profit_exit_hit,
|
||||
required_recycle_usdc,
|
||||
set_profit_exit,
|
||||
)
|
||||
|
||||
|
||||
class TestOptionsProfitExit(unittest.TestCase):
|
||||
def test_hit_one_x_means_profit_equals_premium(self):
|
||||
# 1倍:盈利=权利金 ⇒ 回收≥2×权利金
|
||||
self.assertTrue(profit_exit_hit(premium_paid=10.0, recycle_usdc=20.0, mult=1.0))
|
||||
self.assertFalse(profit_exit_hit(premium_paid=10.0, recycle_usdc=19.9, mult=1.0))
|
||||
self.assertEqual(required_recycle_usdc(10.0, 1.0), 20.0)
|
||||
|
||||
def test_hit_two_x(self):
|
||||
self.assertTrue(profit_exit_hit(premium_paid=10.0, recycle_usdc=30.0, mult=2.0))
|
||||
self.assertFalse(profit_exit_hit(premium_paid=10.0, recycle_usdc=29.9, mult=2.0))
|
||||
|
||||
def test_normalize_mult(self):
|
||||
self.assertEqual(normalize_profit_exit_mult(None), 1.0)
|
||||
self.assertEqual(normalize_profit_exit_mult(0), 1.0)
|
||||
self.assertEqual(normalize_profit_exit_mult("1.5"), 1.5)
|
||||
|
||||
def test_set_and_clear(self):
|
||||
with tempfile.TemporaryDirectory() as td:
|
||||
db = Path(td) / "t.db"
|
||||
conn = sqlite3.connect(str(db))
|
||||
conn.row_factory = sqlite3.Row
|
||||
init_options_tables(conn)
|
||||
conn.execute(
|
||||
"""
|
||||
INSERT INTO options_trades
|
||||
(inst_id, underlying, opt_type, sheets, eth_amount, premium_paid, status)
|
||||
VALUES ('ETH-X', 'ETH', 'C', 1, 0.01, 10.0, 'open')
|
||||
"""
|
||||
)
|
||||
conn.commit()
|
||||
out = set_profit_exit(conn, inst_id="ETH-X", enabled=True, mult=1.5)
|
||||
self.assertTrue(out["ok"])
|
||||
conn.commit()
|
||||
m = profit_exit_by_inst(conn)
|
||||
self.assertTrue(m["ETH-X"]["profit_exit_enabled"])
|
||||
self.assertEqual(m["ETH-X"]["profit_exit_mult"], 1.5)
|
||||
self.assertEqual(m["ETH-X"]["required_recycle"], 25.0)
|
||||
out2 = set_profit_exit(conn, inst_id="ETH-X", enabled=False, mult=1.5)
|
||||
self.assertTrue(out2["ok"])
|
||||
conn.commit()
|
||||
m2 = profit_exit_by_inst(conn)
|
||||
self.assertNotIn("ETH-X", m2)
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user