fix: calc_atr读stock_daily替换ifzq残留

This commit is contained in:
xxm
2026-08-26 22:35:05 +08:00
parent 37d2768409
commit 2dcce10044
+14 -18
View File
@@ -367,32 +367,28 @@ def enforce_strategy_quality(code, name, result):
def calc_atr(code, period=14):
"""腾讯API K线数据计算ATR(period),返回ATR值或None"""
""" stock_daily 表计算ATR(period),返回ATR值或None2026-08-26 分层铁律:消费层不直连腾讯API)"""
try:
url = f"http://ifzq.gtimg.cn/appstock/app/fqkline/get?param=hk{code},day,,,60,qfq"
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
resp = urllib.request.urlopen(req, timeout=5).read().decode('utf-8')
data = json.loads(resp)
bars = data.get('data', {}).get(f'hk{code}', {}).get('day', [])
if len(bars) < period + 1:
conn = sqlite3.connect('/home/hmo/MoFin/data/mofin.db', timeout=5)
rows = conn.execute(
"SELECT high, low, close FROM stock_daily WHERE code=? ORDER BY date DESC LIMIT 60", (code,)
).fetchall()
conn.close()
if len(rows) < period + 1:
return None
rows = list(reversed(rows))
trs = []
for i in range(1, min(len(bars), period + 1)):
try:
high = float(bars[i][2])
low = float(bars[i][3])
prev_close = float(bars[i-1][4]) if len(bars[i-1]) > 4 else float(bars[i-1][3])
tr = max(high - low, abs(high - prev_close), abs(low - prev_close))
trs.append(tr)
except (ValueError, IndexError):
continue
for i in range(1, len(rows)):
high, low, close = float(rows[i][0]), float(rows[i][1]), float(rows[i][2])
prev_close = float(rows[i-1][2])
tr = max(high - low, abs(high - prev_close), abs(low - prev_close))
trs.append(tr)
if not trs:
return None
return round(sum(trs) / len(trs), 2)
return round(sum(trs[-period:]) / period, 2)
except Exception:
return None
def calc_chip_sr(code, price):
"""从筹码分布计算支撑/阻力位。