feat(key-monitor): add program trigger entry across four exchanges

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-14 00:42:21 +08:00
parent c95ca6ac35
commit edf4bb835d
26 changed files with 3002 additions and 76 deletions
+111
View File
@@ -0,0 +1,111 @@
"""补全 okx / binance 触价开仓:import、stats、background、add_key。"""
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
GATE = ROOT / "crypto_monitor_gate" / "app.py"
ADD_INSERT = GATE.read_text(encoding="utf-8").split(
" if is_trigger_entry_key_monitor_type(mt):"
)[1].split(" if is_false_breakout_key_monitor_type(mt):")[0]
TRIG_IMPORT = """from trigger_entry_key_monitor_lib import (
TRIGGER_ENTRY_CLOSE_EXCHANGE_FAILED,
TRIGGER_ENTRY_CLOSE_EXPIRED,
TRIGGER_ENTRY_CLOSE_FILLED,
TRIGGER_ENTRY_CLOSE_TP_INVALIDATE,
TRIGGER_ENTRY_MONITOR_TYPE,
TRIGGER_ENTRY_VALIDITY_HOURS,
check_trigger_entry_intent_limit,
count_pending_trigger_entries,
is_trigger_entry_expired,
is_trigger_entry_key_monitor_type,
trigger_entry_expires_at_text,
trigger_entry_gate_preview,
trigger_entry_invalidate_by_tp,
trigger_entry_reached,
validate_trigger_entry_geometry,
validate_trigger_entry_rr,
)
"""
def patch_okx():
p = ROOT / "crypto_monitor_okx" / "app.py"
t = p.read_text(encoding="utf-8")
if "trigger_entry_key_monitor_lib" not in t:
t = t.replace("from position_sizing_lib import (", TRIG_IMPORT + "from position_sizing_lib import (", 1)
if "OPEN_SOURCE_KEY_TRIGGER" not in t:
t = t.replace(
" OPEN_SOURCE_KEY_AUTO,\n OPEN_SOURCE_MANUAL,",
" OPEN_SOURCE_KEY_AUTO,\n OPEN_SOURCE_KEY_TRIGGER,\n OPEN_SOURCE_MANUAL,",
1,
)
if '"关键位触价开仓"' not in t:
t = t.replace(
' "关键位假突破",\n) + STRATEGY_ENTRY_REASON_OPTIONS',
' "关键位假突破",\n "关键位触价开仓",\n) + STRATEGY_ENTRY_REASON_OPTIONS',
1,
)
if "key_trigger" not in t:
t = t.replace(
' ("key_false_breakout", "关键位假突破", {"segment": "key_false_breakout"}),\n)',
' ("key_false_breakout", "关键位假突破", {"segment": "key_false_breakout"}),\n ("key_trigger", "关键位触价开仓", {"segment": "key_trigger"}),\n)',
1,
)
if "key_monitors ADD COLUMN session_date" not in t:
t = t.replace(
' "ALTER TABLE key_monitors ADD COLUMN last_rs_bar_ts INTEGER",\n ):',
' "ALTER TABLE key_monitors ADD COLUMN last_rs_bar_ts INTEGER",\n "ALTER TABLE key_monitors ADD COLUMN session_date TEXT",\n ):',
1,
)
if 'segment_key == "key_trigger"' not in t:
t = t.replace(
' if segment_key == "key_false_breakout":\n return kst == FALSE_BREAKOUT_MONITOR_TYPE\n return False',
' if segment_key == "key_false_breakout":\n return kst == FALSE_BREAKOUT_MONITOR_TYPE\n if segment_key == "key_trigger":\n return kst == TRIGGER_ENTRY_MONITOR_TYPE\n return False',
1,
)
if '"key_trigger":' not in t:
t = t.replace(
' "key_false_breakout": FALSE_BREAKOUT_MONITOR_TYPE,\n }',
' "key_false_breakout": FALSE_BREAKOUT_MONITOR_TYPE,\n "key_trigger": TRIGGER_ENTRY_MONITOR_TYPE,\n }',
1,
)
if "check_trigger_entry_key_monitors()" not in t:
t = t.replace(
" check_fib_key_monitors()\n _roll_cfg",
" check_fib_key_monitors()\n check_trigger_entry_key_monitors()\n _roll_cfg",
1,
)
if " + (TRIGGER_ENTRY_MONITOR_TYPE,)" not in t:
t = t.replace(
" + (FALSE_BREAKOUT_MONITOR_TYPE,)\n )",
" + (FALSE_BREAKOUT_MONITOR_TYPE,)\n + (TRIGGER_ENTRY_MONITOR_TYPE,)\n )",
1,
)
anchor = " be_flag = parse_breakeven_enabled_form(d.get(\"breakeven_enabled\"))\n if is_false_breakout_key_monitor_type(mt):"
if "is_trigger_entry_key_monitor_type(mt)" not in t:
t = t.replace(
anchor,
" be_flag = parse_breakeven_enabled_form(d.get(\"breakeven_enabled\"))\n tc_en = parse_time_close_enabled_form(d.get(\"time_close_enabled\"))\n tc_h = parse_time_close_hours_form(d.get(\"time_close_hours\")) if tc_en else None\n if tc_en and not tc_h:\n tc_en = 0\n if is_trigger_entry_key_monitor_type(mt):" + ADD_INSERT + " if is_false_breakout_key_monitor_type(mt):",
1,
)
p.write_text(t, encoding="utf-8")
print("okx done")
def patch_binance_add_key():
p = ROOT / "crypto_monitor_binance" / "app.py"
t = p.read_text(encoding="utf-8")
anchor = " be_flag = parse_breakeven_enabled_form(d.get(\"breakeven_enabled\"))\n if is_false_breakout_key_monitor_type(mt):"
if "is_trigger_entry_key_monitor_type(mt)" in t:
print("binance add_key skip")
return
t = t.replace(
anchor,
" be_flag = parse_breakeven_enabled_form(d.get(\"breakeven_enabled\"))\n tc_en = parse_time_close_enabled_form(d.get(\"time_close_enabled\"))\n tc_h = parse_time_close_hours_form(d.get(\"time_close_hours\")) if tc_en else None\n if tc_en and not tc_h:\n tc_en = 0\n if is_trigger_entry_key_monitor_type(mt):" + ADD_INSERT + " if is_false_breakout_key_monitor_type(mt):",
1,
)
p.write_text(t, encoding="utf-8")
print("binance add_key done")
if __name__ == "__main__":
patch_okx()
patch_binance_add_key()