88b7fb7a0a
Forked from crypto_monitor OKX instance (copy-only). Keeps standalone options, perp-options and options-options hedge; drops standalone perp entrypoints; forces coin margin; adds sim wallets; default port 5010. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""翻倍出场:买一价×全仓张数判定达标(不受买一深度截断)."""
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from lib.options.options_profit_exit_lib import _estimate_recycle, profit_exit_hit
|
|
|
|
|
|
class ProfitExitHitTests(unittest.TestCase):
|
|
def test_hit_at_0_3_mult(self):
|
|
self.assertTrue(profit_exit_hit(premium_paid=1.0, recycle_usdc=1.3, mult=0.3))
|
|
self.assertFalse(profit_exit_hit(premium_paid=1.0, recycle_usdc=1.29, mult=0.3))
|
|
|
|
def test_estimate_uses_full_sheets_not_depth(self):
|
|
pos = {"inst_id": "ETH-USD-260927-2700-P", "pos": 100, "ct_mult": 0.01}
|
|
preview = {
|
|
"bid_invalid": False,
|
|
"levels": [{"px": 0.2, "sheets": 10}],
|
|
"total_received": 0.02,
|
|
}
|
|
|
|
def fake_attach(cfg, ex, row, premium_paid=None):
|
|
row["close_preview"] = preview
|
|
row["ct_mult"] = 0.01
|
|
row["pos"] = 100
|
|
return row
|
|
|
|
with patch(
|
|
"lib.options.options_positions_lib.attach_close_preview",
|
|
side_effect=fake_attach,
|
|
):
|
|
recv = _estimate_recycle({}, object(), pos, 1.0)
|
|
self.assertAlmostEqual(float(recv), 0.2, places=6)
|
|
self.assertTrue(profit_exit_hit(premium_paid=0.15, recycle_usdc=float(recv), mult=0.3))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|