fix: leader_scanner补写candidates(带rr/source_strategy)+v_next映射——trend_up激活策略(v_next/v8.1)真正进入选股管道
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
|
||||
注意:这是初版框架,需 MoFin 引擎验证达标(年化≥13.2%)才正式上线
|
||||
"""
|
||||
import os
|
||||
import sqlite3
|
||||
import json
|
||||
from datetime import datetime
|
||||
@@ -90,6 +91,39 @@ def scan_leaders():
|
||||
|
||||
def main():
|
||||
signals = scan_leaders()
|
||||
# 2026-08-18 补写 candidates(trend_up 激活策略真正进入选股管道)
|
||||
_strategy_tag = os.environ.get("LEADER_STRATEGY", "v_next")
|
||||
try:
|
||||
_c = sqlite3.connect(DB, timeout=30)
|
||||
_c.execute("PRAGMA busy_timeout=30000")
|
||||
_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
_ins = 0
|
||||
for s in signals:
|
||||
code = str(s["code"])
|
||||
_price = s.get("ma20") or 0 # 用 MA20 附近作为参考价
|
||||
if _price <= 0:
|
||||
continue
|
||||
_sl = round(_price * 0.92, 2) # 跌破 MA20 容忍 8%
|
||||
_tp = round(_price * 1.15, 2) # +15% 压力位
|
||||
_mid = (_price * 0.98 + _price) / 2
|
||||
_rr = round((_tp - _mid) / (_mid - _sl), 2) if _mid > _sl else 0
|
||||
_en = f"{_price*0.98:.2f}~{_price:.2f}"
|
||||
try:
|
||||
_c.execute(
|
||||
"INSERT INTO candidates (code, name, sector, reason, entry_range, stop_loss, target, rr, source_strategy, created_at) "
|
||||
"VALUES (?,?,?,?,?,?,?,?,?,datetime('now','localtime')) "
|
||||
"ON CONFLICT(code) DO UPDATE SET reason=excluded.reason, entry_range=excluded.entry_range, "
|
||||
"stop_loss=excluded.stop_loss, target=excluded.target, rr=excluded.rr, source_strategy=excluded.source_strategy",
|
||||
(code, code, _strategy_tag,
|
||||
f"龙头回调MA20: rsi={s.get('rsi')} dist={s.get('dist_ma20')}% mcap_q={s.get('mcap_q')}",
|
||||
_en, _sl, _tp, _rr, _strategy_tag))
|
||||
_ins += 1
|
||||
except Exception:
|
||||
pass
|
||||
_c.commit(); _c.close()
|
||||
print(f"写入 candidates: {_ins} 只 (策略 {_strategy_tag})")
|
||||
except Exception as e:
|
||||
print(f"candidates 写入失败: {e}")
|
||||
out = {
|
||||
"state": load_market_state().get("state", "neutral"),
|
||||
"signals": signals,
|
||||
|
||||
@@ -51,6 +51,7 @@ STRATEGY_SCANNER = {
|
||||
"v_lurk_v1": "mr_scanner.py",
|
||||
"v_lurk_v2": "mr_scanner.py",
|
||||
"v_lurk_v3": "mr_scanner.py",
|
||||
"v_next": "leader_scanner.py",
|
||||
"v_next4": "leader_scanner.py",
|
||||
"v8.1": "leader_scanner.py",
|
||||
"v_next5": "leader_scanner.py",
|
||||
|
||||
Reference in New Issue
Block a user