fix(datasource): 支持US_STOCK和HK_STOCK类型数据获取
- universal_fetcher.py: 添加 _fetch_us_stock 和 _fetch_hk_stock 方法 - flask_server.py: SSH_HOST 修正为正确的IP地址 8.218.167.69 - 测试 META 获取成功,info 字段在最外层返回179个属性
This commit is contained in:
12
.env
12
.env
@@ -25,3 +25,15 @@ OSS_ACCESS_KEY_ID=LTAI5tKD9izrfbQNSVeu4NYd
|
|||||||
OSS_ACCESS_KEY_SECRET=Vif8FmvEat9qBA4EBbKnXhHvFQokdR
|
OSS_ACCESS_KEY_SECRET=Vif8FmvEat9qBA4EBbKnXhHvFQokdR
|
||||||
OSS_BUCKET_NAME=value-investing
|
OSS_BUCKET_NAME=value-investing
|
||||||
OSS_ENDPOINT=https://oss-cn-wulanchabu.aliyuncs.com
|
OSS_ENDPOINT=https://oss-cn-wulanchabu.aliyuncs.com
|
||||||
|
|
||||||
|
# ==================== SSH 隧道配置(港美股代理) ====================
|
||||||
|
SSH_ENABLED=true
|
||||||
|
SSH_HOST=8.218.167.69
|
||||||
|
SSH_PORT=22
|
||||||
|
SSH_USERNAME=root
|
||||||
|
SSH_KEY_PATH=hk_ecs.pem
|
||||||
|
SSH_LOCAL_PORT=1080
|
||||||
|
|
||||||
|
# ==================== Flask 缓存配置 ====================
|
||||||
|
CACHE_MAXSIZE=128
|
||||||
|
CACHE_TTL_SECONDS=7200
|
||||||
|
|||||||
@@ -135,8 +135,12 @@ class UniversalDataFetcher:
|
|||||||
return self._fetch_china_etf(code, start_date, end_date)
|
return self._fetch_china_etf(code, start_date, end_date)
|
||||||
elif asset_type == AssetType.US_INDEX:
|
elif asset_type == AssetType.US_INDEX:
|
||||||
return self._fetch_us_index(code, start_date, end_date)
|
return self._fetch_us_index(code, start_date, end_date)
|
||||||
|
elif asset_type == AssetType.US_STOCK:
|
||||||
|
return self._fetch_us_stock(code, start_date, end_date)
|
||||||
elif asset_type == AssetType.HK_INDEX:
|
elif asset_type == AssetType.HK_INDEX:
|
||||||
return self._fetch_hk_index(code, start_date, end_date)
|
return self._fetch_hk_index(code, start_date, end_date)
|
||||||
|
elif asset_type == AssetType.HK_STOCK:
|
||||||
|
return self._fetch_hk_stock(code, start_date, end_date)
|
||||||
elif asset_type == AssetType.FUTURES:
|
elif asset_type == AssetType.FUTURES:
|
||||||
return self._fetch_futures(code, start_date, end_date)
|
return self._fetch_futures(code, start_date, end_date)
|
||||||
elif asset_type == AssetType.CRYPTO:
|
elif asset_type == AssetType.CRYPTO:
|
||||||
@@ -262,6 +266,20 @@ class UniversalDataFetcher:
|
|||||||
self._start_tunnel()
|
self._start_tunnel()
|
||||||
return self._yfinance.fetch(code, start_date, end_date)
|
return self._yfinance.fetch(code, start_date, end_date)
|
||||||
|
|
||||||
|
def _fetch_us_stock(
|
||||||
|
self,
|
||||||
|
code: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> Optional[pd.DataFrame]:
|
||||||
|
"""
|
||||||
|
获取美股股票
|
||||||
|
|
||||||
|
特点:YFinance,需要SSH隧道,返回价格+股票信息
|
||||||
|
"""
|
||||||
|
self._start_tunnel()
|
||||||
|
return self._yfinance.fetch(code, start_date, end_date)
|
||||||
|
|
||||||
def _fetch_hk_index(
|
def _fetch_hk_index(
|
||||||
self,
|
self,
|
||||||
code: str,
|
code: str,
|
||||||
@@ -276,6 +294,20 @@ class UniversalDataFetcher:
|
|||||||
self._start_tunnel()
|
self._start_tunnel()
|
||||||
return self._yfinance.fetch(code, start_date, end_date)
|
return self._yfinance.fetch(code, start_date, end_date)
|
||||||
|
|
||||||
|
def _fetch_hk_stock(
|
||||||
|
self,
|
||||||
|
code: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> Optional[pd.DataFrame]:
|
||||||
|
"""
|
||||||
|
获取港股股票
|
||||||
|
|
||||||
|
特点:YFinance,需要SSH隧道,返回价格+股票信息
|
||||||
|
"""
|
||||||
|
self._start_tunnel()
|
||||||
|
return self._yfinance.fetch(code, start_date, end_date)
|
||||||
|
|
||||||
def _fetch_futures(
|
def _fetch_futures(
|
||||||
self,
|
self,
|
||||||
code: str,
|
code: str,
|
||||||
|
|||||||
Reference in New Issue
Block a user