This commit is contained in:
cheney
2026-06-24 16:50:59 +08:00
parent db4e519cc2
commit e046c08e02
18 changed files with 386 additions and 34 deletions
+9 -8
View File
@@ -5,7 +5,7 @@ from __future__ import annotations
from typing import Any, Dict, List
from sidecar.models import KlineBar, Snapshot, parse_date, parse_float
from sidecar.symbols import mootdx_market, normalize_symbol, split_symbol
from sidecar.symbols import is_index_symbol, mootdx_market, normalize_symbol, split_symbol
PERIOD_CATEGORY = {
@@ -48,7 +48,7 @@ class MootdxSource:
if category is None:
raise ValueError("不支持的 K 线周期: %s" % period)
_, code = split_symbol(normalized)
raw = self._call_bars(code, mootdx_market(normalized), category, limit)
raw = self._call_bars(normalized, code, mootdx_market(normalized), category, limit)
records = self._records(raw)
bars = []
for item in records:
@@ -111,17 +111,18 @@ class MootdxSource:
source="mootdx",
)
def _call_bars(self, code: str, market: int, category: int, limit: int) -> Any:
def _call_bars(self, symbol: str, code: str, market: int, category: int, limit: int) -> Any:
"""
功能说明:兼容调用不同版本 mootdx 的 bars 接口。
参数说明:code 为六位股票代码,market 为市场编号,category 为周期编号,limit 为数量。
功能说明:兼容调用不同版本 mootdx 的 K 线接口。
参数说明:symbol 为标准代码,code 为六位代码,market 为市场编号,category 为周期编号,limit 为数量。
返回值说明:返回 mootdx 原始结果对象。
注意事项:不同 mootdx 版本参数名存在差异,因此保留一次兼容重试。
注意事项:沪深指数必须使用 index_bars,普通 bars 会返回错误价格或异常日期。
"""
method = self.client.index_bars if is_index_symbol(symbol) else self.client.bars
try:
return self.client.bars(symbol=code, market=market, category=category, count=limit)
return method(symbol=code, market=market, category=category, count=limit)
except TypeError:
return self.client.bars(symbol=code, market=market, frequency=category, offset=0)
return method(symbol=code, market=market, frequency=category, offset=limit)
def _records(self, raw: Any) -> List[Dict[str, Any]]:
"""
+2 -2
View File
@@ -36,8 +36,8 @@ class TencentFinanceSource:
if tencent_period is None:
raise ValueError("腾讯财经 K 线暂不支持周期: %s" % period)
normalized = normalize_symbol(symbol)
url = "https://web.ifzq.gtimg.cn/appstock/app/fqkline/get?" + urlencode(
{"param": "%s,%s,,,%d,qfq" % (normalized, tencent_period, limit)}
url = "https://web.ifzq.gtimg.cn/appstock/app/kline/kline?" + urlencode(
{"param": "%s,%s,,,%d" % (normalized, tencent_period, limit)}
)
request = Request(url, headers={"User-Agent": "Mozilla/5.0 TortoiseSidecar/0.1"})
with urlopen(request, timeout=self.timeout_seconds) as response: