# RQAMSC 使用教程文档
# rqamsc 介绍
RQAMS (opens new window) 是由米筐科技开发的,集多资产管理、实时监控、绩效分析、风险分析等多种功能于一体的智能投资组合管理平台。
rqamsc 为管理 RQAMS 平台上的资源(交割单、组合、产品等)提供了 Python 接口,大幅提升了 RQAMS 的自动化程度,打通了量化交易和资管系统。
如果您不满足仅仅能管理 RQAMS 平台的话,您可以申请 RQAMS 的私有化部署,通过 rqamsc 管理您的私有 RQAMS。
# 安装
支持 Python 3.7, 3.8, 3.9, 3.10, 3.11
首先在系统中打开一个命令行, 选择好需要安装的 Python 环境,再运行以下安装命令
pip install --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/ rqamsc
或者
pip install -i https://rquser:ricequant99@py.ricequant.com/simple/ rqamsc
第一次安装成功后,命令行应该有类似如下的输出(显示已成功安装的包中有 rqamsc)
Successfully installed brotli-1.1.0 certifi-2024.7.4 charset-normalizer-3.3.2 colorama-0.4.6 et-xmlfile-1.1.0 idna-3.7 msgpack-1.0.8
numpy-1.24.4 openpyxl-3.1.5 orjson-3.10.6 pandas-2.0.3 python-dateutil-2.9.0.post0 python-rapidjson-1.18 pytz-2024.1 pyyaml-6.0.1 r
equests-2.32.3 rqamsc-0.4.1 rqdatac-3.0.12.2+12.ga61fb64d rqdatac-fund-1.0.35 six-1.16.0 tqdm-4.66.4 tzdata-2024.1 urllib3-2.2.2 win-inet-pton-1.1.0 xlrd-1.2.0
# 升级
升级包版本可使用 --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/
对应版本成功升级后的输出结果如下
Installing collected packages: rqamsc
Attempting uninstall: rqamsc
Found existing installation: rqamsc 0.4.0
Uninstalling rqamsc-0.4.0:
Successfully uninstalled rqamsc-0.4.0
Successfully installed rqamsc-0.4.1
# 快速开始
# 导包
在成功安装 rqamsc 包后就可以在程序中使用 rqamsc,首先 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)]
# 获取产品某天的头寸
在登录成功后,可调用 rqamsc.get_balance 获取产品头寸信息,如下示例
import rqamsc
def demo():
rqamsc.init(username, password, uri="https://www.ricequant.com", ssl_verify=True)
rqamsc.choose_workspace('需要指定的工作空间')
balance = rqamsc.get_balance('一个范例产品', dt=20240802)
print(balance)
if __name__ == '__main__':
demo()
以上示例输出结果如下
{
'date': '2024-08-02',
'total_equity': 1000089.8,
'daily_pnl': 0,
'daily_returns': 0.0,
'units': 1000000.0,
'unit_net_value': 1.0000898,
'acc_unit_net_value': 1.0000898,
'adjusted_net_value': 1,
'acc_unit_dividend': 0,
'positions': [
...
}
# 进阶教程
# 导入 open_api 来源交易流水
交易流水是 AMS 中产品估值计算的重要数据来源,可使用 rqamsc.insert_product_trades 来导入open_api 来源的交易流水,如下示例
import datetime
import rqamsc
def demo():
rqamsc.init(username, password, uri="https://www.ricequant.com", ssl_verify=True)
rqamsc.choose_workspace('需要指定的工作空间')
trades = [
# 第一条流水
{
'transaction_type': 'buy', # 交易类型,字段值可在文档【交易类型】中参考
'account': '范例产品交易账号中文名', # 交易账户名称,不提供则默认第一个产品账户
'datetime': datetime.datetime(2024, 5, 7, 10, 4, 25),
'order_book_id': '000001.XSHE',
'symbol': '平安银行',
'quantity': 1, # 分红、付息等现金类交易则不需要提供
'price': 10, # 分红、付息等现金类交易则不需要提供
'settlement_amount': 0, # 买卖等类型可以不提供该字段,但分红、付息、出入金等(可参考文档【给产品导入交易流水】中介绍)必须设置改字段作为交易金额
'commission': 0.1, # 交易佣金, 不提供默认为0
'tax': 0, # 交易税, 不提供默认为0
'other_fees': 0, # 其他费用, 不提供默认为0
'exchange_rate': 1, # 汇率, 不提供默认为1
'remarks': '这是当天第一笔交易', # 备注, 可不提供
'foreign_id': '可指定一个在交易系统范围内唯一的id', # 外部id, 可不提供, 具体功能可参考文档【交易流水来源】中介绍
'asset_unit_id': None # 资产单元id, 如果是资产单元下的流水需要指定该字段,不指定则默认该流水是产品层流水
},
# 第二条流水
{
'transaction_type': 'sell', # 交易类型
'datetime': datetime.datetime(2024, 5, 7, 11, 4, 25),
'order_book_id': '000001.XSHE',
'symbol': '平安银行',
'quantity': 1,
'price': 100,
'commission': 0.1
},
# 第三条流水
{
'transaction_type': 'cash_in', # 入金
'datetime': datetime.datetime(2024, 5, 7, 14, 4, 25),
'order_book_id': 'CNY',
'symbol': 'CNY',
'settlement_amount': 1000000, # 入金的金额
'foreign_id': '123321954783203'
}
# 第四条流水
{
'transaction_type': 'dividend_payment', # 现金分红
'account': '一个不存在的账号',
'datetime': datetime.datetime(2024, 5, 7, 8, 0, 0),
'order_book_id': '000001.XSHE',
'symbol': '平安银行',
'settlement_amount': 1, # 分红的金额
}
# ... 可增加更多流水
]
# 调用导入流水api,使用result变量接收返回结果并打印输出,可使用chunk_size参数指定每批上传的流水数量,默认1000
result = rqamsc.insert_product_trades('一个范例产品', trades, chunk_size=500)
print(result)
if __name__ == '__main__':
demo()
以上示例运行结果如下
[{
'chunk_start': 0, # 本批次流水起始下标
'result': [ # 本批次流水的导入结果
# 第一条流水导入结果: modify表示覆盖了相同foreign_id的流水
{'id': '66aca9b916822a16d8143b58', 'action': 'modify'},
# 第二条流水导入结果: insert表示增加成功
{'id': '66acae1c6d4a6ec991079160', 'action': 'insert'},
{'id': '66acae1c6d4a6ec991079161', 'action': 'insert'},
# 第四条流水导入失败
{'err': '该产品中没有该交易账户名: 一个不存在的账号'}
# ... 该结果列表和上传流水的顺序一致,即 chunk_start + 列表下标 = 该流水在上传数据序列中的位置
]
}]
# 线程安全和在子进程中使用 rqamsc
rqamsc 是线程安全的,在当前进程的任何线程中调用 rqamsc 的 api 都是安全的。
在子进程中的 rqamsc:假设您正在当前进程中使用 rqamsc,接着 fork 创建了一个子进程,那么父子进程的 rqamsc 是互相隔离的。如何理解互相隔离呢:例如您在父进程中切换工作空间,该操作不会影响到子进程 rqamsc 所处的工作空间。可以简单认为子进程里的 rqamsc 是一个全新的 rqamsc,和父进程里的完全没关系。
# 私有 rqams 平台
默认情况下您访问的是米筐官方 RQAMS 平台,若您申请了一套私有 RQAMS 平台,也是可以使用 rqamsc 访问的, 这只需要在 uri 参数中指定私有 RQAMS 平台的地址。 (如有私有化部署需求,可以通过米筐官方网站联系我们。)
import rqamsc
rqamsc.init(username='demo@example.com', password='****', uri='your_ams_site.your_ams_domain.com')
# 迭代记录
rqamsc 版本 | 发布日期 | 新增 | 改善 | 不兼容改动 |
---|---|---|---|---|
0.4.2 | 2024-08-12 | 1. 绩效归因 支持风险因子v2 2. 持仓单导入 支持 BytesIO 对象元 | ||
0.4.1 | 2024-06-26 | 1. 增加估值表文件下载接口 | 1. 估值表自动导入服务 优化,支持全量增量更新 2. 单产品导入估值表 支持 BytesIO 对象, 返回结果简化 3. 获取产品列表 支持返回产品下资产单元 | |
0.4.0 | 2024-05-13 | 1. 增加份额管理相关接口 2. 产品增加估值汇率设置属性 | 周度净值报告接口支持产品组 | 1. 产品及产品组增加交易起始日属性 2. 产品估值设置字段类型变更,详见产品对象 3. 删除托管事件接口返回值调整(此前版本使用该接口可以正常删除但返回结果时会出错) |
0.3.16 | 2024-03-20 | 1. 修复导入自定义合约价格文件时可能导致的报错 2. 修复自定义合约类(CustomInstruments)未返回 id 属性 | ||
0.3.14 | 2024-03-13 | 兼容一些异步接口因估值计算未完成提前终止的情况 | 调整持仓单导入接口参数 file_path -> file_path_or_bytes, 同时支持更丰富的参数类型 | |
0.3.13 | 2024-01-11 | 1. 新增持仓单相关操作接口 2. 流水接口支持对资产单元的相关操作 |
# RQAMSC API 手册
# 打开网页版 RQAMS
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 支持在不同的工作空间中切换使用。 (更多关于工作空间的介绍请前往米筐官方网站 (opens new window))
# 获取所有工作空间信息
获取所有您拥有的或者参与的工作空间。
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 |
asset_unit_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]],
asset_unit_id: Optional[Union[str, ObjectId]] = None
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 需要导入流水的产品 id 或产品名称 |
account_name | str | 是 | 需要导入流水的交易账号名称 |
file_or_dir_path | str or List[str] | 是 | 需要导入流水的文件或文件夹目录 |
asset_unit_id | str or ObjectId | 否 | 需要导入的资产单元 id |
- 返回:返回一个 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,
asset_unit_id_or_list: Optional[str, ObjectId, List[str, ObjectId]] = None,
key_words: Union[str, Iterable] = None, group_by: str = None, remarks: str = None,
is_query_assistant: bool = False
) -> 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_unit_id_or_list | str,ObjectId,Iterable | 否 | 资产单元 id(可传字符串或字符串列表等), 指定后查询资产单元下的流水 |
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 | 是 | 交易账户名称 |
asset_unit_id | str | 是 | 资产单元 id |
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.upload_positions_statement_file(
product_id_or_name: str, asset_unit_id: Union[str, ObjectId],
file_path_or_bytes: Union[str, bytes, BufferedReader, BytesIO],
broker: str = 'ricequant'
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 需要导入流水的产品 id 或产品名称 |
asset_unit_id | str or ObjectId | 是 | 需要导入的资产单元 id |
file_path_or_bytes | str or bytes or BufferedReader | 是 | 需要导入流水的文件地址 或 字节码 或 文件句柄 |
broker | str | 否 | 需要导入的持仓单模板类型,目前支持模板如下(默认为 RQ 通道): 1. RQ 通道: ricequant 2. 中信 DMA: citic_dma 3. 中金 DMA: cicc_dma |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
confirmation_id | str | 是 | 凭证 id |
date | str | 是 | 持仓单日期 |
effect_count | int | 是 | 该条持仓单导入情况 0 表示未导入, 1 表示已导入 |
err_msg | list | 是 | 持仓单中具体每条持仓导入失败情况 |
# 获取持仓单
rqamsc.get_positions_statement(
product_id_or_name: str, asset_unit_id: str, start_date: datetime_like, end_date: datetime_like
) -> List[Dict]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
asset_unit_id | str | 是 | 资产单元 id |
start_date | int,str,datetime,date | 是 | 开始日期 |
end_date | int,str,datetime,date | 是 | 结束日期 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
positions_statement_id | str | 是 | 持仓单 id |
date | str | 是 | 持仓单日期 |
file_name | str | 是 | 持仓单文件名 |
positions | List[Dict] | 是 | 持仓详情 |
asset_class | str | 是 | 资产类型 |
direction | str | 是 | 持仓方向: 1. 多头: long 2. 空头: short |
order_book_id | str | 是 | 资产代码 |
symbol | str | 是 | 资产名称 |
quantity | float | 是 | 持仓数量 |
# 删除持仓单
rqamsc.delete_positions_statement(
product_id_or_name: str, asset_unit_id: str, positions_statement_ids: List[Union[str, ObjectId]]
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
asset_unit_id | str | 是 | 资产单元 id |
positions_statement_ids | List[str, ObjectId] | 是 | 持仓单 id 可参考获取持仓中返回结果 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 删除数量(每条持仓记 1) |
# 估值表管理
# 查看产品已导入估值表信息
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, List[BytesIO], BytesIO],
show_upload_progress: bool = False, replace_dates: List[optional_datetime_like] = None
) -> List[Dict]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
files_or_directories | Union[List[str], str, List[BytesIO], BytesIO] | 是 | 可传以下类型: 1. 文件(夹)路径列表 2. 单个文件(夹)路径的字符 3. BytesIO 对象(该对象本身不存储文件名,若需要系统保存文件名,可参考下方操作) 4. 由 BytesIO 对象组成的列表 |
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)] |
BytesIO 对象设置文件名称
import rqamsc
from io import BytesIO
bytes_data = b'xxxxxx' # 从文件读取的字节码
bytesio_object = BytesIO(bytes_data)
bytesio_object.name = '估值表文件名称'
rqamsc.init(username='用户名', password='密码')
res = rqamsc.upload_valuation_reports_in_directories('一个产品', bytesio_object)
print(res)
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
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 | 是 | 删除估值表的数量 |
# 下载已导入的估值表文件
rqamsc.download_product_valuation_reports(
product_id_or_name: str, report_save_path: str, start_date: optional_datetime_like = None,
end_date: optional_datetime_like = None
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品 id 或产品名称 |
report_save_path | str | 是 | 文件保存地址 |
start_date | int,str,datetime,date | 否 | 开始日期,不填默认产品开始日期 |
end_date | int,str,datetime,date | 否 | 结束日期,不填则表示今日 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
successful | List[Dict] | 否 | 下载成功的估值表信息 |
file_name | str | 是 | 估值表文件名称 |
failed | List[Dict] | 否 | 下载失败的估值表信息 |
file_name | str | 是 | 估值表文件名称 |
reason | str | 是 | 下载失败原因 |
# 本地估值表文件自动化导入
rqamsc.run_vr_importer(
user_name=None, password=None, workspace=None, ams_uri=None, ssl_verify=True, config_file='config.yaml', mode='full'
)
对于存放在本地的估值表文件,可使用如下方式自动导入 AMS
- 方式一:通过 python 脚本运行
import rqamsc
rqamsc.init(username='AMS账号', password='AMS密码') # 具体可参考rqamsc的初始化
rqamsc.choose_workspace('AMS工作空间名称或id')
rqamsc.run_vr_importer() # 程序启动后默认读取程序工作目录下的 config.yaml 文件, 有关配置文件的内容可参考下方
- 方式二:命令行启动
run_vr_importer -u AMS账号 -p AMS密码 -w 工作空间名称或id
- 以下为该服务启动时所需的函数/命令参数
方式一参数 | 方式二参数 | 是否必须 | 说明 |
---|---|---|---|
user_name | -u / --user_name | 否 | AMS 账号,若像方式一中已初始化过则无需指定,方式二则必须指定 |
password | -p / --password | 否 | AMS 密码,若像方式一中已初始化过则无需指定,方式二则必须指定 |
workspace | -w / --workspace | 否 | 需要导入的流水所在产品的工作空间名称或 id,若像方式一中已初始化过则无需指定,方式二则必须指定 |
config_file | -c / --config_file | 否 | 配置文件的绝对路径,默认为程序工作目录下的 config.yaml, 该配置文件需要记录估值表文件和产品的对应关系及导入行为, 有关配置内容详情可见下方 |
mode | -m / --mode | 否 | 导入模式,默认为全量导入(full), 可指定增量导入(increment),即筛选出最近七个交易日的估值表文件导入来节省运行时间 |
ams_uri | --ams_uri | 否 | AMS 网页端地址,默认为线上,私有化部署用户可按实际情况指定 |
ssl_verify | --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 | 否 | 应收红股 | |
asset_unit_id | str | 否 | 资产单元 id | |
children | list[dict] | 否 | 对应资产单元下的子持仓,结构可直接参考产品头寸顶层的 positions |
# 获取产品或产品组指标
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 | 是 | 贝塔 | ||
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 | 是 | 期间年化收益 | ||
annual_oneside_turnover_rate | 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_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_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 | 否 | 风险净敞口 | |
long_leverage | float | 否 | 多头杠杆倍数 | |
long_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 | 是 | 公允价格 | |
price_limit | optional[str] | 是 | 是否涨跌停: 涨停(limit_up); 跌停(limit_down); 未发生涨跌停则为空 | |
has_settlement | bool | 是 | 是否已更新结算价 | |
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 | 是 | 应收红股 | |
update_time | str | 是 | 公允价更新时间 |
# 获取产品或产品组头寸序列
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.get_weekly_net_value_report(
product_id_or_name: str, report_save_path: str, start_date: optional_datetime_like = None,
end_date: optional_datetime_like = None, auto_retry_valuation: bool = True
) -> str
参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品(组)的 id 或名称 |
report_save_path | str | 是 | 报告 excel 保存路径(到文件夹) |
start_date | int,str,datetime,date | 否 | 开始日期 |
end_date | int,str,datetime,date | 否 | 结束日期 |
auto_retry_valuation | bool | 否 | 当估值计算未完成时是否自动继续请求, 默认自动请求 |
返回
成功的字符信息 or 抛出错误
# 绩效归因
# 获取产品或产品组绩效归因
rqamsc.get_performance_attribution(
product_like_id_or_name: str, start_date: optional_datetime_like, end_date: optional_datetime_like,
benchmark_id: Union[ObjectId, str] = '000300.XSHG', template: PATemplate = PATemplate.BRINSON,
industry_standard: str = 'sws', drilldown: bool = False, only_returns_decomposition: bool = False
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品(组)的 id 或名称 |
start_date | int,str,datetime,date | 是 | 开始日期 |
end_date | int,str,datetime,date | 是 | 结束日期 |
benchmark_id | Union[ObjectId, str] | 否 | 基准 id(默认为沪深 300): 1. 沪深 300: 000300.XSHG 2. 中证 500: 000905.XSHG 3. 中证 800: 000906.XSHG 4. 中证 1000: 000852.XSHG 5. 米筐小市值概念指数: 866002.RI 6. 一年期国债: china_treasury_bonds 7. 自定义基准:传合约 id 即可 |
template | PATemplate | 否 | 分析模板 可参考 PATemplate,默认为 brinson 归因 |
industry_standard | str | 否 | 行业分类(默认为申万): 1. 申万: shenwan 2. 中信: citics |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
attribution | Dict | 是 | |
brinson | Dict | 否 | brinson 归因结果 |
industry | float | 是 | |
allocation_risk | float | 是 | |
selection_risk | float | 是 | |
interaction_risk | float | 是 | |
allocation_return | float | 是 | |
portfolio_weight | float | 是 | |
benchmark_weight | float | 是 | |
selection_return | float | 是 | |
factor_attribution | Dict | 否 | 因子贡献 |
type | str | 是 | |
factors | List[Dict] | 是 | |
factor | str | 是 | |
portfolio_return | float | 是 | |
portfolio_exposure | float | 是 | |
benchmark_return | float | 是 | |
benchmark_exposure | float | 是 | |
portfolio_risk | float | 是 | |
benchmark_risk | float | 是 | |
active_risk | float | 是 | |
active_exposure | float | 是 | |
active_return | float | 是 | |
factor_exposure | Dict | 否 | 因子暴露度 |
factor | str | 是 | |
data | List[Dict] | 是 | |
date | str | 是 | |
portfolio | float | 是 | |
normalized | float | 是 | |
active | float | 是 | |
sensitivity | Dict | 否 | 敏感性 |
date | str | 是 | |
data | List[Dict] | 是 | |
factor | str | 是 | |
portfolio | float | 是 | |
t_statistics | float | 是 | |
return_decomposition | List[Dict] | 否 | |
factor | float | 是 | |
value | float | 是 | |
chlidren | Optional[List[Dict]] | 是 | 拆解后的子收益,结构同父节点 |
# 获取产品或产品组收益拆解
rqamsc.get_returns_decomposition(
product_like_id_or_name: str, start_date: optional_datetime_like, end_date: optional_datetime_like,
benchmark_id: Union[ObjectId, str] = '000300.XSHG'
) -> List
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_like_id_or_name | str | 是 | 产品(组)的 id 或名称 |
start_date | int,str,datetime,date | 是 | 开始日期 |
end_date | int,str,datetime,date | 是 | 结束日期 |
benchmark_id | Union[ObjectId, str] | 否 | 基准 id(默认为沪深 300): 1. 沪深 300: 000300.XSHG 2. 中证 500: 000905.XSHG 3. 中证 800: 000906.XSHG 4. 中证 1000: 000852.XSHG 5. 米筐小市值概念指数: 866002.RI 6. 一年期国债: china_treasury_bonds 7. 自定义基准:传合约 id 即可 |
- 返回
列表内元素结构如下
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
factor | float | 是 | |
value | float | 是 | |
chlidren | Optional[List[Dict]] | 是 | 拆解后的子收益,结构同父节点 |
# 自定义基准管理
# 查看自定义基准列表
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]
# 创建一个自定义基准
customized_benchmark 参数构建可参考 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]
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
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 | 是 | 成功删除的托管事件数量 |
# 份额事件管理
# 获取某个产品的份额事件列表
rqamsc.list_unit_events(
product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None, include_auto_units: bool = False
) -> List[UnitEvent]
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品名称或 id |
start_date | int,str,datetime,date | 否 | 只获取该日期之后的份额事件,若该字段为空则不做范围限制 |
end_date | int,str,datetime,date | 否 | 只获取该日期之前的份额事件,若该字段为空则不做范围限制 |
include_auto_units | bool | 否 | 是否返回自动份额事件,默认为 False(只返回手工录入的份额事件) |
- 返回
List[UnitEvent]
# 给某个产品增加份额事件
rqamsc.insert_unit_events(
product_id_or_name: str, unit_event_or_list: Union[Dict, UnitEvent, List[Dict], List[UnitEvent]]
) -> Dict
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品名称或 id |
unit_event_or_list | Union[Dict, UnitEvent, List[Dict], List[UnitEvent]] | 是 | 份额事件(对象/字典) 或 由其组成的列表 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 成功导入的份额事件数量 |
err_msg | List[str] | 否 | 返回失败的的份额事件的报错信息 |
# 修改产品下的一个份额事件
rqamsc.update_unit_event(product_id_or_name: str, unit_event: Union[Dict, UnitEvent]) -> Dict
关于 unit_event 参数数据的构建可以参考 增加份额事件 api 中构建示例
- 参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
product_id_or_name | str | 是 | 产品名称或 id |
unit_event | Union[Dict, UnitEvent] | 是 | 若传对象可参考 份额事件(对象), 字典可以仅传修要修改的字段 |
- 返回
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
effect_count | int | 是 | 是否修改成功(1 表示成功 0 表示失败) |
# 删除产品的一些份额事件
rqamsc.delete_unit_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 bson import ObjectId
from rqamsc import Product, ValuationSettings, ETFValuationAccordingField, ExchangeRateSettings, ExchangeRateType
product_doc = {
"_id": ObjectId("6177c9ea528f3ac1ce662abb"),
"name": "300估值因子增强_347418",
"data_source": "trade_and_valuation_report",
"start_date": datetime.datetime(2019, 1, 3),
"trading_start_date": datetime.datetime(2019, 1, 3),
"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": ValuationSettings(etf=ETFValuationAccordingField.iopv),
"exchange_rate_settings": ExchangeRateSettings(HKD=ExchangeRateType.sh)
}
# 使用 from_doc 方法将dict数据转化为产品对象
product = Product.from_doc(product_doc)
# 即可调用对象属性
product_id = product.id # ObjectId("6177c9ea528f3ac1ce662abb") note: _id被转换为id
trading_start_date = product.trading_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 | 是 | 产品开始日期 | |
trading_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) | |
accounts | List[dict], List[ProductAccount] | 是 | 账户信息 | |
account_number | str | 是 | 资金账号 | |
name | str | 是 | 账户名称 | |
broker | str | 是 | 账户通道 | |
is_custodian | bool | 是 | 是否是托管账户 | |
fee_settings | dict, ProductFeeSettings | 是 | 费用信息 | |
management_fee | float | 是 | 管理费 | |
custodian_fee | float | 是 | 托管费 | |
sales_and_service_fee | float | 是 | 销售服务费 | |
operation_fee | float | 是 | 运营费 | |
performance_pay | float | 是 | 业绩报酬 | |
realtime_period_type | str, RealtimePeriodType | 是 | 实时估值类型: 1. daytime: 仅白天 09:30 - 15:00 2. natural: 自然日 09:00 - 02:30 (+1) 3. valuation_day: 估值表日 21:00 - 15:00 (+1) | |
create_time | datetime, str | 是 | 创建时间 | |
paper_trading | bool | 是 | False: 实盘交易 True: 模拟交易 | |
investment_category | str, ProductInvestmentCategory | 是 | 投资类型 | |
strategy_category | str, StrategyCategory | 是 | 策略类型: 1. index_enhanced: 指数增强 2. equity_market_neutral: 市场中性 3. stock_long: 股票多头 4. commodity_trading_advisor: CTA 5. mixed: 混合策略 6. long_short_stock: 股票多空 7. unconventionality: 其他 | |
valuation_settings | dict, ValuationSettings | 否 | 设置资产估值方式 | |
etf | str, ETFValuationAccordingField | 否 | ETF 基金估值设置: 1. close: 收盘价 2. iopv: 当日净值 | |
fut_opt | str, FutOptValuationAccordingField | 否 | 期货期权估值设置: 1. close: 收盘价 2. settlement: 结算价 | |
acc_net_value | str, AccUnitValueValuationAccordingField | 否 | 累计净值估值设置: 1. acc_unit_dividend: T 日单位净值+产品起始日至今累计单位份额分红 2. last_unit_net_value: T-1 日累计净值+T 日单位净值-T-1 日单位净值+T 日产品单位份额分红 | |
exchange_rate_settings | dict, ExchangeRateSettings | 否 | 设置估值汇率 | |
HKD | str, ExchangeRateType | 否 | 港股通汇率设置: 1. sh: 沪港通中间价 2. sz: 深港通中间价 | |
case_number | str | 否 | 备案号 | |
manager | str | 否 | 管理人 | |
invest_advisor | str | 否 | 投资顾问 | |
invest_manager | str | 否 | 投资经理 | |
maturity_date | date, str, none | 否 | 产品到日期 | |
closing_date | date, str, none | 否 | 封账日 | |
description | 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 | 否 | 产品描述 |
# 交易流水来源
流水来源取值 | 流水来源描述 |
---|---|
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. 若流水列表中都为当日流水,则认为符合更加快速的增量估值计算标准,即计算服务会从最新的估值截面应用该批流水,如果日内实时导入交易流水且希望能实时估值能快速响应,应避免使用 open_api 方式上传已导入的当日流水 |
auto_balance | 自动权益下自动生成的流水 |
# 交易属性
交易属性取值 | 交易属性描述 | 该交易属性代码可能的米筐标准后缀 |
---|---|---|
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' |
# 资产属性
资产类型取值 | 资产类型描述 |
---|---|
stock | 股票 |
convertible_bond | 可转债 |
bond | 债券 |
repo | 正回购 |
repo_accrued_interest | 回购应计利息 |
reverse_repo | 逆回购 |
reverse_repo_accrued_interest | 逆回购应计利息 |
closed_end_fund | 封闭式基金 |
open_end_fund | 开放式基金 |
etf_fund | ETF 基金 |
lof_fund | LOF 基金 |
reits | REITS 基金 |
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 | 活期存款 |
# 交易类型
交易类型取值 | 交易类型描述 | 需要 settlement_amount(结算金额)字段 | 备注 |
---|---|---|---|
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 开仓 | |
etf_redeem_transfer_out | ETF 赎回划出 | 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 | 债券到期 |
# 业绩归因模板对象
字段 | 类型 | 说明 |
---|---|---|
PATemplate.BRINSON | str | brinson 归因 |
PATemplate.FACTOR | str | 多因子归因 |
PATemplate.FACTOR_V2 | str | 多因子归因V2 |
# 自定义基准对象
该对象属性构成如下, 具体使用可参考下方代码示例
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
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 | 否 | 备注信息 |
- 对象初始化方式一
import datetime
from rqamsc import CustomizedBenchmark
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}
]
}
]
)
- 对象初始化方式二
# 自定义基准对象可调用方法 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.name
多时段自定义权重基准
- 该对象也可以通过 to_dict 方法转化为字典
>>> customized_benchmark.to_dict()
{
'name': '多时段自定义权重基准',
'type': 'composite',
'workspace_id': None,
'user_id': None,
'remarks': None,
'id': None,
'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_id': None,
'id': None
}
],
'rates': 0
}
# 自定义基准成分权重对象
该对象使用方式可参考 自定义基准对象
字段 | 子字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|---|
start_date | str | 是 | 权重开始生效时,修改权重成分时以 start_date 作为搜索条件修改成分数据,若该 start_date 没有搜索到数据则添加该成分到基准中间 | |
customized_benchmark_id | str | 是 | 自定义基准 id, 在创建修改时构建该对象不需要此字段 | |
weights | List[Dict] | 是 | 自定义基准类型, composite(复合指数),fixed_rates(收益率指数) | |
order_book_id | str | 是 | 权重成分中资产代码 | |
weight | float | 是 | 权重成分中资产的权重(权重之和要等于 1) |
# 自定义合约对象
该对象使用方式可参考 自定义基准对象
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
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 |
# 托管事件对象
该对象使用方式可参考 自定义基准对象
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
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 |
# 份额事件对象
该对象使用方式可参考 自定义基准对象
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
date | datetime.date | 是 | 事件日期 |
subscription_units | float | 否 | 申购份额(与赎回份额必须二选一) |
redemption_units | float | 否 | 赎回份额(与申购份额必须二选一) |
source | str | 否 | 事件来源: 1. 手工录入(manual) 2. 系统自动生成(auto) |
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()} 还未计算出头寸')