# RQAMSC 用户说明文档
# rqamsc 介绍
RQAMS (opens new window) 是由米筐科技开发的,集多资产管理、实时监控、绩效分析、风险分析等多种功能于一体的智能投资组合管理平台。
rqamsc 为管理 RQAMS 平台上的资源(交割单、组合、产品等)提供了 Python 接口,大幅提升了 RQAMS 的自动化程度,打通了量化交易和资管系统。
如果您不满足仅仅能管理 RQAMS 平台的话,您可以申请 RQAMS 的私有化部署,通过 rqamsc 管理您的私有 RQAMS。
[toc]
# 安装 & 升级(当前最新版本:0.3.7)
支持 Python 3.7, 3.8, 3.9
pip install --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/ rqamsc
或者
pip install -i https://rquser:ricequant99@py.ricequant.com/simple/ rqamsc
升级包版本可使用 --upgrade 参数(使用该参数可以保证获取最新的 rqamsc 版本), 示例如下
pip install --upgrade rqamsc --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/
或者
pip install --upgrade rqamsc -i https://rquser:ricequant99@py.ricequant.com/simple/
# 快速开始
首先 import rqamsc 包
>>> import rqamsc
接着登录 RQAMS 平台。username/password 是您登陆 RQAMS 的凭证,uri 是要访问的 RQAMS 平台地址,默认是米筐官方 RQAMS 平台(了解访问私有 RQAMS 平台):
>>> rqamsc.init(username="yourname@example.com", password="yourpassword", uri="https://www.ricequant.com")
现在尝试获取一下当前空间(多个空间情况下登录后默认使用第一个空间, 切换空间相关请参考工作空间)下的所有产品:
>>> rqamsc.list_products()
[Product(name=多策略1号, data_source=trade_and_valuation_report, start_date=2021-03-10, investment_category=equity, benchmark={'type': 'index', 'id': '000300.XSHG'}, calendar=exchange, auto_equity=True, unit_policy=auto_prev_unit_net_value, accounts=[{'account_number': '123', 'name': '测试托管帐号', 'broker': 'RQ通道', 'is_custodian': True}, {'account_number': '123', 'name': '测试交易帐号', 'broker': 'RQ通道', 'is_custodian': False}], fee_settings={'management_fee_rate': 0.0, 'custodian_fee_rate': 0.0, 'operation_fee_rate': 0.0, 'sales_and_service_fee_rate': 0.0}, user_id=321843, workspace_id=5e9a6b06ba363be9fce2a599, product_state=normal, full_name=多策略1号, create_time=2021-08-02 11:37:43, case_number=, manager=, invest_advisor=, invest_manager=, maturity_date=2999-12-31, closing_date=None, id=61076887224d591257c5ebb5)]
程序调用固然好用,但仍然有很多操作需要在网页端完成,敲一下 go 就可以登录了
>>> rqamsc.go()
# 登录
rqamsc.init(username, password, uri="https://www.ricequant.com", ssl_verify=True)
- 参数
参数 | 类型 | 说明 |
---|---|---|
username | str | 用户名 |
password | str | 密码 |
uri | str | AMS 平台 URI,默认为米筐官方 RQAMS 平台 URI |
ssl_verify | bool | 是否开启 https 认证(默认开启,若无 https 则可以指定为 False 来关闭) |
# 浏览器里打开 RQAMS
rqamsc.go()
# 工作空间
工作空间是您创建产品,管理资产,和其他人协同工作的场所,您可以邀请其人进入您的工作空进和您协作,也可能被邀请进入其他人的工作空间。
对于大多数的用户,默认工作空间已经可以满足日常工作所需。您也可在 RQAMS 平台上创建新的工作空间,rqamsc 支持在不同的工作空间中切换使用。 (更多关于工作空间的介绍请前往米筐官方网站 (opens new window))
查询当前您创建或者参与的工作空间是很简单的:
rqamsc.get_workspaces()
# 获取所有工作空间信息
获取所有您拥有的或者参与的工作空间。
rqamsc.get_workspaces()
- 返回
List[Workspace]
# 指定一个工作空间
一般情况下您处于默认的工作空间中。choose_workspace 让您可以在工作空间之间切换。
rqamsc.choose_workspace(workspace_name_or_id: str)
# 获取当前工作空间
rqamsc.current_workspace()
- 返回
# 产品管理
# 获取全部产品信息
rqamsc.list_products() -> List[Product]
获取全部的产品信息
- 返回
List[Product]
- 示例
>>> rqamsc.list_products()
[Product(name=多策略1号, data_source=trade_and_valuation_report, start_date=2021-03-10, investment_category=equity, benchmark={'type': 'index', 'id': '000300.XSHG'}, calendar=exchange, auto_equity=True, unit_policy=auto_prev_unit_net_value, accounts=[{'account_number': '123', 'name': '测试托管帐号', 'broker': 'RQ通道', 'is_custodian': True}, {'account_number': '123', 'name': '测试交易帐号', 'broker': 'RQ通道', 'is_custodian': False}], fee_settings={'management_fee_rate': 0.0, 'custodian_fee_rate': 0.0, 'operation_fee_rate': 0.0, 'sales_and_service_fee_rate': 0.0}, user_id=321843, workspace_id=5e9a6b06ba363be9fce2a599, product_state=normal, full_name=多策略1号, create_time=2021-08-02 11:37:43, case_number=, manager=, invest_advisor=, invest_manager=, maturity_date=2999-12-31, closing_date=None, id=61076887224d591257c5ebb5)]
# 获取单个产品信息
rqamsc.get_product(product_id_or_name: str) -> Product
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
- 返回
- 示例
>>> rqamsc.get_product("60b49659dd715e69dd8b1d8a")
Product(name=多策略1号, data_source=trade_and_valuation_report, start_date=2021-03-10, investment_category=equity, benchmark={'type': 'index', 'id': '000300.XSHG'}, calendar=exchange, auto_equity=True, unit_policy=auto_prev_unit_net_value, accounts=[{'account_number': '123', 'name': '测试托管帐号', 'broker': 'RQ通道', 'is_custodian': True}, {'account_number': '123', 'name': '测试交易帐号', 'broker': 'RQ通道', 'is_custodian': False}], fee_settings={'management_fee_rate': 0.0, 'custodian_fee_rate': 0.0, 'operation_fee_rate': 0.0, 'sales_and_service_fee_rate': 0.0}, user_id=321843, workspace_id=5e9a6b06ba363be9fce2a599, product_state=normal, full_name=多策略1号, create_time=2021-08-02 11:37:43, case_number=, manager=, invest_advisor=, invest_manager=, maturity_date=2999-12-31, closing_date=None, id=61076887224d591257c5ebb5)
# 修改单个产品信息
rqamsc.update_product(product_id_or_name: str, update_fields: Dict) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
update_fields | dict | 是 | 需要修改的产品信息(字段值可参考 Product ) |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 是否修改成功(1:成功, 0:未成功) |
- 示例
>>> rqamsc.update_product('范例产品', update_fields={'name': '范例产品copy'})
{'effect_count': 1}
# 删除单个产品
rqamsc.delete_product(product_id_or_name: str) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 是否删除成功(1:成功, 0:未成功) |
- 示例
>>> rqamsc.delete_product('范例产品')
{'effect_count': 1}
# 产品组管理
# 获取全部产品组信息
rqamsc.list_product_groups() -> List[ProductGroup]
获取全部的产品组信息
- 返回
List[ProductGroup]
- 示例
>>> rqamsc.list_product_groups()
[ProductGroup(name=范例产品组-等权, products=[{'id': '635fa0dcf900a7b2fcfb44c0', 'name': '量化对冲_347418'}, {'id': '635fa0e3f900a7b2fcfb4670', 'name': '商品期货_347418'}, {'id': '635fa0e3f900a7b2fcfb4691', 'name': '300估值因子增强_347418'}, {'id': '635fa0d6f900a7b2fcfb4485', 'name': '期权产品_347418'}, {'id': '635fa0d9f900a7b2fcfb449f', 'name': '可转债产品_347418'}], benchmark={'type': 'index', 'id': '000300.XSHG'}, description=范例产品组, create_time=2021-10-14 17:15:46, paper_trading=False, product_weights={'635fa0dcf900a7b2fcfb44c0': 0.2, '635fa0e3f900a7b2fcfb4670': 0.2, '635fa0e3f900a7b2fcfb4691': 0.2, '635fa0d6f900a7b2fcfb4485': 0.2, '635fa0d9f900a7b2fcfb449f': 0.2}, id=6167f542ea2e8ac215581cde)]
# 获取单个产品组信息
rqamsc.get_product_group(group_id_or_name: str) -> ProductGroup
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
group_id_or_name | str | 是 | 产品组 id 或名称 |
- 返回
- 示例
>>> rqamsc.get_product_group("范例产品组")
ProductGroup(name=范例产品组, products=[{'id': '635fa0dcf900a7b2fcfb44c0', 'name': '量化对冲_347418'}, {'id': '635fa0e3f900a7b2fcfb4670', 'name': '商品期货_347418'}, {'id': '635fa0e3f900a7b2fcfb4691', 'name': '300估值因子增强_347418'}, {'id': '635fa0d6f900a7b2fcfb4485', 'name': '期权产品_347418'}, {'id': '635fa0d9f900a7b2fcfb449f', 'name': '可转债产品_347418'}], benchmark={'type': 'index', 'id': '000300.XSHG'}, description=, create_time=2023-05-05 17:22:44, paper_trading=False, product_weights=None, id=6454cae473ddf7712bcd3434)
# 修改单个产品组信息
rqamsc.update_product_group(group_id_or_name: str, update_fields: Dict) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
group_id_or_name | str | 是 | 产品组 id 或名称 |
update_fields | dict | 是 | 需要修改的产品信息(字段值可参考 ProductGroup ) |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 是否修改成功(1:成功, 0:未成功) |
- 示例
# 以下为聚合型产品组字段构建
update_fields = {
'name': '新的聚合型范例产品组名称',
'benchmark': {'index': '000300.XSHG'},
'products': [
{'id': "6423efcab15e5e6bbd037292", 'name': "范例产品1"}, # 可省略name
{'id': "641d74fe026c38928ac2ef55", 'name': "范例产品2"}
]
}
# 以下为权重产品组字段构建,也可以使聚合产品组变为权重产品组
update_fields = {
'name': '新的权重产品组名称',
'product_weights': {'6423efcab15e5e6bbd037292': 0.5, '641d74fe026c38928ac2ef55': 0.5}
}
# 若想将权重产品组改为聚合产品组,需要设置product_weights为空
update_fields = {
'name': '新的聚合产品组名称',
'products': [
{'id': "6423efcab15e5e6bbd037292", 'name': "范例产品1"},
{'id': "641d74fe026c38928ac2ef55", 'name': "范例产品2"}
],
'product_weights': None
}
# 删除单个产品组
rqamsc.delete_product_group(group_id_or_name: str) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
group_id_or_name | str | 是 | 产品组 id 或名称 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 是否删除成功(1:成功, 0:未成功) |
# 交易流水管理
# 给产品导入交易流水
使用此方式导入的流水称为 openapi 来源流水,该流水类型特点可参考 交易流水来源
rqamsc.insert_product_trades(product_id_or_name: str, trades_or_df: Union[List[Dict], DataFrame], chunk_size: int = 1000) -> List[Dict]
- 参数:流水中可能有的信息如下
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
trading_asset_class | str | 否 | 交易属性, 提供可以提高识别精准度 |
transaction_type | str | 是 | 交易类型 |
account | str | 否 | 交易账户名称,不提供则默认第一个产品账户 |
datetime | str,datetime,date | 是 | 交易时间 |
order_book_id | str | 是 | 合约 id |
symbol | str | 是 | 合约名称 |
quantity | float | 否 | 交易数量(现金等资产,数量即表示金额) |
price | float | 否 | 交易价格(回购价格表示其利率,注意百分制处理) |
settlement_amount | float | 否 | 交易金额(涉及金额的交易类型需要设置该字段,eg. 分红、转债回售、付息、出入金、现金存取、基金申购金额等) |
commission | float | 否 | 交易佣金 |
tax | float | 否 | 交易税 |
other_fees | float | 否 | 其他费用 |
exchange_rate | float | 否 | 汇率 |
remarks | str | 否 | 备注 |
foreign_id | str | 否 | 外部标识 id |
chunk_size: 按chunk_size切分成一个个的chunk,每次插入一个chunk大小。最小的chunk大小是500,默认为1000。
- 返回:返回一个结果列表,其顺序对应所上传数据的顺序,列表中每个元素(dict)表示一批导入结果,元素数据结构如下
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
chunk_start | int | 是 | 分批导入时每一批的起始位置, 第一批从位置 0 开始 | |
result | list[dict] | 是 | 每一批的导入结果 | |
id | str | 否 | 导入成功的交易流水 id | |
action | str | 否 | 导入行为: 1. 新增(insert) 2. 修改(modify) | |
err | str | 否 | 错误信息 |
# 给产品导入结算交易流水
使用此方式导入的流水称为日终结算流水,该流水类型特点可参考 交易流水来源
rqamsc.insert_product_settlement_trade_file(product_id_or_name: str, account_name: str, file_or_dir_path: Union[str, List[str]]) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 需要导入流水的产品 id 或产品名称 |
account_name | str | 是 | 需要导入流水的交易账号名称 |
file_or_dir_path | str or List[str] | 是 | 需要导入流水的文件或文件夹目录 |
- 返回:返回一个 Dict 字典,key 为文件路径, value 结构如下
文件导入状态 | 类型 | 参数 | 说明 |
---|---|---|---|
成功或部分导入成功 | dict | confirmation_id | 凭证 id, 可以通过此 id 查询凭证以获取详细的导入结果 |
effect_count | 解析出的流水数量 | ||
err_msg | 是一个存储 dict 的列表,存储导入失败的流水信息(全部成功则为空) | ||
失败 | str | 失败原因的信息 |
e.g.
{
"D:/kst20210618.csv": {
"confirmation_id": "617bb94760108f5400628391",
"effect_count": 6105,
"err_msg": []
},
"D:/kst20210621.csv": {
"confirmation_id": "617bb94560108f5400626bac",
"effect_count": 3261,
"err_msg": [{ "line_num": 2, "msg": "无法识别资产:资产分类信息获取失败" }]
},
"D:/日终结算.json": "流水文件格式错误"
}
# 获取产品的交易流水
rqamsc.get_product_trades(
product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None,
sources: Union[str, Iterable] = None, order_book_id: str = None, symbol: str = None,
asset_transaction_types: Union[str, Iterable] = None, account_names: Union[str, Iterable] = None,
key_words: Union[str, Iterable] = None, group_by: str = None, remarks: str = None,
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
start_date | int,str,datetime,date | 否 | 开始日期(如果不传则从今天向前取三个月) |
end_date | int,str,datetime,date | 否 | 结束日期(如果不传则为今天) |
sources | str,Iterable | 否 | 数据来源, 以下为数据来源及其对应可传入的值 1. 手工录入:手工录入、手工、manual 2. 日终结算:日终结算、日终、settlement_upload 3. 当日成交:当日成交、当日、日内、intraday_upload 4. open_api: open_api、api 5. 系统生成:系统生成、自动权益、auto_balance |
account_names | str,Iterable | 否 | 账户名称(可传字符串或字符串列表等) |
asset_transaction_types | str,Iterable | 否 | 资产类型 与 交易类型 (可传字符串或字符串列表等) eg. asset_transaction_types='stock-buy' |
key_words | str,Iterable | 否 | 关键字, 可检索'账号'、'代码'、'名称'、'变动类型'(传多个值时相互间为并集) |
order_book_id | str | 否 | 资产代码(根据所给值进行正则匹配, 不区分大小写) |
symbol | str | 否 | 资产名称(根据所给值进行正则匹配, 不区分大小写) |
group_by | str | 否 | 分组聚合关键字: 1. asset(根据资产聚合) 2. trading_date(根据交易日期聚合) |
remarks | str | 否 | 备注(根据所给值进行正则匹配, 不区分大小写) |
- 返回:交易流水数组,交易流水结构如下
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
asset_class | str | 是 | 交易属性 |
transaction_type | str | 是 | 交易类型 |
account | str | 是 | 交易账户名称 |
datetime | str | 是 | 交易时间 |
order_book_id | str | 是 | 合约 id |
symbol | str | 是 | 合约名称 |
quantity | float | 否 | 交易数量 |
price | float | 否 | 交易价格 |
commission | float | 否 | 交易佣金 |
tax | float | 否 | 交易税 |
other_fees | float | 否 | 其他费用 |
exchange_rate | float | 否 | 汇率 |
source | bool | 是 | 流水来源 |
foreign_id | str | 否 | 外部标识 id |
_id | str | 是 | AMS 系统内流水的唯一 id |
# 删除产品的交易流水
rqamsc.delete_product_trades(product_id_or_name: str, trade_ids: List[Union[str, ObjectId]]) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
trade_ids | List[str or ObjectId] | 否 | 流水 id(可见流水查询结果中 '_id' 字段) |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 删除流水的数量 |
# 交易流水文件自动化导入 AMS
AMS 对于一些常见的流水文件模板也做了一定的适配(如:迅投 csv 格式流水、CTP 来源 txt 格式流水)
启动服务可以使用如下两种方式
方式一:在 python 代码中启动
import rqamsc
rqamsc.init(username='AMS账号', password='AMS密码') # 具体可参考rqamsc的初始化
rqamsc.choose_workspace('AMS工作空间名称或id')
rqamsc.run_import_trades_server()
or
方式二:命令行启动
run_import_trades_server -u AMS账号 -p AMS密码 -w 工作空间名称或id
以下为该服务启动时所需的函数/命令参数
参数 | 是否必须 | 说明 |
---|---|---|
-u / --user_name | 否 | AMS 账号,若像方式一中已初始化过则无需指定,方式二则必须指定 |
-p / --password | 否 | AMS 密码,若像方式一中已初始化过则无需指定,方式二则必须指定 |
-w / --workspace | 否 | 需要导入的流水所在产品的工作空间名称或 id,若像方式一中已初始化过则无需指定,方式二则必须指定 |
-c / --config_file | 否 | 配置文件的绝对路径,默认为程序工作目录下的 config.yaml, 有关配置内容可见下方 |
--ams_uri | 否 | AMS 网页端地址,默认为线上,私有化部署用户可按实际情况指定 |
--ssl_verify | 否 | 是否进行安全检测,线上默认为 True, 私有化部署若未使用 https 需置为 False |
服务运行需要依赖 config.yaml 配置文件来明确要导入的流水文件与产品之间的关系,以及可以指定一些导入设置,其示例及参数如下
# 每30s同步一次实时流水至AMS
- path: D:\迅投流水目录
template: xuntou
interval: 30 # 用以做实时增量导入,30即30s导入一次
expire_time: "15:30" # 指定该项配置每天运行到15:30就不再执行
filename_model: Deal # 所要导入的流水文件名称中共有的字符串,如源文件为 Deal(20230808).csv, 即可指定为 Deal 用以区分出流水文件
product_account:
- product: 产品1
account_name: 产品1的迅投账号名称1
account_number: "000111" # 注意这里给定字符串类型的账号
- product: 产品1
account_name: 产品1的迅投账号2
account_number: "000222"
# 将 20230801~20230804 的历史流水导入AMS
- path: D:\迅投流水目录
template: xuntou
start: "20230801" # 指定导入哪些日期的流水,该字段为区间开始日期,不指定则只导入当天的流水
end: "20230804" # 指定导入哪些日期的流水,该字段为区间结束日期,不指定则只导入当天的流水
product_account:
- product: 产品1
account_name: 产品1的迅投账号名称1
account_number: "000111" # 注意这里给定字符串类型的账号
- product: 产品2
account_name: 产品2的迅投账号名称
account_number: "999999" # 注意这里给定字符串类型的账号
# 指定导入 20230726 的期货流水
- path: D:\期货流水目录
template: ctp_txt
interval: 0 # 不指定或为0时表示只执行一次
filename_model: FuturesSettlement
product_account:
- product: 期货产品
account_name: 期货账号名称
account_number: "888888"
start: "20230726"
end: "20230726"
配置文件关键字介绍
字段名 | 子字段 | 数据类型 | 是否必须 | 说明 |
---|---|---|---|---|
path | str | 是 | 流水文件所在的目录的地址 | |
template | str | 是 | 模板类型,目前已支持的类型如下: 1. xuntou: 迅投流水(要在迅投客户端的导出设置中选择全部字段的导出方式) 2. ctp_txt: CTP 期货期权 txt 格式结算单 3. caitong_txt: 财通期货期权 txt 格式结算单 | |
filename_model | str | 是 | 流水文件共有的一段连续的名称(如 FuturesSettlement_20230801.txt 可指定为 FuturesSettlement) | |
product_account | List[Dict] | 是 | ||
product | str | 是 | 产品名称, 指定需要导入哪个 AMS 产品 | |
account_name | str | 是 | 账号名称, 指定需要导入该产品的哪个账号 | |
account_number | str | 是 | 数字账号, 指定该账号名称对应的数字账号(有些账号名称会变化) | |
start | str | 否 | 指定导入哪些日期的流水(根据文件名中的日期,格式如'20230801'),该字段为区间开始日期,不指定则只导入当天的流水 | |
end | str | 否 | 指定导入哪些日期的流水(根据文件名中的日期,格式如'20230801'),该字段为区间结束日期,不指定则只导入当天的流水 | |
interval | int | 否 | 指定这个配置项每隔多少秒运行一次(一般用于实时导入),值为 0 或没有该字段则只会执行一次 | |
expire_time | str | 否 | 指定在每天的几点(格式可以是 'xx:xx')停止运行这个配置项(一般用于实时导入),值为'00:00'或没有该字段时默认全天运行 |
# 交易流水文件自定义导入 AMS
解析迅投流水文件为 DataFrame 格式
rqamsc.parse_xuntou_to_df(file_path: str) -> pd.DataFrame
解析 CTP 期货期权 txt 格式流水文件为 DataFrame 格式
rqamsc.parse_ctp_txt_to_df(file_path: str) -> pd.DataFrame
解析财通期货期权 txt 格式流水文件为 DataFrame 格式
rqamsc.parse_caitong_txt_to_df(file_path: str) -> pd.DataFrame
可将上述方法调用后的解析结果自定义处理后使用 insert_product_trades 导入 AMS, 如下示例
import rqamsc
df = rqamsc.parse_caitong_txt_to_df('直接指定要解析的文件地址')
# 这里对df做一些自定义处理,如指定账号名称(account)及foreign_id等
df['account'] = '账号1'
# 最后指定产品导入AMS
rqamsc.insert_product_trades('产品名称', df)
# RQAlpha 回测流水自动导入 AMS 使用说明
简介
用户可通过 rqalpha-mod-ams 模块自动将 RQAlpha 策略回测产生的交易流水上传至 RQAMS 资产管理平台,以便于对策略结果进行深度分析与模拟策略监控。
针对策略回测,用户仅需在 RQAMS 中新建对应产品,并将产品与所在工作空间名称配置在回测框架中即可,rqalpha-mod-ams 模块会自动生成产品的第一笔入金流水。
针对策略模拟交易,用户仅需运行 rqalpha 增量回测,即可实现策略每日流水增量导入 RQAMS 中的对应产品。
安装
pip install rqalpha-mod-ams>=1.1.1 --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/
修改配置让 rqalpha 支持 upload 上传交易流水的功能
rqalpha mod enable ams
查看 upload 的参数
rqalpha upload -h
使用案例
rqalpha upload --ams-product https://user:name@www.ricequant.com/workspace/product trades.csv
mod-ams 有如下配置:
当回测需要使用时,在 config 中的 mod 配置即可,如下
from rqalpha_plus.apis import *
from rqalpha_plus import run_func
def handle_bar(context, bar_dict):
# 股票
order_book_id = "000001.XSHE"
if get_position(order_book_id).quantity <= 300:
order_shares(order_book_id, 100)
elif get_position(order_book_id).quantity > 300:
order_shares(order_book_id, -100)
config = {
"base": {
"start_date": "2023-07-10",
"end_date": "2023-07-26",
"frequency": "1d",
"accounts": {
"stock": 200000,
"future": 100000
}
},
"mod": {
"sys_analyser": {
"benchmark": "000300.XSHG"
},
"ams": {
"enabled": True,
"ams_product": "https://username:password@www.ricequant.com/workspace/product",
# 上传的产品地址,需修改对应的用户名、密码、工作空间名称(或id)、产品名称(或id)
"reset_trades": True,
# 是否重置流水,重置表示删除start_date之后的流水再重新上传
}
}
}
if __name__ == '__main__':
result = run_func(config=config, handle_bar=handle_bar)
for key, value in result["sys_analyser"].items():
print(key)
print(value)
# 估值表管理
# 查看产品已导入估值表信息
rqamsc.list_inserted_valuation_reports(
product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None,
) -> List[Dict]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
start_date | int,str,datetime,date | 否 | 开始日期,不填默认产品开始日期 |
end_date | int,str,datetime,date | 否 | 结束日期,不填则表示今日 |
- 返回
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
date | str | 是 | 估值表日期 |
file_name | str | 是 | 估值表名称 |
valuation_report_id | str | 是 | 估值表 id |
# 返回数据示例:
result = [
{
'date': '2022-03-25',
'file_name': '估值表文件名称',
'valuation_report_id': '6243c819894ef8b1047b99d9'
}
]
# 给产品导入估值表
rqamsc.upload_valuation_reports_in_directories(
product_id_or_name: str, files_or_directories: Union[List[str], str], show_upload_progress: bool = False,
replace_dates: List[optional_datetime_like] = None
) -> List[Dict]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
files_or_directories | Union[str, List[str]]] | 是 | 文件(夹)路径列表或单个文件(夹)路径的字符 |
show_upload_progress | bool | 否 | 是否显示批量上传估值表文件的进度(一批为 10 个文件, 默认否) |
replace_dates | List[datetime_like] | 否 | 列表中日期表示在该日期已有估值表的情况下仍然覆盖 eg: ['20150101', '2015-01-01', datetime.date(2015, 1, 1), datetime.datetime(2015, 1, 1)] |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
file | str | 是 | 估值表文件地址 |
err_msg | Union[List[str], str] | 是 | 估值表识别错误提示 |
confirmation_id | str | 否 | 凭证 id |
# 删除产品已导入的估值表
rqamsc.delete_product_valuation_reports(
product_id_or_name: str, deleted_dates: Union[List[datetime_like], datetime_like]
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
dates | datetime_like or List[datetime_like] | 是 | 列表中需要指定每个要删除的估值表的日期,若需要删除某个时间区间内的所有估值表,可使用如下方式: list(pandas.date_range('2023-01-01', '20230201')) |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 删除估值表的数量 |
# 本地估值表文件自动化导入 AMS
对于存放在本地的估值表文件,可使用如下方式自动导入 AMS
方式一:通过 python 脚本运行
import rqamsc
rqamsc.init(username='AMS账号', password='AMS密码') # 具体可参考rqamsc的初始化
rqamsc.choose_workspace('AMS工作空间名称或id')
rqamsc.run_vr_importer()
or
方式二:命令行启动
run_vr_importer -u AMS账号 -p AMS密码 -w 工作空间名称或id
以下为该服务启动时所需的函数/命令参数
参数 | 是否必须 | 说明 |
---|---|---|
-u / --user_name | 否 | AMS 账号,若像方式一中已初始化过则无需指定,方式二则必须指定 |
-p / --password | 否 | AMS 密码,若像方式一中已初始化过则无需指定,方式二则必须指定 |
-w / --workspace | 否 | 需要导入的流水所在产品的工作空间名称或 id,若像方式一中已初始化过则无需指定,方式二则必须指定 |
-c / --config_file | 否 | 配置文件的绝对路径,默认为程序工作目录下的 config.yaml, 有关配置内容可见下方 |
--ams_uri | 否 | AMS 网页端地址,默认为线上,私有化部署用户可按实际情况指定 |
--ssl_verify | 否 | 是否进行安全检测,线上默认为 True, 私有化部署若未使用 https 需置为 False |
服务运行需要依赖 config.yaml 配置文件来明确要导入的流水文件与产品之间的关系,以及可以指定一些导入设置,其示例及参数如下
path: D:\估值表文件目录
product_vr_map:
- product: 产品1 # AMS中产品名称
full_name: xxxx一号证券投资基金委托资产估值表 # 注意:1.该字段与AMS产品的"产品全称"字段保持一致 2. 该字段包含于估值表文件名称中且区别与其他估值表文件名称
is_overwrite: true # 是否采用估值表对账中自动覆盖方式(true则表示使用估值表文件作为产品当天的估值结果)
- product: 产品2
full_name: xxxx二号证券投资基金委托资产估值表
# 持仓及衍生指标
# 获取产品或产品组单日头寸
rqamsc.get_balance(
product_like_id_or_name: str, dt: optional_datetime_like = None, auto_retry_valuation: bool = True
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品(组)的 id 或名称 |
dt | int,str,datetime,date | 否 | 日期,未来时间或不填则表示获取实时持仓 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
units | float | 是 | 份额 | |
unit_net_value | float | 是 | 单位净值 | |
acc_unit_net_value | float | 是 | 累计净值 | |
adjusted_net_value | float | 是 | 复权净值 | |
total_assets | float | 是 | 总资产 | |
total_equity | float | 是 | 净资产 | |
daily_pnl | float | 是 | 当日盈亏 | |
daily_returns | float | 是 | 当日盈亏率 | |
risk_exposure | float | 是 | 风险总敞口 | |
net_risk_exposure | float | 是 | 风险净敞口 | |
positions | list[dict] | 是 | 持仓 | |
order_book_id | str | 是 | 合约 id | |
symbol | str | 是 | 合约名称 | |
asset_class | str | 是 | 合约资产属性 | |
direction | str | 是 | 持仓方向 | |
quantity | float | 是 | 持仓数量 | |
avg_price | float | 是 | 开仓均价 | |
avg_price_include_fee | float | 是 | 开仓均价(含费) | |
fair_value | float | 是 | 公允价格 | |
market_value | float | 是 | 市值 | |
clean_price_market_value | float | 是 | 净价市值 | |
floating_pnl | float | 是 | 浮动盈亏 | |
floating_pnl_percentage | float | 是 | 浮动盈亏率 | |
accrued_interest | float | 否 | 应记利息 | |
exchange_rate | float | 是 | 汇率 | |
currency | str | 是 | 币种 | |
bonus_share_receivable | float | 否 | 应收红股 |
# 获取产品持仓(正在弃用)
rqamsc.get_product_positions(
product_id_or_name: str,
dt=Optional[Union[datetime.datetime, datetime.date, int, str]],
auto_retry_valuation: bool = True
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
dt | int,str,datetime,date | 否 | 日期,未来时间或不填则表示获取实时持仓 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
参考 获取产品或产品组单日头寸
# 获取产品或产品组指标
rqamsc.get_indicators(
product_like_id_or_name: str,
start_date: optional_datetime_like = None,
end_date: optional_datetime_like = None,
auto_retry_valuation: bool = True, **kwargs
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品(组)的 id 或名称 |
start_date | int,str,datetime,date | 否 | 开始日期,不填表示产品(组)开始日期 |
end_date | int,str,datetime,date | 否 | 结束日期,不填则表示昨日 |
benchmark(关键字参数) | str | 否 | 基准(默认使用产品(组)中所设置基准),所传值如 000300.XSHG 或 自定义基准 id |
extra_indicators(关键字参数) | str | 否 | 额外指标,可指定额外返回以下指标(多个指标使用英文逗号相连) 1.returns_summary: 收益概览 2. asset_series: 组合指标序列 3. benchmark_series: 基准收益序列 4. excess_returns: 主动收益序列 5. monthly_returns: 组合年月周度收益 6. leverage_ratio: 杠杆率序列 7. ashares_market_value: 市值分布 8. annual_risk: 年度风险指标 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
字段 | 子字段 | 孙字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|---|
daily_risk / weekly_risk / monthly_risk | dict | 是 | 区间日/周/月频业绩总览指标 | ||
alpha | float | 是 | 阿尔法 | ||
information_ratio | float | 是 | 信息比率 | ||
beta | float | 是 | 贝塔 | ||
correlation | float | 是 | 相关系数 | ||
sharpe | float | 是 | 夏普率 | ||
excess_sharpe | float | 是 | 超额夏普率 | ||
annual_tracking_error | float | 是 | 年化跟踪误差 | ||
annual_downside_risk | float | 是 | 年化下行风险 | ||
annual_volatility | float | 是 | 年化波动率 | ||
arithmetic_excess_annual_return | float | 是 | 年化(算术)超额收益 | ||
geometric_excess_annual_return | float | 是 | 年化(几何)超额收益 | ||
excess_annual_volatility | float | 是 | 年化超额波动率 | ||
max_drawdown | float | 是 | 最大回撤 | ||
geometric_excess_max_drawdown | float | 是 | (几何)超额最大回撤 | ||
annual_risk | dict | 否 | 区间内年度总览指标 | ||
daily_risk / weekly_risk / monthly_risk | dict | 否 | 每年日/周/月频业绩指标 | ||
alpha | float | 是 | 年度阿尔法 | ||
information_ratio | float | 是 | 年度信息比率 | ||
beta | float | 是 | 年度贝塔 | ||
correlation | float | 是 | 年度相关系数 | ||
sharpe | float | 是 | 年度夏普率 | ||
excess_sharpe | float | 是 | 年度超额夏普率 | ||
dividend_ratio | float | 是 | 年度分红率 | ||
annual_tracking_error | float | 是 | 年度年化跟踪误差 | ||
annual_downside_risk | float | 是 | 年度年化下行风险 | ||
excess_annual_return | float | 是 | 年度年化超额收益 | ||
annual_volatility | float | 是 | 年度年化波动率 | ||
arithmetic_excess_annual_return | float | 是 | 年度年化(算术)超额收益 | ||
geometric_excess_annual_return | float | 是 | 年度年化(几何)超额收益 | ||
excess_annual_volatility | float | 是 | 年度年化超额波动率 | ||
max_drawdown | float | 是 | 年度最大回撤 | ||
geometric_excess_max_drawdown | float | 是 | 年度(几何)超额最大回撤 | ||
total_returns | float | 是 | 年度总收益 | ||
total_annual_returns | float | 是 | 年度年化总收益 | ||
total_geometric_excess_return | float | 是 | 年度(几何)超额收益 | ||
total_arithmetic_excess_return | float | 是 | 年度(算术)超额收益 | ||
returns_summary | dict | 否 | 期间收益概览 | ||
total | float | 是 | 期间收益 | ||
arithmetic_excess | float | 是 | 期间(算术)超额收益 | ||
geometric_excess | float | 是 | 期间(几何)超额收益 | ||
annual | float | 是 | 期间年化收益 | ||
this_week | float | 是 | 近一周收益 | ||
this_month | float | 是 | 近一月收益 | ||
this_quarter | float | 是 | 近一季度收益 | ||
this_year | float | 是 | 近一年收益 | ||
asset_series | list[dict] | 否 | 组合指标序列 | ||
daily / weekly /monthly | dict | 否 | 组合日/周/月指标序列 | ||
date | str | 是 | 日期 | ||
daily_returns | float | 是 | 每日收益率 | ||
cumulative_returns | float | 是 | 累计收益率 | ||
benchmark_series | list[dict] | 否 | 基准收益序列 | ||
daily | dict | 否 | 基准日/周/月收益序列 | ||
date | str | 是 | 日期 | ||
daily_returns | float | 是 | 每日收益率 | ||
cumulative_returns | float | 是 | 累计收益率 | ||
weekly / monthly | dict | 否 | 基准周/月收益序列 | ||
date | str | 是 | 日期 | ||
benchmark_returns | float | 是 | 周/月度收益率 | ||
benchmark_cumulative_returns | float | 是 | 周/月度累计收益率 | ||
excess_returns | list[dict] | 否 | 超额收益序列 | ||
daily / weekly /monthly | dict | 否 | 日/周/月度超额收益序列 | ||
date | str | 是 | 日期 | ||
daily_arithmetic_excess_returns | float | 是 | 当日(算术)超额收益率 | ||
cumulative_arithmetic_excess_returns | float | 是 | 累计(算术)超额收益率 | ||
cumulative_geometric_excess_returns | float | 是 | 累计(几何)超额收益率 | ||
monthly_returns | list[dict] | 否 | 年月周度收益 | ||
date | str | 是 | 年度(2022) | ||
portfolio_returns | float | 是 | 组合收益 | ||
benchmark_returns | float | 是 | 基准收益 | ||
arithmetic_excess_returns | float | 是 | (算术)超额收益 | ||
geometric_excess_returns | float | 是 | (几何)超额收益 | ||
children | list[dict] | 是 | 月度收益数据 | ||
date | str | 是 | 月度(2022-01) | ||
portfolio_returns | float | 是 | 组合收益 | ||
benchmark_returns | float | 是 | 基准收益 | ||
arithmetic_excess_returns | float | 是 | (算术)超额收益 | ||
geometric_excess_returns | float | 是 | (几何)超额收益 | ||
children | list[dict] | 是 | 周度收益数据 | ||
children.date | str | 是 | 周度(1,表示第一周) | ||
children.portfolio_returns | float | 是 | 组合收益 | ||
children.benchmark_returns | float | 是 | 基准收益 | ||
children.arithmetic_excess_returns | float | 是 | (算术)超额收益 | ||
children.geometric_excess_returns | float | 是 | (几何)超额收益 | ||
leverage_ratio | list[dict] | 否 | 杠杆率 | ||
daily / weekly / monthly | dict | 否 | 日/周/月度杠杆率 | ||
date | str | 是 | 日期 | ||
total_asset | float | 是 | 总资产 | ||
total_equity | float | 是 | 净资产 | ||
leverage_ratio | float | 是 | 杠杆率 | ||
ashares_market_value | dict | 否 | 市值分布 | ||
sh_market_value | float | 是 | 沪市市值 | ||
sz_market_value | float | 是 | 深市市值 | ||
sh_market_value_prev | float | 是 | T-21 到 T-2 之间的沪市市值平均值 | ||
sz_market_value_prev | float | 是 | T-21 到 T-2 之间的深市市值平均值 |
# 获取产品指标(正在弃用)
rqamsc.get_product_indicators(
product_id_or_name: str,
start_date: optional_datetime_like = None,
end_date: optional_datetime_like = None,
auto_retry_valuation: bool = True, **kwargs
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
start_date | int,str,datetime,date | 否 | 开始日期,不填表示产品开始日期 |
end_date | int,str,datetime,date | 否 | 结束日期,不填则表示昨日 |
benchmark(关键字参数) | str | 否 | 基准(默认使用产品中所设置基准),所传值如 000300.XSHG 或 自定义基准 id |
extra_indicators(关键字参数) | str | 否 | 额外指标,可指定额外返回以下指标(多个指标使用英文逗号相连) 1.returns_summary: 收益概览 2. asset_series: 组合指标序列 3. benchmark_series: 基准收益序列 4. excess_returns: 主动收益序列 5. monthly_returns: 组合年月周度收益 6. leverage_ratio: 杠杆率序列 7. ashares_market_value: 市值分布 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
参考 获取产品或产品组指标
# 获取产品或产品组时序指标
rqamsc.get_indicators_series(
product_like_id_or_name: str,
start_date: optional_datetime_like = None,
end_date: optional_datetime_like = None,
indicators: Optional[List[str]] = None,
auto_retry_valuation: bool = True
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品(组)的 id 或名称 |
start_date | int,str,datetime,date | 否 | 开始日期,不填表示昨日 |
end_date | int,str,datetime,date | 否 | 结束日期,不填则表示昨日 |
indicators | List[str] | 否 | 可指定所需指标, 不传默认返回全部指标, 可选指标如下: 1. 单位净值: unit_net_value 2. 累计净值: acc_unit_net_value 3. 复权净值: adjusted_net_value 4. 总资产: total_assets 5. 净资产: total_equity 6. 当日盈亏: daily_pnl 7. 权益净敞口:equity_net_exposure 8. 现金:cash 9. 买入金额: buy_amount 10. 卖出金额: sell_amount 11. 净投入:net_cash_in 12. 申购份额:subscribe_units 13. 申购金额:subscribe_amount 14. 赎回份额:redeem_units 15. 赎回金额:redeem_amount 16. 风险总敞口: risk_exposure 17 风险净敞口: net_risk_exposure |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
指标名称 | dict | 是 | ||
日期 | str | 是 | key 为日期, value 所对应指标当日的值 |
e.g.
{
"unit_net_value": {
"2015-01-01": 1,
"2015-01-02": 1.1,
"2015-01-03": 1.3
},
"daily_pnl": {
"2015-01-01": 1000,
"2015-01-02": 1000,
"2015-01-03": 1000
}
...
}
# 获取产品时序指标(正在弃用)
rqamsc.get_product_indicators_series(
product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None,
indicators: Optional[List[str]] = None, auto_retry_valuation: bool = True
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
start_date | int,str,datetime,date | 否 | 开始日期,不填表示昨日 |
end_date | int,str,datetime,date | 否 | 结束日期,不填则表示昨日 |
indicators | List[str] | 否 | 可指定所需指标, 不传默认返回全部指标, 可选指标如下: 1. 单位净值: unit_net_value 2. 累计净值: acc_unit_net_value 3. 复权净值: adjusted_net_value 4. 总资产: total_assets 5. 净资产: total_equity 6. 当日盈亏: daily_pnl 7. 权益净敞口:equity_net_exposure 8. 现金:cash 9. 买入金额: buy_amount 10. 卖出金额: sell_amount 11. 净投入:net_cash_in 12. 申购份额:subscribe_units 13. 申购金额:subscribe_amount 14. 赎回份额:redeem_units 15. 赎回金额:redeem_amount 16. 风险总敞口: risk_exposure 17 风险净敞口: net_risk_exposure |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
参考 获取产品或产品组时序指标
# 获取产品或产品组实时信息
rqamsc.get_asset_snapshot(
product_like_id_or_name: str, fields: List[str] = None, flatten_positions=True,
auto_retry_valuation: bool = True
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品(组)id 或名称 |
fields | List[str] | 否 | 除默认字段外,可指定返回一些额外字段如: 1. risk_exposure: 风险总敞口 2. net_risk_exposure: 风险净敞口 3. excess_returns: 超额收益 |
flatten_positions | bool | 否 | 是否将持仓平铺, 默认平铺 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
date | str | 是 | 日期 | |
name | str | 是 | 产品名称 | |
unit_net_value | float | 是 | 单位净值 | |
units | float | 是 | 份额 | |
prev_unit_net_value | float | 是 | 昨日净值 | |
total_assets | float | 是 | 总资产 | |
total_equity | float | 是 | 净资产 | |
total_liabilities | float | 是 | 总负债 | |
daily_pnl | float | 是 | 当日盈亏 | |
daily_returns | float | 是 | 当日盈亏率 | |
long_market_value | float | 是 | 多头市值 | |
short_market_value | float | 是 | 空头市值 | |
capital_efficiency | float | 是 | 资金使用率(期货杠杆率) | |
returns_from_establish | float | 是 | 成立以来回报率 | |
pnl_this_year | float | 是 | 今年以来盈亏(元) | |
returns_this_year | float | 是 | 今年以来盈亏(%) | |
risk_exposure | float | 否 | 风险总暴露 | |
net_risk_exposure | float | 否 | 风险净敞口 | |
benchmark_returns | float | 否 | 基准收益率 | |
excess_returns | float | 否 | 超额收益率 | |
positions | list[dict] | 否 | 持仓明细 | |
order_book_id | str | 是 | 合约 id | |
symbol | str | 是 | 合约名称 | |
asset_class | str | 是 | 合约资产属性 | |
direction | str | 是 | 持仓方向 | |
quantity | float | 是 | 持仓数量 | |
price_change | float | 是 | 涨跌 | |
price_change_percentage | float | 是 | 涨跌幅度 | |
avg_price | float | 是 | 开仓均价 | |
avg_price_include_fee | float | 是 | 开仓均价(含费) | |
fair_value | float | 是 | 公允价格 | |
market_value | float | 是 | 市值 | |
clean_price_market_value | float | 是 | 净价市值 | |
floating_pnl | float | 是 | 浮动盈亏 | |
floating_pnl_percentage | float | 是 | 浮动盈亏率 | |
accrued_interest | float | 是 | 应记利息 | |
exchange_rate | float | 是 | 汇率 | |
currency | str | 是 | 币种 | |
bonus_share_receivable | float | 是 | 应收红股 |
# 获取产品实时信息(正在弃用)
rqamsc.get_product_asset_snapshot(product_id_or_name: str, auto_retry_valuation: bool = True) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
fields | List[str] | 否 | 除默认字段外,可指定返回一些额外字段如: 1. risk_exposure: 风险总敞口 2. net_risk_exposure: 风险净敞口 3. excess_returns: 超额收益 |
flatten_positions | bool | 否 | 是否将持仓平铺, 默认平铺 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
参考 获取产品或产品组实时信息
# 获取产品或产品组头寸序列
rqamsc.get_balance_series(
product_like_id_or_name: str, start_date: optional_datetime_like, end_date: optional_datetime_like = None,
fields: Optional[List[str]] = None, auto_retry_valuation: bool = True
) -> List[Dict]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品 id 或产品名称 |
start_date | int,str,datetime,date | 是 | 开始日期 |
end_date | int,str,datetime,date | 否 | 结束日期,不填则表示今日 |
fields | List[str] | 否 | 除必须字段可选择返回的持仓字段,不填则仅返回必须的持仓字段,字段值可参考下述返回的持仓字段 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
- 返回
List 中字典结构如下
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
date | str | 是 | 日期 | |
total_assets | float | 是 | 总资产 | |
total_equity | float | 是 | 净资产 | |
daily_pnl | float | 是 | 当日盈亏 | |
daily_returns | float | 是 | 当日盈亏率 | |
positions | list[dict] | 否 | 持仓明细 | |
order_book_id | str | 是 | 合约 id | |
symbol | str | 是 | 合约名称 | |
asset_class | str | 是 | 合约资产属性 | |
direction | str | 是 | 持仓方向 | |
quantity | float | 是 | 持仓数量 | |
market_value | float | 是 | 市值 | |
price_change | float | 否 | 涨跌 | |
price_change_percentage | float | 否 | 涨跌幅度 | |
avg_price | float | 否 | 开仓均价 | |
avg_price_include_fee | float | 否 | 开仓均价(含费) | |
fair_value | float | 否 | 公允价格 | |
clean_price_market_value | float | 否 | 净价市值 | |
daily_pnl | float | 否 | 当日盈亏 | |
daily_pnl_rate | float | 否 | 当日盈亏率 | |
floating_pnl | float | 否 | 浮动盈亏 | |
floating_pnl_percentage | float | 否 | 浮动盈亏率 | |
accrued_interest | float | 否 | 应记利息 | |
bonus_share_receivable | float | 否 | 应收红股 | |
acc_dividend_received | float | 否 | 累计股息收入 | |
acc_interest_received | float | 否 | 累计利息收入 |
# 自定义基准管理
# 查看自定义基准列表
rqamsc.list_customized_benchmarks() -> List[CustomizedBenchmark]
[CustomizedBenchmark(name=固定数值基准, type=fixed_rates, workspace_id=60e8048fb79f4103f403940e, user_id=347418, remarks=, id=61274ea78c06c70572c0e1f0, weights=[], rates=0.8),
CustomizedBenchmark(name=多时段自定义权重基准, type=composite, workspace_id=60e8048fb79f4103f403940e, user_id=347418, remarks=None, id=6214506b7abdc4b73a34df73, weights=[{'start_date': datetime.date(2022, 2, 1), 'weights': [{'order_book_id': '000003.XSHE', 'weight': 1}]}], rates=0)
- 返回
List[CustomizedBenchmark]
# 创建一个自定义基准
所传参数可参考 CustomizedBenchmark
rqamsc.create_customized_benchmark(customized_benchmark: Union[Dict, CustomizedBenchmark]) -> CustomizedBenchmark
- 返回
# 获取某个自定义基准信息
rqamsc.get_customized_benchmark(customized_benchmark_id: str) -> CustomizedBenchmark
- 返回
# 更新某个自定义基准信息
rqamsc.update_customized_benchmark(
customized_benchmark_id: str, customized_benchmark: Union[Dict, CustomizedBenchmark]
) -> Tuple[Dict, CustomizedBenchmark]
customized_benchmark参数可参考创建自定义基准的示例,修改权重成分时以start_date作为搜索条件修改成分数据,若该start_date没有搜索到数据则添加该成分到基准中
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
modified | boolean | 是 | 是否更新成功 |
CustomizedBenchmark | 是 | 修改后的基准对象 |
# 自定义合约管理
# 查看自定义合约列表
rqamsc.list_customized_instruments() -> List[CustomInstruments]
- 返回
# 新增自定义合约
rqamsc.add_customized_instrument(customized_instrument: Union[CustomInstruments, Dict]) -> Dict
- 参数
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
customized_ins_id | str | 是 | 新增自定义合约的 id |
# 获取某个自定义合约价格
rqamsc.get_customized_instrument_price(customized_ins_id: str) -> List[Dict]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
customized_ins_id | str | 是 | 自定义合约的 id |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
customized_ins_id | str | 是 | 自定义合约的 id |
date | str | 是 | 日期 |
value | int | 是 | 价格 |
# 上传更新某个自定义合约价格
rqamsc.upload_customized_instrument_price(customized_ins_id: str, file_path: str) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
customized_ins_id | str | 是 | 自定义合约的 id |
file_path | str | 是 | 需要上传的价格文件路径 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 成功导入的价格数量 |
# 托管事件管理
# 获取某个产品的托管事件列表
rqamsc.list_custodian_events(
product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None,
) -> List[CustodianEvent]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品名称或 id |
start_date | str | 否 | 只获取该日期之后的托管事件,若该字段为空则不做范围限制 |
end_date | str | 否 | 只获取该日期之前的托管事件,若该字段为空则不做范围限制 |
- 返回
List[CustodianEvent]
# 给某个产品增加托管事件
rqamsc.insert_custodian_events(
product_id_or_name: str, custodian_event_or_list: Union[Dict, CustodianEvent, List[Dict], List[CustodianEvent]]
) -> Dict
custodian_event_or_list参数示例:
custodian_event_or_list = [
{'custodian_event_type': 'subscription_fund_received', 'date': '2022-04-12', 'amount': 412},
CustodianEvent(
custodian_event_type='product_cost_paid',
product_cost_type='management_fee',
date='2022-05-06',
amount=101,
),
CustodianEvent(
custodian_event_type='subject_adjusted',
adjust_operation='increase',
adjust_target='current_deposit', # 活期存款
date='2022-05-06',
amount=101,
),
]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品名称或 id |
custodian_event_or_list | Union[Dict, CustodianEvent, List[Dict], List[CustodianEvent] | 是 | 托管事件(对象/字典) 或 托管事件(对象/字典) 组成的列表 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
inserted_count | int | 是 | 成功导入的托管事件数量 |
# 修改产品下的一个托管事件
rqamsc.update_custodian_event(
product_id_or_name: str, custodian_event: Union[Dict, CustodianEvent]
) -> Dict
关于 custodian*event 参数数据的构建可以参考 *增加托管事件 api_ 中构建示例
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品名称或 id |
custodian_event | Union[Dict, CustodianEvent] | 是 | 托管事件(对象/字典), 尽量包含该托管事件所需的全部字段信息(id 等) |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 是否修改成功(1 表示成功 0 表示失败) |
# 删除产品的一些托管事件
rqamsc.delete_custodian_events(
product_id_or_name: str, event_id_or_list: Union[ObjectId, str, List[ObjectId], List[str]]
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品名称或 id |
event_id_or_list | Union[ObjectId, str, List[ObjectId], List[str]] | 是 | 托管事件 id(字符/ObjectId)或托管事件 id 组成的列表 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 成功删除的托管事件数量 |
# API 对象及属性值
# 工作空间对象
字段 | 类型 | 说明 |
---|---|---|
id | str | 工作空间 id |
name | str | 工作空间名称 |
admin | str | 工作空间管理员 id |
capacity | str | 工作空间人数上限 |
ctime | str | 工作空间创建时间 |
description | str | 工作空间描述 |
users | str or list | 工作空间的成员列表 |
# 产品对象
import datetime
from rqamsc import Product
from bson import ObjectId
product_doc = {
"_id" : ObjectId("6177c9ea528f3ac1ce662abb"),
"name" : "300估值因子增强_347418",
"data_source" : "trade_and_valuation_report",
"start_date" : datetime.datetime(2019, 1, 3),
"valuation_start_point" : None,
"investment_category" : "equity",
"strategy_category" : "index_enhanced",
"realtime_period_type" : "daytime",
"benchmark" : {
"type" : "index",
"id" : "000300.XSHG"
},
"calendar" : "exchange",
"accounts" : [
{
"name" : "300估值因子增强_托管账户",
"is_custodian" : True,
"account_number" : "3eb0b699-7ca8-481a-883a-25ff81ea8ad0",
"broker" : "ricequant"
},
{
"name" : "300估值因子增强_交易账户",
"is_custodian" : False,
"account_number" : "8e6827c0-3bdf-4c17-b7fb-e643af1cb6da",
"broker" : "ricequant"
}
],
"fee_settings" : {},
"user_id" : 12345,
"workspace_id" : ObjectId("5f19620f7e8e904a613f5482"),
"auto_equity" : True,
"unit_policy" : "auto_prev_unit_net_value",
"full_name" : "300估值因子增强_347418_全名",
"create_time" : datetime.datetime(2021, 10, 26),
"case_number" : "",
"manager" : "",
"invest_advisor" : "",
"invest_manager" : "",
"maturity_date" : datetime.datetime(2999, 12, 31),
"paper_trading" : True,
"valuation_settings" : {
"etf" : "iopv"
}
}
# 使用 from_doc 方法将dict数据转化为产品对象
product = Product.from_doc(product_doc)
# 即可调用对象属性
product_id = product.id # ObjectId("6177c9ea528f3ac1ce662abb") note: _id被转换为id
product_start_date = product.start_date # datetime.datetime(2019, 1, 3)
# 产品对象也可以使用 to_dict 方法转化为字典
product.to_dict() # 输出结果即与product_doc一致 note: 对象中的id字段在字典中key仍为id
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
id | str | 是 | 产品 id(不可修改) | |
user_id | str | 是 | 创建者 id(不可修改) | |
workspace_id | str | 是 | 所属 workspace id(不可修改) | |
name | str | 是 | 产品名称 | |
full_name | str | 是 | 产品全名 | |
start_date | datetime,date | 是 | 产品开始日期 | |
data_source | str | 是 | 产品数据来源(不可修改): 1. 交易流水及估值表类型产品(trade_and_valuation_report) 2. 交易流水型产品(trade) 3. 估值表类型产品(valuation_report) | |
benchmark | dict | 是 | 产品基准 | |
type | str | 是 | 基准类型: 1. index(目前仅支持沪深 300、中证 500 以及中证 1000) 2. customized_index 为自定义基准 | |
id | str | 是 | index 的基准代码 或 自定义基准的 id | |
calendar | str | 是 | 产品日历: 1. 交易所日历(exchange) 2. 银行间交易日历(interbank) 3. 自然日(natural) | |
auto_equity | bool | 是 | 是否自动权益 | |
unit_policy | str | 是 | 份额管理方式: 1. 自动份额管理(auto_prev_unit_net_value) 2. 手动份额管理(manual) | |
valuation_settings | dict | 是 | 设置资产估值方式 | |
etf | str | 是 | ETF 资产估值方式: 当日净值(iopv) 、 当日收盘价(close) | |
accounts | dict | 是 | 账户信息 | |
account_number | str | 是 | 资金账号 | |
name | str | 是 | 账户名称 | |
broker | str | 是 | 账户通道 | |
is_custodian | bool | 是 | 是否是托管账户 | |
fee_settings | dict | 否 | 费用信息 | |
management_fee | float | 是 | 管理费 | |
custodian_fee | float | 是 | 托管费 | |
sales_and_service_fee | float | 是 | 销售服务费 | |
operation_fee | float | 是 | 运营费 | |
performance_pay | float | 是 | 业绩报酬 | |
realtime_period_type | str | 是 | 实时估值类型: 1. daytime: 仅白天 09:30 - 15:00 2. natural: 自然日 09:00 - 02:30 (+1) 3. valuation_day: 估值表日 21:00 - 15:00 (+1) | |
create_time | str | 是 | 创建时间 | |
paper_trading | bool | 是 | False: 实盘交易 True: 模拟交易 | |
description | str | 否 | 产品描述 | |
investment_category | str | 否 | 投资类型 | |
strategy_category | str | 否 | 策略类型: 1. index_enhanced: 指数增强 2. equity_market_neutral: 市场中性 3. stock_long: 股票多头 4. commodity_trading_advisor: CTA 5. mixed: 混合策略 6. long_short_stock: 股票多空 7. unconventionality: 其他 | |
case_number | str | 否 | 备案号 | |
manager | str | 否 | 管理人 | |
invest_advisor | str | 否 | 投资顾问 | |
invest_manager | str | 否 | 投资经理 | |
maturity_date | str | 否 | 产品到日期 | |
closing_date | str | 否 | 封账日 |
# 产品组对象
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
id | str | 是 | 产品组 id(不可修改) | |
name | str | 是 | 产品组名称 | |
products | List[dict] | 是 | 各个产品成分: 1. id: 产品 id 2. name: 产品名称 | |
product_weights | dict | 否 | 各个产品成分权重(key 为产品 id, value 为权重值) 1. 若该字段存在时,产品组为权重产品组 2. 若不存在该字段,产品组为聚合产品组 | |
benchmark | dict | 是 | 产品组基准 | |
type | str | 是 | 基准类型: 1. index(目前仅支持沪深 300、中证 500 以及中证 1000) 2. customized_index 为自定义基准 | |
id | str | 是 | index 的基准代码 或 自定义基准的 id | |
paper_trading | bool | 是 | False: 实盘交易 True: 模拟交易 | |
accessible_err_msg | List[str] | 否 | 若产品组状态异常将在该字段中展示 | |
create_time | str | 是 | 创建时间 | |
description | str | 否 | 产品描述 |
# 交易流水来源 source
流水来源取值 | 流水来源描述 |
---|---|
manual | 手工录入 |
settlement_upload | 日终结算流水文件导入 1. 上传流水时会删除同账号相同日期下已有的 日终结算流水、日内流水及 open_api 流水,并采用最新上传的流水覆盖 |
intraday_upload | 日内流水文件导入 1. 上传流水时会删除同账号相同日期下已有的 日内流水及 open_api 流水,并采用最新上传的流水覆盖 2. 如果同账号相同日期下已有日终结算流水则不能上传日内流水 |
open_api | rqamsc 导入流水 1. 每次上传流水都视为新增,若流水附带 foreign_id 字段则对相同 foreign_id 的流水覆盖 2. 如果同账号相同日期下已有日终结算流水则不能上传 openapi 流水 3. 流水列表可以传入历史的流水, 但该历史流水导入行为依旧符合上述 1 和 2 两条规则 4. 若流水列表中都为当日流水,则认为符合更加快速的增量估值计算标准,即计算服务会从最新的估值截面应用该批流水,应避免使用该 api 上传已导入的当日流水 |
auto_balance | 自动权益下自动生成的流水 |
# 交易属性 trading_asset_class
交易属性取值 | 交易属性描述 | 该交易属性代码可能的米筐标准后缀 |
---|---|---|
stock | 股票 | ['.XSHG'(上交所), '.XSHE'(深交所), '.XHKG'(港股通)] |
futures | 期货 | |
bond | 债券 | ['.SH'(上交所), '.SZ'(深交所), '.IB'(银行间)] |
option | 期权 | |
convertible | 可转债 | ['.XSHG'(上交所), '.XSHE'(深交所)] |
repo | 回购 | ['.XSHG'(上交所), '.XSHE'(深交所)] |
fund | 基金 | ['.XSHG'(上交所), '.XSHE'(深交所)] |
total_return_swap | 收益互换 | |
interest_return_swap | 利率互换 | |
cash | 现金 | order_book_id 为'CNY' |
# 资产属性 asset_class
资产类型取值 | 资产类型描述 |
---|---|
stock | 股票 |
convertible_bond | 可转债 |
bond | 债券 |
repo | 正回购 |
repo_accrued_interest | 回购应计利息 |
reverse_repo | 逆回购 |
reverse_repo_accrued_interest | 逆回购应计利息 |
closed_end_fund | 封闭式基金 |
open_end_fund | 开放式基金 |
etf_fund | OTF 基金 |
lof_fund | LOF 基金 |
money_market_fund | 货币基金 |
other_fund | 其他基金 |
commodity_futures | 商品期货 |
commodity_option | 商品期权 |
stock_index_futures | 股指期货 |
stock_index_option | 股指期权 |
interest_rate_futures | 利率期货 |
otc_futures | 场外期货 |
otc_option | 场外期权 |
total_return_swap | 收益互换 |
interest_return_swap | 利率互换 |
other_derivatives | 其他衍生品 |
current_deposit | 活期存款 |
# 交易类型 transaction_type
交易类型取值 | 交易类型描述 |
---|---|
buy | 买入 |
sell | 卖出 |
buy_open | 多头开仓 |
sell_close | 多头平仓 |
sell_open | 空头开仓 |
buy_close | 空头平仓 |
subscribe | 申购 |
redeem | 赎回 |
transfer_in | 划入 |
transfer_out | 划出 |
custodian_transfer_in | 托管划入 |
custodian_transfer_out | 托管划出 |
etf_subscription_transfer_in | ETF 申购划入 |
etf_redeem_transfer_out | ETF 赎回划出 |
etf_subscription_transfer_out | ETF 申购划出 |
etf_redeem_transfer_in | ETF 赎回划入 |
etf_cash_replacement_transfer_in | ETF 现金替代划入 |
etf_cash_replacement_transfer_out | ETF 现金替代划出 |
etf_cash_difference_transfer_in | ETF 现金差额划入 |
etf_cash_difference_transfer_out | ETF 现金差额划出 |
withdraw | 活期存款取出 |
deposit | 活期存款存入 |
loan | 活期存款借入 |
loan_repayment | 活期存款借款归还 |
cash_in | 入金 |
cash_out | 出金 |
interest_income | 利息收入 |
interest_payment | 利息支出 |
interest_tax_payment | 利息税支出 |
covered_sell_open | 备兑空头开仓 |
covered_buy_close | 备兑空头平仓 |
holder_match | 融资费用归还 |
seller_match | 多头对冲轧平 |
ipo_subscribed | 新股申购 |
shares_allotted | 新股中签 |
subscription_fund_unfrozen | 申购款解冻 |
shares_listed | 上市流通 |
buy_on_margin | 融资买入 |
short_sell | 融券卖出 |
sell_to_repay | 卖券还款 |
buy_to_return | 买券还券 |
return_securities | 直接还券 |
refund_securities | 多还退券 |
dividend_payment | 红利入账 |
dividend_reinvestment | 红利再投资 |
dividend_tax_payment | 红利税支付 |
bonus_share | 红股 |
pre_dividend_payment | 分红预处理 |
pre_bonus_share | 送股预处理 |
dividend_on_borrowed | 借券红利 |
bonus_share_on_borrowed | 借券红股 |
convertible_sell_back | 可转债回售 |
convertible_redemption | 可转债赎回 |
cb_to_stock | 转债转股 |
reverse_repo | 逆回购 |
repo | 正回购 |
reverse_repo_repurchase | 逆回购购回 |
repo_repurchase | 正回购购回 |
long_deliver | 期货多头交割 |
short_deliver | 期货空头交割 |
holder_exercise | 期权多头行权 |
seller_exercise | 期权空头行权 |
holder_expire | 期权多头到期 |
seller_expire | 期权空头到期 |
coupon_payment | 债券付息 |
principal_payment | 债券偿付本金 |
bond_expire | 债券到期 |
# 自定义基准对象
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
name | str | 是 | 自定义基准名称 |
type | str | 是 | 自定义基准类型, composite(复合指数),fixed_rates(收益率指数) |
weights | List[CustomizedBenchmarkWeights] | 否 | composite(复合指数) 时必须有此字段 |
rates | float | 否 | fixed_rates(收益率指数) 时必须有此字段 |
id | str | 是 | 自定义基准 id, 在创建修改时构建该对象不需要此字段 |
user_id | str | 是 | 创建者 id, 在创建修改时构建该对象不需要此字段 |
workspace_id | str | 是 | 所属 workspace id, 在创建修改时构建该对象不需要此字段 |
remark | str | 否 | 备注信息 |
# 自定义合约对象
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
asset_class | str | 是 | 资产类型, 可为如下类型: 1. 股票(stock) 2. 期货(otc_futures) 3. 期权(otc_option) 4. 基金(other_fund) 5. 收益互换(total_return_swap) 6. 债券(bond) |
order_book_id | str | 是 | OTC 合约代码 |
symbol | str | 是 | 合约名称 |
id | str | 否 | 自定义合约 id |
# 自定义基准对象可调用方法 from_doc & to_dict 示例如下
import datetime
from rqamsc import CustomizedBenchmark
customized_benchmark_doc = {
"name": "多时段自定义权重基准",
"type": "composite",
"weights": [
{
"start_date": "2015-01-01",
"weights": [
{
"order_book_id": "000001.XSHE",
"weight": 0.5
},
{
"order_book_id": "000002.XSHE",
"weight": 0.5
}
]
}
]
}
# 使用 from_doc 可将dict数据转换为相应对象
customized_benchmark = CustomizedBenchmark.from_doc(customized_benchmark_doc) # 该函数执行结果(customized_benchmark)如下
# 输出 customized_benchmark 对象如下
CustomizedBenchmark(
name='多时段自定义权重基准',
type='composite',
weights=[
{
'start_date': datetime.date(2015, 1, 1),
'weights': [
{'order_book_id': '000001.XSHE', 'weight': 0.5},
{'order_book_id': '000002.XSHE', 'weight': 0.5}
]
}
]
)
# customized_benchmark 对象也可以通过 to_dict 方法转化为字典
customized_benchmark.to_dict() # 输出结果即和 customized_benchmark_doc 一致
# 自定义基准成分权重对象
同样可以使用 to_dict & from_doc 方法,使用方式见 自定义基准对象
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
start_date | str | 是 | 权重开始生效时间 | |
customized_benchmark_id | str | 是 | 自定义基准 id, 在创建修改时构建该对象不需要此字段 | |
weights | List[Dict] | 是 | 自定义基准类型, composite(复合指数),fixed_rates(收益率指数) | |
order_book_id | str | 是 | 权重成分中资产代码 | |
weight | float | 是 | 权重成分中资产的权重(权重之和要等于 1) |
# 托管事件对象
同样可以使用 to_dict & from_doc 方法,使用方式可参考 自定义基准对象
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
custodian_event_type | str | 是 | 业务类型,字段枚举: 1. 申购款入账(subscription_fund_received) 2. 赎回款出账(redemption_paid) 3. 产品分红(product_dividend_paid) 4. 产品费用实付(product_cost_paid) 5. 科目调整(subject_adjusted) |
date | str | 是 | 托管事件发生日期 |
amount | float | 是 | 托管事件发生金额 |
product_cost_type | str | 否 | 产品费用类型,只有在业务类型为"产品费用实付"时为必填,字段枚举: 1. 管理费(management_fee) 2. 托管费(custodian_fee) 3. 业绩报酬(performance_pay) 4. 运营费(operation_fee) 5. 销售服务费(sales_and_service_fee) |
adjust_target | str | 否 | 科目调整项,只有在业务类型为"科目调整"时为必填,字段枚举: 1.活期存款(current_deposit) 2. 结算备付金(reservation_deposit) 3. 存出保证金(refundable_deposit) 4. 证券清算款(securities_settlement_accounts) 5. 期货清算款(futures_settlement_accounts) 6. 其他应收利息(other_interest_receivable) 7. 应收申购款(subscription_receivable) 8. 其他应收款(other_receivable) 9. 现金类负债(cash_debt) 10. 其他应付利息(other_interest_payable) 11. 计提管理费(management_fee_payable) 12. 计提托管费(custodian_fee_payable) 13. 计提运营费(operation_fee_payable) 14. 计提销售服务费(sales_and_service_fee_payable) 15. 计提业绩报酬(performance_pay_payable) 16. 应付税(tax_payable) 17. 其他应付款(other_payable) 18. 其他类型(other_asset) 19. 其他负债(other_liability) |
adjust_operation | str | 否 | 科目调整方向,只有在业务类型为"科目调整"时为必填,字段枚举: 1. 调增(increase) 2. 调减(decrease) 3. 调整到(adjust_to) |
id | str | 否 | 托管事件的 id |
product_id | str | 否 | 托管事件所属产品 id |
# 通用异常对象(exception, 可用于捕获处理对应异常)
名称 | 说明 |
---|---|
ValuationNotReady | 表示产品的估值计算还没有完成(所以无法返回相应指标),通常在指定了 auto_retry_valuation=False 后才会出现该异常 |
IllegalInput | 表示 API 输入有误 |
UnauthorizedException | 表示鉴权失败 |
ForbiddenException | 表示无权执行该操作 |
e.g.
例 1. 对 ValuationNotReady 异常进行捕获并轮询获取产品持仓信息
import time
import rqamsc
from rqamsc.exception import ValuationNotReady
while True:
try:
# 产品未完成估值计算且指明,调用持仓数据时会抛出 ValuationNotReady 异常
balance_res = rqamsc.get_balance('未计算完成的产品', auto_retry_valuation=False)
break
except ValuationNotReady:
# 正常情况下我们只需轮询等待产品估值状态完成即可拿到持仓数据
time.sleep(0.5)
print(balance_res)
例 2. 需要抛错并在报错后进行相关的自定义处理
import datetime
import rqamsc
from rqamsc.exception import ValuationNotReady
try:
# 产品未完成估值计算且指明,调用持仓数据时会抛出 ValuationNotReady 异常
today_balance = rqamsc.get_balance('未计算完成的产品', auto_retry_valuation=False)
except ValuationNotReady:
# 记录一下在什么时间当天还未计算出估值头寸
print(f'{datetime.datetime.now()} 还未计算出头寸')
# 线程安全和在子进程中使用 rqamsc
rqamsc 是线程安全的,在当前进程的任何线程中调用 rqamsc 的 api 都是安全的。
在子进程中的 rqamsc:假设您正在当前进程中使用 rqamsc,接着 fork 创建了一个子进程,那么父子进程的 rqamsc 是互相隔离的。如何理解互相隔离呢:例如您在父进程中切换工作空间,该操作不会影响到子进程 rqamsc 所处的工作空间。可以简单认为子进程里的 rqamsc 是一个全新的 rqamsc,和父进程里的完全没关系。
# 私有 rqams 平台
默认情况下您访问的是米筐官方 RQAMS 平台,若您申请了一套私有 RQAMS 平台,也是可以使用 rqamsc 访问的, 这只需要在 uri 参数中指定私有 RQAMS 平台的地址。 (如有私有化部署需求,可以通过米筐官方网站联系我们。)
rqamsc.init(username='demo@example.com', password='****', uri='your_ams_site.your_ams_domain.com'):