"""补全 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()