You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
17 KiB
17 KiB
AmazingDataAdapter 接口文档
基于银河证券星耀数智量化平台 SDK 的 Python 适配器接口文档
目录
快速开始
import asyncio
from app.adapters.amazingdata_adapter import AmazingDataAdapter, SecurityType, Market
async def main():
# 1. 创建适配器
adapter = AmazingDataAdapter()
# 2. 连接数据源
await adapter.connect({
"username": "your_username",
"password": "your_password",
"host": "your_host",
"port": 8600,
"local_path": "./amazing_data_cache/",
"use_local_cache": True
})
# 3. 获取数据
klines = await adapter.fetch_klines(
symbol="000001.SZ",
start="20240101",
end="20241231",
freq="1d"
)
print(f"获取到 {len(klines)} 条K线数据")
# 4. 断开连接
await adapter.close()
asyncio.run(main())
枚举类型
SecurityType - 证券类型
| 枚举值 | 说明 |
|---|---|
SecurityType.STOCK_A |
沪深A股 |
SecurityType.STOCK_A_SH_SZ |
沪深A股(沪深) |
SecurityType.INDEX_A |
沪深指数 |
SecurityType.ETF |
ETF |
SecurityType.FUTURE |
期货 |
SecurityType.KZZ |
可转债 |
SecurityType.GLRA |
逆回购 |
SecurityType.HKT |
港股通 |
SecurityType.ETF_OP |
ETF期权 |
Market - 市场
| 枚举值 | 说明 |
|---|---|
Market.SH |
上海 |
Market.SZ |
深圳 |
Market.BJ |
北京 |
接口列表
基础数据接口
1. fetch_klines - 获取历史K线
async def fetch_klines(
self,
symbol: str,
start: str,
end: str,
freq: str
) -> List[KLineData]
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| symbol | str | 标的代码,如 "000001.SZ" |
| start | str | 开始日期,格式 YYYYMMDD |
| end | str | 结束日期,格式 YYYYMMDD |
| freq | str | 周期:1m/5m/15m/30m/60m/1d/1w/1M |
返回数据 (KLineData):
| 字段 | 类型 | 说明 |
|---|---|---|
| symbol | str | 标的代码 |
| time | int | Unix时间戳 |
| open | float | 开盘价 |
| high | float | 最高价 |
| low | float | 最低价 |
| close | float | 收盘价 |
| volume | int | 成交量 |
| amount | float | 成交金额 |
| trade_date | str | 交易日 (YYYY-MM-DD) |
| is_limit_up | bool | 是否涨停 |
| is_limit_down | bool | 是否跌停 |
| total_market_cap | float | 总市值(元) |
| float_market_cap | float | 流通市值(元) |
| inst_holding_ratio | float | 机构持仓占比(%) |
| trading_days | int | 可交易日数 |
2. fetch_symbols - 获取标的列表
async def fetch_symbols(
self,
asset_type: str
) -> List[SymbolInfo]
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| asset_type | str | 资产类型:stock/futures |
返回数据 (SymbolInfo):
| 字段 | 类型 | 说明 |
|---|---|---|
| symbol_id | str | 标的代码 |
| name | str | 标的名称 |
| exchange | str | 交易所 |
| underlying | str | 期货品种代码 |
| contract_month | str | 合约月份 |
3. fetch_trading_calendar - 获取交易日历
async def fetch_trading_calendar(
self,
exchange: str,
start: str,
end: str
) -> List[TradeCalData]
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| exchange | str | 交易所代码:SH/SZ |
| start | str | 开始日期 YYYYMMDD |
| end | str | 结束日期 YYYYMMDD |
4. get_code_info - 获取证券基本信息
async def get_code_info(
self,
security_type: SecurityType = SecurityType.STOCK_A
) -> pd.DataFrame
返回字段:
| 字段 | 说明 |
|---|---|
| symbol | 证券简称 |
| security_status | 产品状态标志 |
| pre_close | 昨收价 |
| high_limited | 涨停价 |
| low_limited | 跌停价 |
| price_tick | 最小价格变动单位 |
5. get_trading_calendar - 获取交易日历(列表)
async def get_trading_calendar(
self,
market: Market = Market.SH
) -> List[int]
返回: 交易日列表,格式 [20240102, 20240103, ...]
6. get_adj_factor - 获取单次复权因子
async def get_adj_factor(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> pd.DataFrame
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| codes | List[str] | 股票代码列表 |
| is_local | bool | 是否使用本地缓存 |
返回: DataFrame (index: 日期, columns: 股票代码)
7. get_backward_factor - 获取后复权因子
async def get_backward_factor(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> pd.DataFrame
历史行情接口
8. get_snapshot - 获取历史快照
async def get_snapshot(
self,
codes: List[str],
start_date: str,
end_date: str
) -> Dict[str, pd.DataFrame]
说明: 获取Level-1行情快照数据
财务数据接口
9. get_balance_sheet - 资产负债表
async def get_balance_sheet(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
主要字段:
| 字段 | 说明 |
|---|---|
| TOTAL_ASSETS | 资产总计 |
| TOTAL_CUR_ASSETS | 流动资产合计 |
| TOTAL_NONCUR_ASSETS | 非流动资产合计 |
| TOTAL_LIAB | 负债合计 |
| TOT_SHARE_EQUITY_INCL_MIN_INT | 股东权益合计 |
| CURRENCY_CAP | 货币资金 |
| NOTES_RECEIVABLE | 应收票据 |
| ACCT_RECEIVABLE | 应收账款 |
| INV | 存货 |
10. get_cash_flow - 现金流量表
async def get_cash_flow(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
主要字段:
| 字段 | 说明 |
|---|---|
| NET_CASH_FLOWS_OPERA_ACT | 经营活动现金流净额 |
| NET_CASH_FLOWS_INV_ACT | 投资活动现金流净额 |
| NET_CASH_FLOWS_FIN_ACT | 筹资活动现金流净额 |
| NET_INCR_CASH_AND_CASH_EQU | 现金及现金等价物净增加额 |
11. get_income_statement - 利润表
async def get_income_statement(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
主要字段:
| 字段 | 说明 |
|---|---|
| TOT_OPERA_REV | 营业总收入 |
| OPERA_REV | 营业收入 |
| TOT_OPERA_COST | 营业总成本 |
| OPERA_PROFIT | 营业利润 |
| TOTAL_PROFIT | 利润总额 |
| NET_PRO_INCL_MIN_INT_INC | 净利润 |
| BASIC_EPS | 基本每股收益 |
| DILUTED_EPS | 稀释每股收益 |
| RD_EXP | 研发费用 |
12. get_profit_express - 业绩快报
async def get_profit_express(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| TOTAL_ASSETS | 总资产 |
| NET_PRO_EXCL_MIN_INT_INC | 净利润 |
| TOT_OPERA_REV | 营业总收入 |
| TOTAL_PROFIT | 利润总额 |
| OPERA_PROFIT | 营业利润 |
| EPS_BASIC | 基本每股收益 |
| ROE_WEIGHTED | 净资产收益率-加权 |
| YOY_GR_NET_PROFIT_PARENT | 同比增长率 |
13. get_profit_notice - 业绩预告
async def get_profit_notice(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| P_TYPECODE | 业绩预告类型代码 |
| P_CHANGE_MAX | 预告净利润变动幅度上限 |
| P_CHANGE_MIN | 预告净利润变动幅度下限 |
| NET_PROFIT_MAX | 预告净利润上限(万元) |
| NET_PROFIT_MIN | 预告净利润下限(万元) |
| P_REASON | 业绩变动原因 |
股东股本接口
14. get_top10_shareholders - 十大股东
async def get_top10_shareholders(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| HOLDER_NAME | 股东名称 |
| HOLDER_QUANTITY | 持股数 |
| HOLDER_PCT | 持股比例(%) |
| HOLDER_HOLDER_CATEGORY | 股东性质(1:个人, 2:公司) |
| FLOAT_QTY | 流通股数量 |
15. get_shareholder_count - 股东户数
async def get_shareholder_count(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| HOLDER_TOTAL_NUM | A股、B股、H股、境外股的总户数 |
| HOLDER_NUM | A股股东户数 |
16. get_equity_structure - 股本结构
async def get_equity_structure(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| TOT_SHARE | 总股本(万股) |
| FLOAT_SHARE | 流通股(万股) |
| FLOAT_A_SHARE | 流通A股(万股) |
| RESTRICTED_A_SHARE | 限售A股(万股) |
| TOT_RESTRICTED_SHARE | 限售股合计 |
融资融券接口
17. get_margin_summary - 融资融券汇总
async def get_margin_summary(
self,
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| TRADE_DATE | 交易日期 |
| SUM_BORROW_MONEY_BALANCE | 融资余额(元) |
| SUM_PURCH_WITH_BORROW_MONEY | 融资买入额(元) |
| SUM_REPAYMENT_OF_BORROW_MONEY | 融资偿还额(元) |
| SUM_SEC_LENDING_BALANCE | 融券余额(元) |
| SUM_SALES_OF_BORROWED_SEC | 融券卖出量 |
| SUM_MARGIN_TRADE_BALANCE | 融资融券余额(元) |
18. get_margin_detail - 个股融资融券明细
async def get_margin_detail(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
主要字段:
| 字段 | 说明 |
|---|---|
| BORROW_MONEY_BALANCE | 融资余额 |
| PURCH_WITH_BORROW_MONEY | 融资买入额 |
| REPAYMENT_OF_BORROW_MONEY | 融资偿还额 |
| SEC_LENDING_BALANCE | 融券余额 |
| SALES_OF_BORROWED_SEC | 融券卖出量 |
交易异动接口
19. get_longhu_bang - 龙虎榜数据
async def get_longhu_bang(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| TRADE_DATE | 交易日期 |
| REASON_TYPE_NAME | 上榜原因 |
| CHANGE_RANGE | 涨跌幅(%) |
| TRADER_NAME | 营业部名称 |
| BUY_AMOUNT | 买入金额(元) |
| SELL_AMOUNT | 卖出金额(元) |
| FLOW_MARK | 买卖表示(1买入, 2卖出) |
20. get_block_trading - 大宗交易
async def get_block_trading(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> pd.DataFrame
主要字段:
| 字段 | 说明 |
|---|---|
| TRADE_DATE | 交易日期 |
| B_SHARE_PRICE | 成交价(元) |
| B_SHARE_VOLUME | 成交量(万股) |
| B_SHARE_AMOUNT | 成交金额(万元) |
| B_BUYER_NAME | 买方营业部名称 |
| B_SELLER_NAME | 卖方营业部名称 |
指数数据接口
21. get_index_constituents - 指数成分股
async def get_index_constituents(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
支持指数:
| 代码 | 名称 |
|---|---|
| 000016.SH | 上证50 |
| 000300.SH | 沪深300 |
| 000905.SH | 中证500 |
| 000906.SH | 中证800 |
| 000852.SH | 中证1000 |
返回字段:
| 字段 | 说明 |
|---|---|
| INDEX_CODE | 指数代码 |
| CON_CODE | 成分股代码 |
| INDATE | 纳入日期 |
| OUTDATE | 剔除日期 |
| INDEX_NAME | 指数名称 |
22. get_index_weights - 成分股权重
async def get_index_weights(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
返回字段:
| 字段 | 说明 |
|---|---|
| INDEX_CODE | 指数代码 |
| CON_CODE | 标的代码 |
| TRADE_DATE | 生效日期 |
| WEIGHT | 权重(%) |
| CLOSE | 收盘价 |
ETF数据接口
23. get_etf_pcf - ETF申赎数据
async def get_etf_pcf(
self,
codes: List[str]
) -> Tuple[pd.DataFrame, Dict[str, pd.DataFrame]]
返回: (etf_info, etf_constituents)
etf_info字段:
| 字段 | 说明 |
|---|---|
| creation_redemption_unit | 每个篮子对应的ETF份数 |
| max_cash_ratio | 最大现金替代比例 |
| creation | 是否允许申购 |
| redemption | 是否允许赎回 |
etf_constituents字段:
| 字段 | 说明 |
|---|---|
| underlying_symbol | 成份证券简称 |
| component_share | 成份证券数量 |
| substitute_flag | 现金替代标志 |
24. get_fund_share - 基金份额
async def get_fund_share(
self,
codes: List[str],
start_date: Optional[str] = None,
end_date: Optional[str] = None,
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
主要字段:
| 字段 | 说明 |
|---|---|
| FUND_SHARE | 基金份额(万份) |
| TOTAL_SHARE | 基金总份额(万份) |
| FLOAT_SHARE | 流通份额(万份) |
| CHANGE_REASON | 份额变动原因 |
可转债数据接口
25. get_kzz_issuance - 可转债发行数据
async def get_kzz_issuance(
self,
codes: List[str],
is_local: Optional[bool] = None
) -> Dict[str, pd.DataFrame]
主要字段:
| 字段 | 说明 |
|---|---|
| STOCK_CODE | 正股代码 |
| LISTED_DATE | 上市日期 |
| PLAN_SCHEDULE | 方案进度 |
| CLAUSE_INI_CONV_PRICE | 初始转换价格 |
| LIST_ISSUE_SIZE | 发行规模(万元) |
| LIST_ISSUE_QUANTITY | 发行数量(万张) |
| TERM_YEAR | 借款期限(年) |
| COUPON_RATE | 利率(%) |
使用示例
示例1:获取股票K线并判断是否涨停
import asyncio
from app.adapters.amazingdata_adapter import AmazingDataAdapter
async def main():
adapter = AmazingDataAdapter()
await adapter.connect({
"username": "xxx", "password": "xxx",
"host": "xxx", "port": 8600
})
# 获取K线
klines = await adapter.fetch_klines("000001.SZ", "20240101", "20241231", "1d")
for k in klines:
print(f"日期: {k.trade_date}, 收盘: {k.close}, "
f"涨停: {k.is_limit_up}, 跌停: {k.is_limit_down}")
await adapter.close()
asyncio.run(main())
示例2:获取财务报表
# 获取资产负债表
balance = await adapter.get_balance_sheet(
codes=["000001.SZ", "600000.SH"],
start_date="20240930",
end_date="20240930"
)
for code, df in balance.items():
print(f"{code} 总资产: {df['TOTAL_ASSETS'].values[0]}")
示例3:获取指数成分股
# 沪深300成分股
constituents = await adapter.get_index_constituents(["000300.SH"])
df = constituents["000300.SH"]
print(f"成分股数量: {len(df)}")
print(df[["CON_CODE", "INDATE"]].head())
示例4:获取龙虎榜数据
longhu = await adapter.get_longhu_bang(
codes=["000001.SZ"],
start_date="20240101",
end_date="20241231"
)
print(longhu[["TRADE_DATE", "REASON_TYPE_NAME", "BUY_AMOUNT", "SELL_AMOUNT"]])
注意事项
- 连接管理: 使用前先调用
connect(),使用后调用close() - 日期格式: 支持
YYYYMMDD、"YYYY-MM-DD"或date对象 - 本地缓存: 默认启用,可设置
is_local=False强制从服务器获取 - 批量处理: 大量数据建议分批获取,每批 50-100 个代码
- 错误处理: 连接断开会抛出
RuntimeError,需做好异常处理
文档版本: 1.0
更新日期: 2024-03-11