Skip to content

RQAMSC 使用教程文档

rqamsc 介绍

RQAMS 是由米筐科技开发的,集多资产管理、实时监控、绩效分析、风险分析等多种功能于一体的智能投资组合管理平台。

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 是线程安全的,在当前进程的任何线程中调用 rqamsc 的 api 都是安全的。

在子进程中的 rqamsc:假设您正在当前进程中使用 rqamsc,接着 fork 创建了一个子进程,那么父子进程的 rqamsc 是互相隔离的。如何理解互相隔离呢:例如您在父进程中切换工作空间,该操作不会影响到子进程 rqamsc 所处的工作空间。可以简单认为子进程里的 rqamsc 是一个全新的 rqamsc,和父进程里的完全没关系。

私有 rqams 平台

默认情况下您访问的是米筐官方 RQAMS 平台,若您申请了一套私有 RQAMS 平台,也是可以使用 rqamsc 访问的, 这只需要在 uri 参数中指定私有 RQAMS 平台的地址(即在浏览器中可访问 AMS 的网址,保留至.com 后缀 或 有端口号需保留至端口号)。 (如有私有化部署需求,可以通过米筐官方网站联系我们。)

python
import rqamsc

rqamsc.init(username='demo@example.com', password='****', uri='your_ams_site.your_ams_domain.com')

迭代记录

rqamsc 版本发布日期新增改善不兼容改动
0.5.92025-09-221. 新增 批量获取产品或产品组收益相关性 接口1. 改善 ValuationNotReady 报错处理,移除所有 API 的 auto_retry_valuation 参数
0.5.82025-09-021. 上传托管申赎事件若没提供单位净值,则尝试从产品头寸中获取
0.5.72025-08-061. 新增 按检索条件删除流水 接口
2. 新增 交易分析 相关接口
1. 更改 估值表对象 cost_price 字段选填条件
0.5.62025-08-011. 托管事件 net_value_decimals 字段已废弃,替换为 unit_net_value 字段
0.5.52025-07-231. 新增 批量获取产品或产品组超额收益相关性 接口
1. 修正 投资驾驶舱 相关指标接口返回值错误
2. 产品对象case_number 字段已废弃,替换为 fund_code 字段
0.5.42025-07-011. 新增 投资驾驶舱 相关指标接口
2. 新增 模拟交易 相关接口
0.5.32025-04-071. 托管事件对象 增加申赎开放日及备注字段1. 托管事件相关接口返回值变动(增加删除托管事件)
0.5.22025-02-181. 产品组对象 增加再平衡频率字段
2. 修复 删除单个产品组 接口
3. 优化 api 中提供的 to_datetime 方法
0.5.12024-12-191. 新增 自定义指标 相关接口1. 自定义合约 增加归属产品字段
2. 修复使用港股汇率 上传自定义合约价格 时出现的问题
0.5.02024-11-271. 新增 重算产品或产品组
2. 新增 删除自定义基准
3. 新增 删除自定义合约
1. 产品组 增加返回策略类型
2. 优化估值表导入报错时的信息反馈
3. 程序运行期间可能出现登录过期的情况时会自动重新登录
4. 单产品导入估值表 支持字典格式导入
5. 修复 获取实时信息 传递"额外指标"参数后未返回持仓的问题
1. 产品产品组 增加报告名称属性
2. 增加"股票杠杆多空"策略类型, 可在 产品对象 中查看(产品中若设置了该策略类型,此前版本无法识别)
0.4.22024-08-121. 绩效归因 支持风险因子 v2
2. 资产单元持仓单导入 支持 BytesIO 对象元
0.4.12024-06-261. 增加估值表文件下载接口1. 估值表自动导入服务 优化,支持全量增量更新
2. 单产品导入估值表 支持 BytesIO 对象, 返回结果简化
3. 获取产品列表 支持返回产品下资产单元
0.4.02024-05-131. 增加份额管理相关接口
2. 产品增加估值汇率设置属性
周度净值报告接口支持产品组1. 产品及产品组增加交易起始日属性
2. 产品估值设置字段类型变更,详见产品对象
3. 删除托管事件接口返回值调整(此前版本使用该接口可以正常删除但返回结果时会出错)
0.3.162024-03-201. 修复导入自定义合约价格文件时可能导致的报错
2. 修复自定义合约类(CustomInstruments)未返回 id 属性
0.3.142024-03-13兼容一些异步接口因估值计算未完成提前终止的情况调整持仓单导入接口参数 file_path -> file_path_or_bytes, 同时支持更丰富的参数类型
0.3.132024-01-111. 新增持仓单相关操作接口
2. 流水接口支持对资产单元的相关操作

快速开始

导包

在成功安装 rqamsc 包后就可以在程序中使用 rqamsc,首先 import rqamsc 包

python
>>> import rqamsc

登录

接着登录 RQAMS 平台。username/password 是您登陆 RQAMS 的凭证,uri 是要访问的 RQAMS 平台地址,默认是米筐官方 RQAMS 平台(了解访问私有 RQAMS 平台):

python
>>> rqamsc.init(username="yourname@example.com", password="yourpassword", uri="https://www.ricequant.com")

获取空间下产品

现在尝试获取一下当前空间(多个空间情况下登录后默认使用第一个空间, 切换空间相关请参考工作空间)下的所有产品:

python
>>> 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=ObjectId('5e9a6b06ba363be9fce2a599'), product_state='normal', full_name='多策略1号', create_time='2021-08-02 11:37:43', fund_code='', manager='', invest_advisor='', invest_manager='', maturity_date='2999-12-31', closing_date=None, id='61076887224d591257c5ebb5')]

获取产品某天的头寸

在登录成功后,可调用 rqamsc.get_balance 获取产品头寸信息,如下示例

python
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()

以上示例输出结果如下

python
{
    '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': [
    ...
}

进阶教程

本地估值表文件定时自动化导入

Linux

自动化导入本地估值表文件前置条件: 1.确保已经安装了rqamsc 2.存在估值表文件夹且文件夹下有估值表文件(该文件夹中的估值表需要及时同步更新到最新的估值表,不然定时导入无意义)

  1. 新建和编辑配置文件 config.yaml

    为了将估值表文件与 AMS 中产品关联起来,需要使用 config.yaml 来声明其映射关系,其中内容包括估值表文件路径、产品名称、是否采用估值表对账中自动覆盖方式等信息, 使用文本编辑器(如 nano 或 vim)创建并编辑 config.yaml 文件,示例如下:

    commandline
    vim config.yaml
    
    nano config.yaml

    编辑内容示例如下:

    yaml
    path: /path/to/the/valuation_reports # 估值表文件所在目录
    # 可包含多个产品以及其需要导入的估值表文件
    product_vr_map:
      - product: 产品1 # AMS中产品名称
        full_name: 产品1估值表 # 注意:1.该字段与AMS产品的"产品全称"字段保持一致 2. 该字段包含于估值表文件名称中且区别与其他估值表文件名称
        is_overwrite: false # 是否采用估值表对账中自动覆盖方式(true则表示使用估值表文件作为产品当天的估值结果)
      - product: 产品2
        full_name: 产品2估值表

    vim | nano 保存退出方法详细说明

  2. 运行&调试

    • 方式一:通过 python 脚本运行, 在与 config.yaml 同级目录下新建一个 python 文件,示例如下: 使用文本编辑器(如 nano 或 vim)创建和编辑 python 文件:
    commandline
    vim vr_importer.py
    
    nano vr_importer.py

    编辑内容示例如下:

    python
    # -*- coding: utf-8 -*-
    import rqamsc
    
    rqamsc.init(username="AMS账号", password="AMS密码", uri="https://www.ricequant.com") # 具体可参考rqamsc的初始化
    rqamsc.choose_workspace('AMS工作空间名称或id')
    rqamsc.run_vr_importer()  # 程序启动后默认读取程序工作目录下的 config.yaml 文件

    运行该文件 命令:

    python vr_importer.py
    • 方式二:通过命令行运行,在命令行中运行以下命令(在有 config.yaml 文件的目录下执行命令):
    commandline
     run_vr_importer -u AMS账号 -p AMS密码 -w AMS工作空间名称或id

    运行结果如下:

    2024-09-04 15:37:02,781:INFO:Loading vr_importer
    2024-09-04 15:37:04,032:INFO:产品1 已导入 /path/to/the/valuation_reports/产品1估值表.xls
    2024-09-04 15:37:04,329:INFO:产品2 已导入 /path/to/the/valuation_reports/产品2估值表.xls
    2024-09-04 15:37:04,329:INFO:End vr_importer

    注意

    • python 文件首行添加 # -*- coding: utf-8 -*- 否则可能会出现 UnicodeDecodeError 报错
    • 如果显示错误:未找到配置文件(config.yaml) 需要确保已经创建好了 config.yaml 文件。 且确保脚本文件与 config.yaml 文件在同一目录下。 通过命令行运行也需要在该目录下使用命令。
    • 如果日志信息只输出了 Loading vr_importer 和 End vr_importer 而没有具体的导入结果,请检查 config.yaml 文件中的路径、产品名称、估值表文件名称是否正确。或者确认估值表是否更新
  3. 定时运行 使用 crontab 定时运行,使用以下命令:

    commandline
    crontab -e

    编辑内容示例如下:

    commandline
    30 13 * * * cd /path/to/the/config(你的config.yaml文件所在目录) && python3 /path/to/the/vr_importer.py
    # 该命令每天13点30分运行vr_importer.py脚本,请根据实际情况修改路径和参数。
    
    # 或者
    
    30 13 * * *  cd /path/to/the/config(你的config.yaml文件所在目录) && run_vr_importer -u AMS账号 -p AMS密码 -w AMS工作空间名称或id
    # 该命令每天13点30分运行run_vr_importer命令,请根据实际情况修改参数。

    注:(每个星号代表一个时间单位,分别对应:分钟、小时、日期、月份、星期)

    如果使用的是虚拟环境(以 conda 为例) 编辑如下内容:

    commandline
    30 13 * * * cd /home/user(config.yaml文件所在目录) && ~/miniconda3/envs/myenv(根据你的conda安装目录以及名称调整)/bin/python vr_importer.py
    # 该命令每天13点30分运行vr_importer.py脚本,请根据实际情况修改脚本路径和参数。
    
    # 或者
    
    30 13 * * * /bin/bash -c "source ~/miniconda3/etc/profile.d/conda.sh(根据你的conda安装目录调整); conda activate myenv(环境名称); cd /home/user/(你的config.yaml文件所在目录) && run_vr_importer -u AMS账号 -p AMS密码 -w AMS工作空间名称或id
    # 该命令每天13点30分运行run_vr_importer命令,请根据实际情况修改参数。

    保存并退出,crontab 将会自动运行该命令。

Windows

  1. 新建 config.yaml 文件,示例如下:

    yaml
    path: \path\to\the\valuation_reports # 估值表文件所在目录
    # 可包含多个产品以及其需要导入的估值表文件
    product_vr_map:
      - product: 产品1 # AMS中产品名称
        full_name: 产品1估值表 # 注意:1.该字段与AMS产品的"产品全称"字段保持一致 2. 该字段包含于估值表文件名称中且区别与其他估值表文件名称
        is_overwrite: false # 是否采用估值表对账中自动覆盖方式(true则表示使用估值表文件作为产品当天的估值结果)
      - product: 产品2
        full_name: 产品2估值表
  2. 运行&调试 - 方式一:通过 python 脚本运行, 在与 config.yaml 同级目录下新建一个 python 文件,示例如下:

    ```python
    import rqamsc
    
    rqamsc.init(username="AMS账号", password="AMS密码",
                uri="https://www.ricequant.com")# 具体可参考rqamsc的初始化
    rqamsc.choose_workspace('AMS工作空间名称或id')
    rqamsc.run_vr_importer()  # 程序启动后默认读取程序工作目录下的 config.yaml 文件
    ```
    然后运行该文件
    
    - 方式二:通过命令行运行,在命令行中运行以下命令:
    
    commandline
    run_vr_importer -u AMS账号 -p AMS密码 -w AMS工作空间名称或id --ams_uri https://www.ricequant.com
     ```
    
    运行结果如下:
     ```
     2024-09-03 14:32:33,089:INFO:Loading vr_importer
     2024-09-03 14:32:35,454:INFO:产品1 已导入 \path\to\the\valuation_reports\产品1估值表.xls
     2024-09-03 14:32:36,361:INFO:产品2 已导入 \path\to/the\valuation_reports\产品2估值表.xls
     2024-09-03 14:32:36,361:INFO:End vr_importer
     ```
    [该服务启动时可能所需的函数/命令参数](#parameter)

使用 openapi 方式给产品导入估值表

通过 dict、json 格式的估值表数据导入产品,如下为示例

python
import rqamsc

rqamsc.init(username, password)
rqamsc.choose_workspace('需要指定的工作空间')

# 产品于2024-09-03日的估值信息
valuation_report = {
  "date": "2024-09-03", #持仓单日期
  "total_equity": 2004.00, # 净资产
  "units": 2000, #份额
  "unit_net_value": 1.002, # 单位累计净值
  "acc_unit_net_value": 1.002, # 单位累计净值
  "positions": [
    # 第一条持仓
    {
      "order_book_id": "CNY",
      "symbol": "活期存款",
      "asset_class": "current_deposit",
      "direction": "long",
      "market_value": 1000.00
    },
    # 第二条持仓
    {
      "order_book_id": "000001.XSHE",
      "symbol": "平安银行",
      "asset_class": "stock",
      "direction": "long",
      "market_value": 1004.00, # 持仓市值
      "quantity": 100.00, # 持仓数量
      "cost_price": 10.00, # 单位成本
      "cost": 1000.00, # 成本
      "fair_value": 10.04, # 公允价格
    },
  ]
}

# 调用导入估值表api
result = rqamsc.upload_valuation_reports('要导入持仓单的产品id或名称', valuation_report)
print(result)

以上示例运行结果如下

python

[{
    'err_msg': [],
    'confirmation_id': '673ee9461fa46d0538e6b880',
    'file': 'xxx产品_2024-09-03_api导入数据.csv'
}]

RQAMSC API 手册

打开网页版 RQAMS

python
rqamsc.go()

登录

python
rqamsc.init(username, password, uri="https://www.ricequant.com", ssl_verify=True)
  • 参数
参数类型说明
usernamestr用户名
passwordstr密码
uristrAMS 平台 URI,默认为米筐官方 RQAMS 平台 URI
ssl_verifybool是否开启 https 认证(默认开启,若无 https 则可以指定为 False 来关闭)

工作空间

工作空间是您创建产品,管理资产,和其他人协同工作的场所,您可以邀请其人进入您的工作空进和您协作,也可能被邀请进入其他人的工作空间。

对于大多数的用户,默认工作空间已经可以满足日常工作所需。您也可在 RQAMS 平台上创建新的工作空间,rqamsc 支持在不同的工作空间中切换使用。 (更多关于工作空间的介绍请前往米筐官方网站)

获取所有工作空间信息

获取所有您拥有的或者参与的工作空间。

python
rqamsc.get_workspaces()
  • 返回

List[Workspace]

指定一个工作空间

一般情况下您处于默认的工作空间中。choose_workspace 让您可以在工作空间之间切换。

python
rqamsc.choose_workspace(workspace_name_or_id: str)

获取当前工作空间

python
rqamsc.current_workspace()
  • 返回

Workspace

产品管理

获取全部产品信息

python
rqamsc.list_products() -> List[Product]

获取全部的产品信息

  • 返回

List[Product]

  • 示例
python
>>> 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, fund_code=, manager=, invest_advisor=, invest_manager=, maturity_date=2999-12-31, closing_date=None, id=61076887224d591257c5ebb5)]

获取单个产品信息

python
rqamsc.get_product(product_id_or_name: str) -> Product
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 id 或产品名称
  • 返回

Product

  • 示例
python
>>> 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, fund_code=, manager=, invest_advisor=, invest_manager=, maturity_date=2999-12-31, closing_date=None, id=61076887224d591257c5ebb5)

修改单个产品信息

python
rqamsc.update_product(product_id_or_name: str, update_fields: Dict) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 id 或产品名称
update_fieldsdict需要修改的产品信息(字段值可参考Product)
  • 返回
字段类型是否必须说明
effect_countint是否修改成功(1:成功, 0:未成功)
  • 示例
python
>>> rqamsc.update_product('范例产品', update_fields={'name': '范例产品copy'})
{'effect_count': 1}

删除单个产品

python
rqamsc.delete_product(product_id_or_name: str) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 id 或产品名称
  • 返回
字段类型是否必须说明
effect_countint是否删除成功(1:成功, 0:未成功)
  • 示例
python
>>> rqamsc.delete_product('范例产品')
{'effect_count': 1}

产品组管理

获取全部产品组信息

python
rqamsc.list_product_groups() -> List[ProductGroup]

获取全部的产品组信息

  • 返回

List[ProductGroup]

  • 示例
python
>>> 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)]

获取单个产品组信息

python
rqamsc.get_product_group(group_id_or_name: str) -> ProductGroup
  • 参数
参数类型是否必须说明
group_id_or_namestr产品组 id 或名称
  • 返回

ProductGroup

  • 示例
python
>>> 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)

修改单个产品组信息

python
rqamsc.update_product_group(group_id_or_name: str, update_fields: Dict) -> Dict
  • 参数
参数类型是否必须说明
group_id_or_namestr产品组 id 或名称
update_fieldsdict需要修改的产品信息(字段值可参考_ProductGroup)
  • 返回
字段类型是否必须说明
effect_countint是否修改成功(1:成功, 0:未成功)
  • 示例
python
# 以下为聚合型产品组字段构建
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
}

删除单个产品组

python
rqamsc.delete_product_group(group_id_or_name: str) -> Dict
  • 参数
参数类型是否必须说明
group_id_or_namestr产品组 id 或名称
  • 返回
字段类型是否必须说明
effect_countint是否删除成功(1:成功, 0:未成功)

重算

产品或产品组重算

python
def recompute(
        product_like_ids_or_names: Union[str, List[str]], start_date: optional_datetime_like = None
) -> Dict[str, int]
  • 参数
参数类型是否必须说明
product_like_ids_or_namesstr, list[str]产品或产品组 id 或名称
start_dateint,str,datetime,date指定某一天至今每天的头寸全部重新计算,若不指定,默认从产品或产品组起始日开始重算
  • 返回
字段类型是否必须说明
submit_recompute_countint表示所选产品或产品组触发重算的数量

交易流水管理

给产品导入交易流水

insert_product_trades 是 RQAMSC 的核心 API 之一,用于向 AMS 产品导入交易流水数据。导入的流水称为 openapi 来源流水,支持股票、期货、现金等多种交易类型的批量导入。

python
rqamsc.insert_product_trades(
    product_id_or_name: str,
    trades_or_df: Union[List[Dict], DataFrame],
    chunk_size: int = 1000
) -> List[Dict]
  • 参数说明
参数名类型必须说明
product_id_or_namestr产品 ID 或产品名称,用于指定要导入交易流水的目标产品
trades_or_dfList[Dict] or DataFrame交易流水数据,可以是字典列表或 pandas DataFrame 格式
chunk_sizeint批次大小,默认 1000。API 会按此大小分批上传,最小值为 500

交易流水字段: 单条流水中的详细字段可参考 _交易流水对象_

常用字段:

  • transaction_type: 交易类型(如 'buy', 'sell', 'cash*in' 等),更多交易类型可参考*交易类型_
  • datetime: 交易时间
  • order_book_id: 证券代码
  • symbol: 证券名称
  • quantity: 交易数量(现金类交易可省略)
  • price: 交易价格(现金类交易可省略)
  • settlement_amount: 结算金额(现金类交易必须)

返回一个结果列表,记录每批次的导入结果:

字段子字段类型是否必须说明
chunk_startint分批导入时每一批的起始位置, 第一批从位置 0 开始
resultlist[dict]每一批的导入结果
idstr导入成功的交易流水 id
actionstr导入行为:
insert: 新增成功
modify: 覆盖已有记录(相同 foreign_id)
errstr错误信息(导入失败时返回)

使用示例

1. 快速入门:入金流水
python
import datetime
import rqamsc

# 初始化连接
rqamsc.init('username', 'password')
rqamsc.choose_workspace('工作空间名称')

# 准备交易数据
trades = [
    # 最简单的入金流水,只提供必须字段
    {
        'transaction_type': 'cash_in',  # 入金
        'datetime': datetime.datetime(2024, 5, 7, 9, 0, 0),
        'order_book_id': 'CNY',  # 人民币
        'symbol': 'CNY',
        'settlement_amount': 1000000  # 入金100万元
    },
]

# 导入到产品
result = rqamsc.insert_product_trades('我的产品', trades)
print(result)
2. 股票交易示例

有了初始资金后,就可以开始股票投资。这里展示包含费用的完整股票交易:

python
import datetime
import rqamsc

rqamsc.init('username', 'password')
rqamsc.choose_workspace('工作空间名称')

trades = [
    # 第一条:最简单的股票买入,只提供必须字段
    {
        'transaction_type': 'buy',  # 买入
        'datetime': datetime.datetime(2024, 5, 7, 9, 30, 0),
        'order_book_id': '000001.XSHE',
        'symbol': '平安银行',
        'quantity': 1000,  # 买入1000股
        'price': 12.50     # 每股12.50元
    },
    # 第二条:或许你可以提供更详细的字段
    {
        'transaction_type': 'sell',  # 卖出
        'datetime': datetime.datetime(2024, 5, 8, 14, 30, 0),
        'account': '范例产品交易账号中文名',   # 交易账户名称,不提供则默认第一个产品账户
        'order_book_id': '000001.XSHE',
        'symbol': '平安银行',
        'quantity': 500,
        'price': 13.20,
        'commission': 6.60,     # 佣金
        'tax': 0,               # 交易税, 不提供默认为0
        'other_fees': 0.5,     # 其他费用
        'remarks': '部分止盈',    # 备注信息
        'foreign_id': 'SELL_001_20240508' # 外部系统ID,可不提供, 用于去重
    }
]

result = rqamsc.insert_product_trades('我的产品', trades)
print(result)
3. 期货交易示例

期货交易与股票类似,但需要注意合约代码的格式:

python
import datetime
import rqamsc

rqamsc.init('username', 'password')
rqamsc.choose_workspace('工作空间名称')

trades = [
    # 第一条:最简单的期货开仓,只提供必须字段
    {
        'transaction_type': 'buy_open',  # 开多仓
        'datetime': datetime.datetime(2024, 5, 7, 10, 15, 0),
        'order_book_id': 'IF2406',  # 沪深300期货主力合约
        'symbol': 'IF2406',
        'quantity': 2,      # 开仓2手
        'price': 3250.0     # 每点3250元
    },
    # 第二条:或许你可以提供更详细的字段
    {
        'transaction_type': 'sell_open',  # 平多仓
        'datetime': datetime.datetime(2024, 5, 8, 11, 30, 0),
        'account': '范例产品交易账号中文名',   # 交易账户名称,不提供则默认第一个产品账户
        'order_book_id': 'IF2406',
        'symbol': 'IF2406',
        'quantity': 1,       # 平仓1手
        'price': 3280.0,     # 盈利平仓
        'commission': 15.0,  # 期货手续费
        'remarks': '部分止盈平仓',
        'foreign_id': 'FUT_SELL_001'  # 外部系统ID
    }
]

result = rqamsc.insert_product_trades('期货产品', trades)
print(result)
4. 现金类流水示例

这个示例展示如何导入更多现金类流水,包括分红收入、利息收入和利息支出等。

python
import datetime
import rqamsc

# 初始化连接
rqamsc.init('username', 'password')
rqamsc.choose_workspace('工作空间名称')

trades = [
    # 分红收入流水 - 股票分红
    {
        'transaction_type': 'dividend_payment',  # 红利入账
        'datetime': datetime.datetime(2024, 5, 15, 9, 0, 0),
        'order_book_id': '000001.XSHE',  # 股票分红
        'symbol': '平安银行',
        'settlement_amount': 12500,  # 分红金额12,500元
    },
    # 分红税支付流水
    {
        'transaction_type': 'dividend_tax_payment',  # 红利税支付
        'datetime': datetime.datetime(2024, 5, 15, 9, 1, 0),
        'order_book_id': '000001.XSHE',
        'symbol': '平安银行',
        'settlement_amount': 1250,  # 红利税10%
    },
    # 银行存款利息收入
    {
        'transaction_type': 'interest_income',  # 利息收入
        'datetime': datetime.datetime(2024, 5, 1, 16, 0, 0),
        'order_book_id': 'CNY',
        'symbol': 'CNY',
        'settlement_amount': 850,  # 利息收入850元
    },
    # 借款利息支出
    {
        'transaction_type': 'interest_payment',  # 利息支出
        'datetime': datetime.datetime(2024, 5, 10, 16, 0, 0),
        'order_book_id': 'CNY',
        'symbol': 'CNY',
        'settlement_amount': 2500,  # 利息支出2500元
    },
]

result = rqamsc.insert_product_trades('我的产品', trades)
print(result)
5. 回购交易流水示例

这个示例展示如何导入回购相关流水,包括正回购、逆回购以及到期购回等操作。

python
import datetime
import rqamsc

# 初始化连接
rqamsc.init('username', 'password')
rqamsc.choose_workspace('工作空间名称')

trades = [
    # 逆回购操作 - 资金出借
    {
        'transaction_type': 'reverse_repo',  # 逆回购
        'datetime': datetime.datetime(2024, 5, 7, 10, 30, 0),
        'order_book_id': '131810.XSHE',  # 深市1天逆回购
        'symbol': 'R-001',
        'quantity': 10,  # 10手,即100万元
        'price': 2.5,    # 年化收益率2.5%
    },
    # 逆回购到期购回 - 资金收回
    {
        'transaction_type': 'reverse_repo_repurchase',  # 逆回购购回
        'datetime': datetime.datetime(2024, 5, 8, 16, 0, 0),
        'order_book_id': '131810.XSHE',
        'symbol': 'R-001',
        'quantity': 10,
        'price': 2.5,
        'settlement_amount': 1000068.49,  # 本金+利息
    },
    # 正回购操作 - 质押融资
    {
        'transaction_type': 'repo',  # 正回购
        'datetime': datetime.datetime(2024, 5, 10, 14, 0, 0),
        'order_book_id': '204001.XSHG',  # 沪市1天回购
        'symbol': 'GC001',
        'quantity': 5,   # 5手,即50万元
        'price': 3.2,    # 融资利率3.2%
    },
    # 正回购到期购回 - 还款付息
    {
        'transaction_type': 'repo_repurchase',  # 正回购购回
        'datetime': datetime.datetime(2024, 5, 11, 16, 0, 0),
        'order_book_id': '204001.XSHG',
        'symbol': 'GC001',
        'quantity': 5,
        'price': 3.2,
        'settlement_amount': 500044.44,  # 本金+利息
    }
]

result = rqamsc.insert_product_trades('我的产品', trades)
print(result)
6. foreign_id 覆盖功能使用示例

这个示例展示如何使用 foreign_id 字段来避免重复导入和实现流水覆盖更新功能。

python
import datetime
import rqamsc

# 初始化连接
rqamsc.init('username', 'password')
rqamsc.choose_workspace('工作空间名称')

# 第一次导入 - 初始流水
trades_initial = [
    {
        'transaction_type': 'buy',
        'datetime': datetime.datetime(2024, 5, 7, 9, 30, 0),
        'order_book_id': '000001.XSHE',
        'symbol': '平安银行',
        'quantity': 1000,
        'price': 12.50,
        'commission': 6.25,
        'remarks': '初始买入',
        'foreign_id': 'ORDER_001_20240507'  # 外部系统唯一ID
    }
]

print("=== 第一次导入 ===")
result1 = rqamsc.insert_product_trades('我的产品', trades_initial)
print(result1)
# 结果: [{'chunk_start': 0, 'result': [{'id': 'xxx', 'action': 'insert'}]}]

# 第二次导入 - 使用相同foreign_id但修改了数据(比如更正佣金费率)
trades_corrected = [
    {
        'transaction_type': 'buy',
        'datetime': datetime.datetime(2024, 5, 7, 9, 30, 0),
        'order_book_id': '000001.XSHE',
        'symbol': '平安银行',
        'quantity': 1000,
        'price': 12.50,
        'commission': 12.50,  # 修正后的佣金
        'remarks': '已修正佣金费率',
        'foreign_id': 'ORDER_001_20240507'  # 相同的外部ID
    }
]

print("\n=== 第二次导入(覆盖) ===")
result2 = rqamsc.insert_product_trades('我的产品', trades_corrected)
print(result2)
# 结果: [{'chunk_start': 0, 'result': [{'id': 'xxx', 'action': 'modify'}]}]
# 注意:action为'modify',说明覆盖了原有记录

# foreign_id的最佳实践:
# 1. 使用业务系统中的唯一标识符作为foreign_id
# 2. 重新导入相同foreign_id的流水会覆盖原流水
# 3. 不提供foreign_id的流水会始终新增,不会覆盖
7. 完整的复杂示例
python
import datetime

import rqamsc


def demo():
    rqamsc.init('username', 'password')
    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,  # 分红的金额
        },
        # 第五条流水
        {
            'transaction_type': 'interest_payment',  # 利息支出
            'datetime': datetime.datetime(2024, 5, 7, 16, 0, 0),
            'order_book_id': 'CNY',
            'symbol': 'CNY',
            'settlement_amount': 50,  # 利息支出金额
            'remarks': '银行借款利息支出'
        }

        # ... 可增加更多流水
    ]

    # 调用导入流水api,使用result变量接收返回结果并打印输出,可使用chunk_size参数指定每批上传的流水数量,默认1000
    result = rqamsc.insert_product_trades('一个范例产品', trades, chunk_size=500)
    print(result)


if __name__ == '__main__':
    demo()

以上示例运行结果如下

python
[{
    'chunk_start': 0,   # 本批次流水起始下标
    'result': [ # 本批次流水的导入结果
        # 第一条流水导入结果: modify表示覆盖了相同foreign_id的流水
        {'id': '66aca9b916822a16d8143b58', 'action': 'modify'},
        # 第二条流水导入结果: insert表示增加成功
        {'id': '66acae1c6d4a6ec991079160', 'action': 'insert'},
        {'id': '66acae1c6d4a6ec991079161', 'action': 'insert'},
        # 第四条流水导入失败
        {'err': '该产品中没有该交易账户名: 一个不存在的账号'}
        # ... 该结果列表和上传流水的顺序一致,即 chunk_start + 列表下标 = 该流水在上传数据序列中的位置
    ]
}]

给产品导入结算交易流水

使用此方式导入的流水称为日终结算流水,该流水类型特点可参考 交易流水来源

python
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_namestr需要导入流水的产品 id 或产品名称
account_namestr需要导入流水的交易账号名称
file_or_dir_pathstr or List[str]需要导入流水的文件或文件夹目录
asset_unit_idstr or ObjectId需要导入的资产单元 id
  • 返回:返回一个 Dict 字典,key 为文件路径, value 结构如下
文件导入状态类型参数说明
成功或部分导入成功dictconfirmation_id凭证 id, 可以通过此 id 查询凭证以获取详细的导入结果
effect_count解析出的流水数量
err_msg是一个存储 dict 的列表,存储导入失败的流水信息(全部成功则为空)
失败str失败原因的信息

e.g.

json
{
  "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": "流水文件格式错误"
}

获取产品的交易流水

python
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 namestr产品 id 或产品名称
start_dateint,str,datetime,date开始日期(如果不传则从今天向前取三个月)
end_dateint,str,datetime,date结束日期(如果不传则为今天)
sourcesstr,Iterable参考*交易流水来源*
account_namesstr,Iterable账户名称(可传字符串或字符串列表等)
asset_unit_id_or_liststr,ObjectId,Iterable资产单元 id(可传字符串或字符串列表等), 指定后查询资产单元下的流水
asset_transaction_typesstr,Iterable资产类型交易类型 (可传字符串或字符串列表等)
eg. asset_transaction_types='stock-buy'
key_wordsstr,Iterable关键字, 可检索'账号'、'代码'、'名称'、'变动类型'(传多个值时相互间为并集)
order_book_idstr资产代码(根据所给值进行正则匹配, 不区分大小写)
symbolstr资产名称(根据所给值进行正则匹配, 不区分大小写)
group_bystr分组聚合关键字:
1. asset(根据资产聚合)
2. trading_date(根据交易日期聚合)
remarksstr备注(根据所给值进行正则匹配, 不区分大小写)

按检索条件删除流水

python
rqamsc.delete_product_trades_by_date(
    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[Union[str, ObjectId, List[Union[str, ObjectId]]]] = None,
    key_words: Union[str, Iterable] = None,
    remarks: str = None,
    is_query_assistant: bool = False
) -> Dict
  • 参数
参数类型是否必须说明
product_id or namestr产品 id 或产品名称
start_dateint,str,datetime,date开始日期(如果不传则为产品交易起始日)
end_dateint,str,datetime,date结束日期(如果不传则为今天)
sourcesstr,Iterable参考交易流水来源_
order_book_idstr资产代码(根据所给值进行正则匹配, 不区分大小写)
symbolstr资产名称(根据所给值进行正则匹配, 不区分大小写)
asset_transaction_typesstr,Iterable资产类型交易类型 (可传字符串或字符串列表等)
eg. asset_transaction_types='stock-buy'
account_namesstr,Iterable账户名称(可传字符串或字符串列表等)
asset_unit_id_or_liststr,ObjectId,Iterable资产单元 id(可传字符串或字符串列表等), 指定后查询资产单元下的流水
key_wordsstr,Iterable关键字, 可检索'账号'、'代码'、'名称'、'变动类型'(传多个值时相互间为并集)
remarksstr备注(根据所给值进行正则匹配, 不区分大小写)
is_query_assistantbool是否删除副表流水,默认为 False
  • 返回
字段类型是否必须说明
deleted_countint删除流水的数量

使用示例:

python
import rqamsc
from datetime import datetime

# 删除指定日期范围的交易流水
result = rqamsc.delete_product_trades_by_date(
    '产品名称',
    start_date='2023-01-01',
    end_date='2023-01-31',
)
print(f"删除结果: {result}")

删除产品的交易流水

⚠️ 废弃警告: 此 API 已不推荐使用,将在未来版本中被废弃。推荐使用功能更强大的 delete_product_trades_by_date API。

python
rqamsc.delete_product_trades(product_id_or_name: str, trade_ids: List[Union[str, ObjectId]]) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 id 或产品名称
trade_idsList[str or ObjectId]流水 id(可见流水查询结果中 '_id' 字段)
  • 返回
字段类型是否必须说明
effect_countint删除流水的数量

交易流水文件自动化导入 AMS

AMS 对于一些常见的流水文件模板也做了一定的适配(如:迅投 csv 格式流水、CTP 来源 txt 格式流水)

启动服务可以使用如下两种方式

方式一:在 python 代码中启动

python
import rqamsc
rqamsc.init(username='AMS账号', password='AMS密码')   # 具体可参考rqamsc的初始化
rqamsc.choose_workspace('AMS工作空间名称或id')
rqamsc.run_import_trades_server()

or

方式二:命令行启动

commandline
run_import_trades_server -u AMS账号 -p AMS密码 -w 工作空间名称或id

以下为该服务启动时所需的函数/命令参数

参数是否必须说明
-u / --user_nameAMS 账号,若像方式一中已初始化过则无需指定,方式二则必须指定
-p / --passwordAMS 密码,若像方式一中已初始化过则无需指定,方式二则必须指定
-w / --workspace需要导入的流水所在产品的工作空间名称或 id,若像方式一中已初始化过则无需指定,方式二则必须指定
-c / --config_file配置文件的绝对路径,默认为程序工作目录下的 config.yaml, 有关配置内容可见下方
--ams_uriAMS 网页端地址,默认为线上,私有化部署用户可按实际情况指定
--ssl_verify是否进行安全检测,线上默认为 True, 私有化部署若未使用 https 需置为 False

服务运行需要依赖 config.yaml 配置文件来明确要导入的流水文件与产品之间的关系,以及可以指定一些导入设置,其示例及参数如下

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"

配置文件关键字介绍

字段名子字段数据类型是否必须说明
pathstr流水文件所在的目录的地址
templatestr模板类型,目前已支持的类型如下:
1. xuntou: 迅投流水(要在迅投客户端的导出设置中选择全部字段的导出方式)
2. ctp_txt: CTP 期货期权 txt 格式结算单
3. caitong_txt: 财通期货期权 txt 格式结算单
filename_modelstr流水文件共有的一段连续的名称(如 FuturesSettlement_20230801.txt 可指定为 FuturesSettlement)
product_accountList[Dict]
productstr产品名称, 指定需要导入哪个 AMS 产品
account_namestr账号名称, 指定需要导入该产品的哪个账号
account_numberstr数字账号, 指定该账号名称对应的数字账号(有些账号名称会变化)
startstr指定导入哪些日期的流水(根据文件名中的日期,格式如'20230801'),该字段为区间开始日期,不指定则只导入当天的流水
endstr指定导入哪些日期的流水(根据文件名中的日期,格式如'20230801'),该字段为区间结束日期,不指定则只导入当天的流水
intervalint指定这个配置项每隔多少秒运行一次(一般用于实时导入),值为 0 或没有该字段则只会执行一次
expire_timestr指定在每天的几点(格式可以是 'xx:xx')停止运行这个配置项(一般用于实时导入),值为'00:00'或没有该字段时默认全天运行

交易流水文件自定义导入 AMS

解析迅投流水文件为 DataFrame 格式

python
rqamsc.parse_xuntou_to_df(file_path: str) -> pd.DataFrame

解析 CTP 期货期权 txt 格式流水文件为 DataFrame 格式

python
rqamsc.parse_ctp_txt_to_df(file_path: str) -> pd.DataFrame

解析财通期货期权 txt 格式流水文件为 DataFrame 格式

python
rqamsc.parse_caitong_txt_to_df(file_path: str) -> pd.DataFrame

可将上述方法调用后的解析结果自定义处理后使用 insert_product_trades 导入 AMS, 如下示例

python
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 中的对应产品。

安装

bash
pip install rqalpha-mod-ams>=1.1.1 --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/

修改配置让 rqalpha 支持 upload 上传交易流水的功能

bash
rqalpha mod enable ams

查看 upload 的参数

bash
rqalpha upload -h

使用案例

bash
rqalpha upload --ams-product https://user:name@www.ricequant.com/workspace/product trades.csv

mod-ams 有如下配置:

当回测需要使用时,在 config 中的 mod 配置即可,如下

python
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)

持仓单管理(DMA 场景)

给资产单元导入持仓单

python
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_namestr需要导入流水的产品 id 或产品名称
asset_unit_idstr or ObjectId需要导入的资产单元 id
file_path_or_bytesstr or bytes or BufferedReader需要导入流水的文件地址 或 字节码 或 文件句柄
brokerstr需要导入的持仓单模板类型,目前支持模板如下(默认为 RQ 通道):
1. RQ 通道: ricequant
2. 中信 DMA: citic_dma
3. 中金 DMA: cicc_dma
4. 招商 DMA: cms_dma
  • 返回
字段类型是否必须说明
confirmation_idstr凭证 id
datestr持仓单日期
effect_countint该条持仓单导入情况 0 表示未导入, 1 表示已导入
err_msglist持仓单中具体每条持仓导入失败情况

获取资产单元持仓单

python
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_namestr产品 id 或产品名称
asset_unit_idstr资产单元 id
start_dateint,str,datetime,date开始日期
end_dateint,str,datetime,date结束日期
  • 返回
字段类型是否必须说明
positions_statement_idstr持仓单 id
datestr持仓单日期
file_namestr持仓单文件名
positionsList[Dict]持仓详情
    asset_classstr资产类型
    directionstr持仓方向
    order_book_idstr资产代码
    symbolstr资产名称
    quantityfloat持仓数量

删除资产单元持仓单

python
rqamsc.delete_positions_statement(
        product_id_or_name: str, asset_unit_id: str, positions_statement_ids: List[Union[str, ObjectId]]
) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 id 或产品名称
asset_unit_idstr资产单元 id
positions_statement_idsList[str, ObjectId]持仓单 id 可参考获取持仓中返回结果
  • 返回
字段类型是否必须说明
effect_countint删除数量(每条持仓记 1)

估值表管理

查看产品已导入估值表信息

python
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_namestr产品 id 或产品名称
start_dateint,str,datetime,date开始日期,不填默认产品开始日期
end_dateint,str,datetime,date结束日期,不填则表示今日
  • 返回
参数类型是否必须说明
datestr估值表日期
file_namestr估值表名称
valuation_report_idstr估值表 id
python
# 返回数据示例:
result = [
    {
        'date': '2022-03-25',
        'file_name': '估值表文件名称',
        'valuation_report_id': '6243c819894ef8b1047b99d9'
    }
]

给产品导入估值表

python
rqamsc.upload_valuation_reports(
        product_id_or_name: str, files_or_directories: Union[List[str], str, List[BytesIO], BytesIO, Dict, List[Dict]],
        show_upload_progress: bool = False, replace_dates: List[optional_datetime_like] = None
) -> List[Dict]
  • 参数
参数类型是否必须说明
product_id or namestr产品 id 或产品名称
files_or_directorieslist[str], str, list[BytesIO], BytesIO, list[dict], dict可传以下类型:
1. 文件(夹)路径列表
2. 单个文件(夹)路径的字符 3. BytesIO 对象(该对象本身不存储文件名,若需要系统保存文件名,可参考下方操作)
4. 由 BytesIO 对象组成的列表
5. 字典,需要的字段可参考 估值表对象, 代码示例可参考 使用 openapi 方式给产品导入估值表
6. 由字典构成的列表
show_upload_progressbool是否显示批量上传估值表文件的进度(一批为 10 个文件, 默认否)
replace_dateslist[datetime_like]列表中日期表示在该日期已有估值表的情况下仍然覆盖
eg: ['20150101', '2015-01-01', datetime.date(2015, 1, 1), datetime.datetime(2015, 1, 1)]

BytesIO 对象设置文件名称

python
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)
  • 返回
字段类型是否必须说明
filestr估值表文件名
err_msgUnion[List[str], str]估值表识别错误提示
confirmation_idstr凭证 id

给产品导入估值表(正在弃用)

python
rqamsc.upload_valuation_reports_in_directories(
        product_id_or_name: str, files_or_directories: Union[List[str], str, List[BytesIO], BytesIO, Dict, List[Dict]],
        show_upload_progress: bool = False, replace_dates: List[optional_datetime_like] = None
) -> List[Dict]

可参考 给产品导入估值表

删除产品已导入的估值表

python
rqamsc.delete_product_valuation_reports(
        product_id_or_name: str, deleted_dates: Union[List[datetime_like], datetime_like]
) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 id 或产品名称
deleted_datesdatetime_like or List[datetime_like]列表中需要指定每个要删除的估值表的日期,若需要删除某个时间区间内的所有估值表,可使用如下方式:
list(pandas.date_range('2023-01-01', '20230201'))
  • 返回
字段类型是否必须说明
effect_countint删除估值表的数量

下载已导入的估值表文件

python
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_namestr产品 id 或产品名称
report_save_pathstr文件保存地址
start_dateint,str,datetime,date开始日期,不填默认产品开始日期
end_dateint,str,datetime,date结束日期,不填则表示今日
  • 返回
字段类型是否必须说明
successfulList[Dict]下载成功的估值表信息
    file_namestr估值表文件名称
failedList[Dict]下载失败的估值表信息
    file_namestr估值表文件名称
    reasonstr下载失败原因

本地估值表文件自动化导入

python
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 脚本运行
python
import rqamsc
rqamsc.init(username='AMS账号', password='AMS密码')   # 具体可参考rqamsc的初始化
rqamsc.choose_workspace('AMS工作空间名称或id')
rqamsc.run_vr_importer()    # 程序启动后默认读取程序工作目录下的 config.yaml 文件, 有关配置文件的内容可参考下方
  • 方式二:命令行启动
commandline
run_vr_importer -u AMS账号 -p AMS密码 -w 工作空间名称或id
  • 以下为该服务启动时所需的函数/命令参数
方式一参数方式二参数是否必须说明
user_name-u / --user_nameAMS 账号,若像方式一中已初始化过则无需指定,方式二则必须指定
password-p / --passwordAMS 密码,若像方式一中已初始化过则无需指定,方式二则必须指定
workspace-w / --workspace需要导入的流水所在产品的工作空间名称或 id,若像方式一中已初始化过则无需指定,方式二则必须指定
config_file-c / --config_file配置文件的绝对路径,默认为程序工作目录下的 config.yaml, 该配置文件需要记录估值表文件和产品的对应关系及导入行为, 有关配置内容详情可见下方
mode-m / --mode导入模式,默认为全量导入(full), 可指定增量导入(increment),即筛选出最近七个交易日的估值表文件导入来节省运行时间
ams_uri--ams_uriAMS 网页端地址,默认为线上,私有化部署用户可按实际情况指定
ssl_verify--ssl_verify是否进行安全检测,线上默认为 True, 私有化部署若未使用 https 需置为 False
  • 服务运行需要依赖 config.yaml 配置文件来明确要导入的流水文件与产品之间的关系,以及可以指定一些导入设置,其示例及参数如下
yaml
path: D:\估值表文件目录
product_vr_map:
  - product: 产品1 # AMS中产品名称
    full_name: xxxx一号证券投资基金委托资产估值表 # 注意:1.该字段与AMS产品的"产品全称"字段保持一致 2. 该字段包含于估值表文件名称中且区别与其他估值表文件名称
    is_overwrite: true # 是否采用估值表对账中自动覆盖方式(true则表示使用估值表文件作为产品当天的估值结果)
  - product: 产品2
    full_name: xxxx二号证券投资基金委托资产估值表

模拟交易

获取所有模拟交易通道列表

python
rqamsc.list_paper_trading_channels() -> List[Dict]
  • 返回

模拟交易通道列表,每个通道包含以下字段:

字段类型是否必须说明
product_idstr产品 ID
_idstr通道 ID
stock_min_feefloat股票最小手续费
stock_commission_ratefloat股票佣金费率
loan_ratefloat融资利率
margin_ratefloat融券利率
futures_float_ratefloat期货佣金上浮比例
futures_float_amountfloat期货佣金上浮金额
slippage_ratefloat成交价劣化比例
slippage_ticksfloat成交价劣化跳数

创建或更新模拟交易通道

python
rqamsc.insert_or_update_paper_trading_channels(
    product_ids_or_names: Union[str, List[str]],
    channel_config: Union[PaperTradingChannel, Dict]
) -> Dict
  • 参数
参数类型是否必须说明
product_ids_or_namesstr or List[str]产品 ID 或产品名,可以是单个字符串或字符串列表
channel_configPaperTradingChannel or DictPaperTradingChannel 对象或字典,包含交易通道配置信息
  • 创建 PaperTradingChannel 对象

你可以通过两种方式创建模拟交易通道配置:

方式一:使用字典

python
channel_config = {
    "stock_min_fee": 5.0,              # 股票最小手续费
    "stock_commission_rate": 0.0003,   # 股票佣金费率
    "loan_rate": 0.03,                 # 融资利率
    "margin_rate": 1.0,                # 融券利率
    "futures_float_rate": 0.0001,      # 期货佣金上浮比例(与期货佣金上浮金额二选一)
    "slippage_rate": 0.001             # 成交价劣化比例(与成交价劣化跳数二选一)
}

方式二:使用 PaperTradingChannel 对象

python
from rqamsc import PaperTradingChannel

# 创建 PaperTradingChannel 对象
channel_config = PaperTradingChannel(
    stock_min_fee=5.0,              # 股票最小手续费
    stock_commission_rate=0.0003,   # 股票佣金费率
    loan_rate=0.03,                 # 融资利率
    margin_rate=1.0,                # 融券利率
    futures_float_rate=0.0001,      # 期货佣金上浮比例(与期货佣金上浮金额二选一)
    slippage_rate=0.001             # 成交价劣化比例(与成交价劣化跳数二选一)
)

# 或者从字典创建
channel_dict = {
    "stock_min_fee": 5.0,
    "stock_commission_rate": 0.0003,
    "loan_rate": 0.03,
    "margin_rate": 1.0,
    "futures_float_rate": 0.0001,
    "slippage_rate": 0.001
}
channel_config = PaperTradingChannel.from_dict(channel_dict)
  • channel_config 字段说明
字段类型是否必须说明
stock_min_feefloat股票最小手续费
stock_commission_ratefloat股票佣金费率
loan_ratefloat融资利率
margin_ratefloat融券利率
futures_float_ratefloat期货佣金上浮比例(与 期货佣金上浮金额 二选一)
futures_float_amountfloat期货佣金上浮金额(与 期货佣金上浮比例 二选一)
slippage_ratefloat成交价劣化比例(与 成交价劣化跳数 二选一)
slippage_ticksfloat成交价劣化跳数(与 成交价劣化比例 二选一)
  • 使用示例
python
# 为单个产品创建模拟交易通道
result = rqamsc.insert_or_update_paper_trading_channels(
    product_ids_or_names="我的产品",
    channel_config={
        "stock_min_fee": 5.0,
        "stock_commission_rate": 0.0003,
        "loan_rate": 0.03,
        "margin_rate": 1.0,
        "futures_float_rate": 0.0001,
        "slippage_rate": 0.001
    }
)

# 为多个产品创建模拟交易通道
result = rqamsc.insert_or_update_paper_trading_channels(
    product_ids_or_names=["产品A", "产品B", "产品C"],
    channel_config=PaperTradingChannel(
        stock_min_fee=5.0,
        stock_commission_rate=0.0003,
        loan_rate=0.03,
        margin_rate=1.0,
        slippage_ticks=2
    )
)
  • 返回
字段类型是否必须说明
effect_countint修改通道的数量
new_idslist[str]新增通道的 id 列表
submit_recompute_countint发生重算的通道数量

删除模拟交易通道

python
rqamsc.delete_paper_trading_channel(product_id_or_name: str, channel_id: str) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 ID 或产品名
channel_idstr通道 ID
  • 返回
字段类型是否必须说明
effect_countint删除通道的数量

重新计算模拟交易通道

python
rqamsc.recompute_paper_trading_channel(product_id_or_name: str, channel_id: str) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 ID 或产品名
channel_idstr通道 ID
  • 返回
字段类型是否必须说明
submit_recompute_countint发生重算的通道数量

上传模拟交易文件

python
rqamsc.upload_paper_trading_file(
    product_id_or_name: str,
    channel_id: str,
    file_path_or_df: Union[str, pandas.DataFrame],
    filename: str = None
) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 ID 或产品名
channel_idstr通道 ID
file_path_or_dfstr or pandas.DataFrame文件路径字符串或 DataFrame 对象
filenamestr当 file_path_or_df 是 DataFrame 时必须提供文件名,格式参考如下:
1. 交易单:产品名称-20250430.csv
2. 持仓单:产品名称-20250430-1300-1330-VWAP.csv
  • 返回
字段类型是否必须说明
new_idstr新增信号的 ID
  • 使用示例

方式一:通过文件路径上传模拟交易文件

python
import rqamsc

rqamsc.init('username', 'password')
rqamsc.choose_workspace('需要指定的工作空间')

# 通过文件路径上传模拟交易文件
result = rqamsc.upload_paper_trading_file(
    product_id_or_name='我的模拟交易产品',
    channel_id='channel_001',
    file_path_or_df='/path/to/your/trading_signals.csv'
)

print(f'上传成功,新增信号ID: {result["new_id"]}')

方式二:通过 DataFrame 上传模拟交易数据

python
import pandas as pd
import rqamsc
from datetime import datetime

rqamsc.init('username', 'password')
rqamsc.choose_workspace('需要指定的工作空间')

# 创建模拟交易信号数据
trading_data = pd.DataFrame({
    'order_book_id': ['000001.XSHE', '000002.XSHE', '600036.XSHG'],
    'target_weight': [0.5, -0.3, 0.1]
})

# 通过 DataFrame 上传模拟交易文件
result = rqamsc.upload_paper_trading_file(
    product_id_or_name='我的模拟交易产品',
    channel_id='channel_001',
    file_path_or_df=trading_data,
    filename='我的模拟交易产品-20250430-0930-1030-TWAP.csv'  # DataFrame 方式必须提供文件名
)

print(f'上传成功,新增信号ID: {result["new_id"]}')

获取模拟交易信号列表

python
rqamsc.list_paper_trading_signals(
    product_id_or_name: str,
    start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None
) -> List[Dict]
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 ID 或产品名
start_dateint,str,datetime,date开始日期
end_dateint,str,datetime,date结束日期
  • 返回

模拟交易信号列表,每个信号包含以下字段:

字段类型是否必须说明
_idstr信号 ID
filenamestr文件名
datestr信号日期

删除模拟交易信号

python
rqamsc.delete_paper_trading_signals(
    product_id_or_name: str,
    start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None
) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 ID 或产品名
start_dateint,str,datetime,date开始日期,不填则删除所有符合条件信号
end_dateint,str,datetime,date结束日期,不填则删除所有符合条件信号
  • 返回
字段类型是否必须说明
effect_countint删除的信号数量

获取模拟交易信号解析结果详情

python
rqamsc.get_paper_trading_signal_details(product_id_or_name: str, signal_id: str) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品 ID 或产品名
signal_idstr信号 ID
  • 返回
字段子字段类型是否必须说明
_idstr信号 ID
datestr交易日期
deal_timestr成交时间
matching_resultslist[dict]匹配结果列表
asset_classstr资产类别
directionstr交易方向(long/short)
order_book_idstr合约 ID
symbolstr证券名称
transaction_typestr交易类型
statusstr订单状态
deal_datetimestr成交时间
pricefloat成交价格
quantityint成交数量
commissionfloat佣金
taxfloat税费
  • 返回示例
json
{
  "signal_id": "682ec9a6502b13edcd6d3bd4",
  "date": "2025-04-30",
  "deal_time": "10:30:00",
  "matching_results": [
    {
      "asset_class": "stock",
      "direction": "long",
      "order_book_id": "600036.XSHG",
      "symbol": "招商银行",
      "transaction_type": "sell",
      "status": "订单成交",
      "deal_datetime": "2025-04-30 10:00:00",
      "price": 40.876083,
      "quantity": 500,
      "commission": 122.628249,
      "tax": 10.21902075
    }
  ]
}

持仓及衍生指标

获取产品或产品组单日头寸

python
rqamsc.get_balance(
        product_like_id_or_name: str, dt: optional_datetime_like = None, **kwargs
) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
dtint,str,datetime,date日期,未来时间或不填则表示获取实时持仓
  • 返回
字段子字段类型是否必须说明
unitsfloat份额
unit_net_valuefloat单位净值
acc_unit_net_valuefloat累计净值
adjusted_net_valuefloat复权净值
total_assetsfloat总资产
total_equityfloat净资产
daily_pnlfloat当日盈亏
daily_returnsfloat当日盈亏率
risk_exposurefloat风险总敞口
net_risk_exposurefloat风险净敞口
positionslist[dict]持仓
order_book_idstr合约 id
symbolstr合约名称
asset_classstr合约资产类型
directionstr持仓方向
quantityfloat持仓数量
avg_pricefloat开仓均价
avg_price_include_feefloat开仓均价(含费)
fair_valuefloat公允价格
market_valuefloat市值
clean_price_market_valuefloat净价市值
floating_pnlfloat浮动盈亏
floating_pnl_percentagefloat浮动盈亏率
accrued_interestfloat应记利息
exchange_ratefloat汇率
currencystr币种
bonus_share_receivablefloat应收红股
asset_unit_idstr资产单元 id
childrenlist[dict]对应资产单元下的子持仓,结构可直接参考产品头寸顶层的 positions

获取产品或产品组指标

python
rqamsc.get_indicators(
        product_like_id_or_name: str,
        start_date: optional_datetime_like = None,
        end_date: optional_datetime_like = None,
        **kwargs
) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
start_dateint,str,datetime,date开始日期,不填表示产品(组)开始日期
end_dateint,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: 年度风险指标
  • 返回
字段子字段孙字段类型是否必须
daily_risk / weekly_risk / monthly_riskdict
alphafloat
information_ratiofloat
betafloat
sharpefloat
excess_sharpefloat
annual_tracking_errorfloat
annual_downside_riskfloat
annual_volatilityfloat
arithmetic_excess_annual_returnfloat
geometric_excess_annual_returnfloat
excess_annual_volatilityfloat
max_drawdownfloat
geometric_excess_max_drawdownfloat
annual_riskdict
daily_risk / weekly_risk / monthly_riskdict
alphafloat
information_ratiofloat
betafloat
correlationfloat
sharpefloat
excess_sharpefloat
dividend_ratiofloat
annual_tracking_errorfloat
annual_downside_riskfloat
excess_annual_returnfloat
annual_volatilityfloat
arithmetic_excess_annual_returnfloat
geometric_excess_annual_returnfloat
excess_annual_volatilityfloat
max_drawdownfloat
geometric_excess_max_drawdownfloat
total_returnsfloat
total_annual_returnsfloat
total_geometric_excess_returnfloat
total_arithmetic_excess_returnfloat
returns_summarydict
totalfloat
arithmetic_excessfloat
geometric_excessfloat
annualfloat
annual_oneside_turnover_ratefloat
this_weekfloat
this_monthfloat
this_quarterfloat
this_yearfloat
asset_serieslist[dict]
daily / weekly /monthlydict
datestr
daily_returnsfloat
cumulative_returnsfloat
benchmark_serieslist[dict]
dailydict
datestr
daily_returnsfloat
cumulative_returnsfloat
weekly / monthlydict
datestr
benchmark_returnsfloat
benchmark_cumulative_returnsfloat
excess_returnslist[dict]
daily / weekly /monthlydict
datestr
daily_arithmetic_excess_returnsfloat
cumulative_arithmetic_excess_returnsfloat
cumulative_geometric_excess_returnsfloat
monthly_returnslist[dict]
datestr
portfolio_returnsfloat
benchmark_returnsfloat
arithmetic_excess_returnsfloat
geometric_excess_returnsfloat
childrenlist[dict]
datestr
portfolio_returnsfloat
benchmark_returnsfloat
arithmetic_excess_returnsfloat
geometric_excess_returnsfloat
childrenlist[dict]
children.datestr
children.portfolio_returnsfloat
children.benchmark_returnsfloat
children.arithmetic_excess_returnsfloat
children.geometric_excess_returnsfloat
leverage_ratiolist[dict]
daily / weekly / monthlydict
datestr
total_assetfloat
total_equityfloat
leverage_ratiofloat
ashares_market_valuedict
sh_market_valuefloat
sz_market_valuefloat
sh_market_value_prevfloat
sz_market_value_prevfloat

获取产品或产品组时序指标

python
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,
        **kwargs
) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
start_dateint,str,datetime,date开始日期,不填表示昨日
end_dateint,str,datetime,date结束日期,不填则表示昨日
indicatorsList[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
  • 返回
字段子字段类型是否必须说明
指标名称dict
日期strkey 为日期, value 所对应指标当日的值

e.g.

python
{
    "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
    }
    ...
}

获取产品或产品组实时信息

python
rqamsc.get_asset_snapshot(
        product_like_id_or_name: str, fields: List[str] = None, flatten_positions=True, **kwargs
) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)id 或名称
fieldsList[str]除默认字段外,可指定返回一些额外字段如:
1. risk_exposure: 风险总敞口
2. net_risk_exposure: 风险净敞口
3. excess_returns: 超额收益
flatten_positionsbool是否将持仓平铺, 默认平铺
  • 返回
字段子字段类型是否必须说明
datestr日期
namestr产品名称
unit_net_valuefloat单位净值
unitsfloat份额
prev_unit_net_valuefloat昨日净值
total_assetsfloat总资产
total_equityfloat净资产
total_liabilitiesfloat总负债
daily_pnlfloat当日盈亏
daily_returnsfloat当日盈亏率
long_market_valuefloat多头市值
short_market_valuefloat空头市值
capital_efficiencyfloat资金使用率(期货杠杆率)
returns_from_establishfloat成立以来回报率
pnl_this_yearfloat今年以来盈亏(元)
returns_this_yearfloat今年以来盈亏(%)
risk_exposurefloat风险总暴露
net_risk_exposurefloat风险净敞口
long_leveragefloat多头杠杆倍数
long_net_risk_exposurefloat多头净暴露
benchmark_returnsfloat基准收益率
excess_returnsfloat超额收益率
positionslist[dict]持仓明细
order_book_idstr合约 id
symbolstr合约名称
asset_classstr合约资产类型
directionstr持仓方向
quantityfloat持仓数量
price_changefloat涨跌
price_change_percentagefloat涨跌幅度
avg_pricefloat开仓均价
avg_price_include_feefloat开仓均价(含费)
fair_valuefloat公允价格
price_limitoptional[str]是否涨跌停: 涨停(limit_up); 跌停(limit_down); 未发生涨跌停则为空
has_settlementbool是否已更新结算价
market_valuefloat市值
clean_price_market_valuefloat净价市值
floating_pnlfloat浮动盈亏
floating_pnl_percentagefloat浮动盈亏率
accrued_interestfloat应记利息
exchange_ratefloat汇率
currencystr币种
bonus_share_receivablefloat应收红股
update_timestr公允价更新时间

获取产品或产品组头寸序列

python
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, **kwargs
) -> List[Dict]
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
start_dateint,str,datetime,date开始日期
end_dateint,str,datetime,date结束日期,不填则表示今日
fieldsList[str]除必须字段可选择返回的持仓字段,不填则仅返回必须的持仓字段,字段值可参考下述返回的持仓字段
  • 返回

List 中字典结构如下

字段子字段类型是否必须说明
datestr日期
total_assetsfloat总资产
total_equityfloat净资产
daily_pnlfloat当日盈亏
daily_returnsfloat当日盈亏率
positionslist[dict]持仓明细
order_book_idstr合约 id
symbolstr合约名称
asset_classstr合约资产类型
directionstr持仓方向
quantityfloat持仓数量
market_valuefloat市值
price_changefloat涨跌
price_change_percentagefloat涨跌幅度
avg_pricefloat开仓均价
avg_price_include_feefloat开仓均价(含费)
fair_valuefloat公允价格
clean_price_market_valuefloat净价市值
daily_pnlfloat当日盈亏
daily_pnl_ratefloat当日盈亏率
floating_pnlfloat浮动盈亏
floating_pnl_percentagefloat浮动盈亏率
accrued_interestfloat应记利息
bonus_share_receivablefloat应收红股
acc_dividend_receivedfloat累计股息收入
acc_interest_receivedfloat累计利息收入

获取产品或产品组净值周度报告

python
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, **kwargs
) -> str

参数

参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
report_save_pathstr报告 excel 保存路径(到文件夹)
start_dateint,str,datetime,date开始日期
end_dateint,str,datetime,date结束日期

返回

成功的字符信息 or 抛出错误

绩效归因

获取产品或产品组绩效归因

python
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_namestr产品(组)的 id 或名称
start_dateint,str,datetime,date开始日期
end_dateint,str,datetime,date结束日期
benchmark_idUnion[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 即可
templatePATemplate分析模板 可参考 PATemplate,默认为 brinson 归因
industry_standardstr行业分类(默认为申万一级):
1. 申万一级: sws
2. 中信一级: citics
3. 申万二级: sws_second
4. 中信二级: citics_second
  • 返回
字段类型是否必须说明
attributionDict
  brinsonDictbrinson 归因结果
    industryfloat
    allocation_riskfloat
    selection_riskfloat
    interaction_riskfloat
    allocation_returnfloat
    portfolio_weightfloat
    benchmark_weightfloat
    selection_returnfloat
  factor_attributionDict因子贡献
    typestr
    factorsList[Dict]
      factorstr
      portfolio_returnfloat
      portfolio_exposurefloat
      benchmark_returnfloat
      benchmark_exposurefloat
      portfolio_riskfloat
      benchmark_riskfloat
      active_riskfloat
      active_exposurefloat
      active_returnfloat
  factor_exposureDict因子暴露度
    factorstr
    dataList[Dict]
      datestr
      portfoliofloat
      normalizedfloat
      activefloat
  sensitivityDict敏感性
    datestr
    dataList[Dict]
      factorstr
      portfoliofloat
      t_statisticsfloat
return_decompositionList[Dict]
  factorfloat
  valuefloat
  chlidrenOptional[List[Dict]]拆解后的子收益,结构同父节点

获取产品或产品组收益拆解

python
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_namestr产品(组)的 id 或名称
start_dateint,str,datetime,date开始日期
end_dateint,str,datetime,date结束日期
benchmark_idUnion[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 即可
  • 返回

列表内元素结构如下

字段类型是否必须说明
  factorfloat
  valuefloat
  chlidrenOptional[List[Dict]]拆解后的子收益,结构同父节点

投资驾驶舱

批量获取产品或产品组概览指标

python
rqamsc.get_investment_overview_summary_indicator(
    product_like_ids_or_names: Union[List[str], str], start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None, **kwargs
) -> List
  • 参数
参数类型是否必须说明
product_like_ids_or_nameslist[str] or str产品(组)的名字或 id,单个传字符串,多个传列表
start_dateint,str,datetime,date分析开始日期,不填默认取三个月前的日期
end_dateint,str,datetime,date分析结束日期,不填默认为当天
  • 返回

列表内字典元素结构如下

字段层级类型是否必须说明
idstr产品或产品组 id
namestr产品或产品组名称
start_datestr产品开始日期
net_valuenull or float最新净值
annual_twoside_turnover_ratefloat年化双边换手率
period_acc_returnsfloat区间回报
total_geometric_excess_returnfloat总几何超额收益
dailydict日频指标
  alphafloat阿尔法
  betafloat贝塔
  sharpefloat夏普率
  excess_sharpefloat超额夏普率
  max_drawdownfloat最大回撤
  annual_downside_riskfloat年化下行风险
  information_ratiofloat信息比率
  geometric_excess_annual_returnfloat几何超额年化收益率
  arithmetic_excess_annual_returnfloat算术超额年化收益率
  annual_volatilityfloat年化波动率
  excess_annual_volatilityfloat超额年化波动率
  annual_tracking_errorfloat年化跟踪误差
  geometric_excess_max_drawdownfloat几何超额最大回撤
  total_returnsfloat总收益率
  total_geometric_excess_returnfloat总几何超额收益
  total_arithmetic_excess_returnfloat总算术超额收益
  total_annual_returnsfloat总年化收益率
  net_cash_infloat净投入
  period_pnlfloat区间盈亏
  equity_net_exposurefloat权益净敞口
  period_buy_amountfloat区间买入金额
  period_sell_amountfloat区间卖出金额
  cashfloat现金
  total_equityfloat净资产
  period_acc_returnsfloat区间累计收益率
  cn_stock_market_valuefloatA 股总市值
  hk_stock_market_valuefloat港股总市值
weeklydict周频指标
  alphafloat阿尔法
  betafloat贝塔
  sharpefloat夏普率
  excess_sharpefloat超额夏普率
  max_drawdownfloat最大回撤
  annual_downside_riskfloat年化下行风险
  information_ratiofloat信息比率
  geometric_excess_annual_returnfloat几何超额年化收益率
  arithmetic_excess_annual_returnfloat算术超额年化收益率
  annual_volatilityfloat年化波动率
  excess_annual_volatilityfloat超额年化波动率
  annual_tracking_errorfloat年化跟踪误差
  geometric_excess_max_drawdownfloat几何超额最大回撤
  total_returnsfloat总收益率
  total_geometric_excess_returnfloat总几何超额收益
  total_arithmetic_excess_returnfloat总算术超额收益
  total_annual_returnsfloat总年化收益率
monthlydict月频指标(字段与 weekly 相同)
  • 返回示例
python
[
    {
        "id": "67d945ed3fc21df7d82acc4b",
        "name": "测试产品A",
        "start_date": "2024-01-01",
        "net_value": 1.2345,
        "annual_twoside_turnover_rate": 2.5,
        "period_acc_returns": 0.1234,
        "total_geometric_excess_return": 0.0523,
        "daily": {
            "alpha": 0.0234,
            "beta": 0.9876,
            "sharpe": 1.2345,
            "excess_sharpe": 1.1234,
            "max_drawdown": -0.0567,
            "annual_downside_risk": 0.0789,
            "information_ratio": 0.8765,
            "geometric_excess_annual_return": 0.0678,
            "arithmetic_excess_annual_return": 0.0712,
            "annual_volatility": 0.1523,
            "excess_annual_volatility": 0.0834,
            "annual_tracking_error": 0.0923,
            "geometric_excess_max_drawdown": -0.0234,
            "total_returns": 0.2345,
            "total_geometric_excess_return": 0.0523,
            "total_arithmetic_excess_return": 0.0567,
            "total_annual_returns": 0.1896,
            "net_cash_in": 10000000.0,
            "period_pnl": 1234567.89,
            "equity_net_exposure": 0.95,
            "period_buy_amount": 2000000.0,
            "period_sell_amount": 1500000.0,
            "cash": 500000.0,
            "total_equity": 12345678.9,
            "period_acc_returns": 0.1234,
            "cn_stock_market_value": 11000000.0,
            "hk_stock_market_value": 800000.0
        },
        "weekly": {
            "alpha": 0.0223,
            "beta": 0.9823,
            "sharpe": 1.1987,
            "excess_sharpe": 1.0876,
            "max_drawdown": -0.0534,
            "annual_downside_risk": 0.0756,
            "information_ratio": 0.8234,
            "geometric_excess_annual_return": 0.0634,
            "arithmetic_excess_annual_return": 0.0689,
            "annual_volatility": 0.1467,
            "excess_annual_volatility": 0.0789,
            "annual_tracking_error": 0.0867,
            "geometric_excess_max_drawdown": -0.0212,
            "total_returns": 0.2234,
            "total_geometric_excess_return": 0.0498,
            "total_arithmetic_excess_return": 0.0534,
            "total_annual_returns": 0.1823
        },
        "monthly": {
            // 字段结构与weekly相同
        }
    }
]

批量获取产品或产品组回报趋势

python
rqamsc.get_investment_overview_returns_series(
    product_like_ids_or_names: Union[List[str], str], benchmark_id: str, start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None, **kwargs
) -> List
  • 参数
参数类型是否必须说明
product_like_ids_or_nameslist[str] or str产品(组)的名字或 id,单个传字符串,多个传列表
benchmark_idstr基准合约代码或自定义基准 id
start_dateint,str,datetime,date分析开始日期,不填默认取三个月前的日期
end_dateint,str,datetime,date分析结束日期,不填默认为当天
  • 返回

列表内字典元素结构如下

字段层级类型是否必须说明
idstr产品/产品组/基准的 id
typestr类型(benchmark/product/group)
namestr产品/产品组/基准名称
dailylist[dict]日频时序数据
  datestr日期
  cumulative_returnsfloat累计收益率
  daily_returnsfloat日收益率
  geometric_excess_cumulative_returnsfloat几何超额累计收益率(type=product/group 时存在)
  excess_earningsfloat超额收益率(type=product/group 时存在)
weeklylist[dict]周频时序数据
  datestr日期
  cumulative_returnsfloat累计收益率
  daily_returnsfloat日收益率(仅 type=benchmark 时存在)
  geometric_excess_cumulative_returnsfloat几何超额累计收益率(仅 type=product/group 时存在)
monthlylist[dict]月频时序数据(字段结构与 weekly 相同)
  • 返回示例
python
[
    {
        "id": "000300.XSHG",
        "type": "benchmark",
        "name": "沪深300",
        "daily": [
            {
                "date": "2025-07-01",
                "daily_returns": 0.0019565917768269436,
                "cumulative_returns": 0.0019565917768269436
            }
        ],
        "weekly": [
            {
                "date": "2025-07-01",
                "daily_returns": 0.0019565917768269436,
                "cumulative_returns": 0.0019565917768269436
            }
        ],
        "monthly": [
            {
                "date": "2025-07-01",
                "daily_returns": 0.0019565917768269436,
                "cumulative_returns": 0.0019565917768269436
            }
        ]
    },
    {
        "id": "67d945ed3fc21df7d82acc4b",
        "type": "product",
        "name": "测试产品A",
        "daily": [
            {
                "date": "2025-07-01",
                "cumulative_returns": -0.9934833520008146,
                "geometric_excess_cumulative_returns": -0.993496077522052,
                "daily_returns": -0.9934833520008146,
                "excess_earnings": -0.9954399437776416
            }
        ],
        "weekly": [
            {
                "date": "2025-07-01",
                "cumulative_returns": -0.9934833520008146,
                "geometric_excess_cumulative_returns": -0.993496077522052
            }
        ],
        "monthly": [
            {
                "date": "2025-07-01",
                "cumulative_returns": -0.9934833520008146,
                "geometric_excess_cumulative_returns": -0.993496077522052
            }
        ]
    },
]

批量获取产品或产品组资产规模走势

python
rqamsc.get_investment_overview_asset_capital_size(
    product_like_ids_or_names: Union[List[str], str], start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None, **kwargs
) -> List
  • 参数
参数类型是否必须说明
product_like_ids_or_nameslist[str] or str产品(组)的名字或 id,单个传字符串,多个传列表
start_dateint,str,datetime,date分析开始日期,不填默认取三个月前的日期
end_dateint,str,datetime,date分析结束日期,不填默认为当天
  • 返回

列表内字典元素结构如下

字段类型是否必须说明
datestr日期
asset_classesstr日收益了
  asset_class_namestr分类名称
  valuestr资产规模

批量获取产品或产品组资产配置

python
rqamsc.get_investment_overview_asset_allocation(
    product_like_ids_or_names: Union[List[str], str], start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None, **kwargs
) -> Dict
  • 参数
参数类型是否必须说明
product_like_ids_or_nameslist[str] or str产品(组)的名字或 id,单个传字符串,多个传列表
start_dateint,str,datetime,date分析开始日期,不填默认取三个月前的日期
end_dateint,str,datetime,date分析结束日期,不填默认为当天
  • 返回

数据结构参考如下, 字典第一层 key 为资产大类,下一层 key 为细分类型,值为权重

python
{
        "现金": {
            "活期存款": 0.044613278988563695
        },
        "股票": {
            "主板": 0.9265354318110066,
            "创业板": 0.02864459520020655
        },
        "期货": {
            "商品期货": 0.010632638580291408
        }
    }

批量获取产品或产品组超额收益相关性

python
rqamsc.get_investment_overview_excess_correlation(
    product_like_ids_or_names: Union[List[str], str], benchmark_id: str, start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None, **kwargs
) -> Dict
  • 参数
参数类型是否必须说明
product_like_ids_or_nameslist[str] or str产品(组)的名字或 id,单个传字符串,多个传列表
benchmark_idstr基准合约代码或自定义基准 id
start_dateint,str,datetime,date分析开始日期,不填默认取三个月前的日期
end_dateint,str,datetime,date分析结束日期,不填默认为当天
  • 返回

字典结构如下

字段层级类型是否必须说明
dailydict日频相关性矩阵
  产品名称 Adict产品 A 与其他产品的相关性字典
    产品名称 Bfloat产品 A 与产品 B 的相关系数 (-1 到 1 之间,对角线为 1.0)
weeklydict周频相关性矩阵(字段结构与 daily 相同)
monthlydict月频相关性矩阵(字段结构与 daily 相同)
  • 返回示例
python
{
    "daily": {
        "测试产品A": {
            "测试产品A": 1.0,
            "测试产品B": 0.7234,
        },
        "测试产品B": {
            "测试产品A": 0.7234,
            "测试产品B": 1.0,
        },
    },
    "weekly": {
        "测试产品A": {
            "测试产品A": 1.0,
            "测试产品B": 0.7156,
        },
        "测试产品B": {
            "测试产品A": 0.7156,
            "测试产品B": 1.0,
        },
    },
    "monthly": {
        "测试产品A": {
            "测试产品A": 1.0,
            "测试产品B": 0.7089,
        },
        "测试产品B": {
            "测试产品A": 0.7089,
            "测试产品B": 1.0,
        },
    }
}

批量获取产品或产品组收益相关性

python
rqamsc.get_investment_overview_returns_correlation(
    product_like_ids_or_names: Union[List[str], str], start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None, **kwargs
) -> Dict
  • 参数
参数类型是否必须说明
product_like_ids_or_nameslist[str] or str产品(组)的名字或 id,单个传字符串,多个传列表
start_dateint,str,datetime,date分析开始日期,不填默认取三个月前的日期
end_dateint,str,datetime,date分析结束日期,不填默认为当天
  • 返回

字典结构如下

字段层级类型是否必须说明
dailydict日频收益相关性矩阵
  产品名称 Adict产品 A 与其他产品的相关性字典
    产品名称 Bfloat产品 A 与产品 B 的收益相关系数 (-1 到 1 之间,对角线为 1.0)
weeklydict周频收益相关性矩阵(字段结构与 daily 相同)
monthlydict月频收益相关性矩阵(字段结构与 daily 相同)
  • 返回示例

返回结构与超额收益相关性相同,请参考上方 get_investment_overview_excess_correlation 的示例。

自定义基准管理

查看自定义基准列表

python
rqamsc.list_customized_benchmarks() -> List[CustomizedBenchmark]

>>> [
    CustomizedBenchmark(
        name=固定数值基准,
        type=fixed_rates,
        workspace_id=60e8048fb79f4103f403940e,
        user_id=347418,
        remarks=None,
        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]

创建一个自定义基准

python
rqamsc.create_customized_benchmark(customized_benchmark: Union[Dict, CustomizedBenchmark]) -> CustomizedBenchmark

CustomizedBenchmark

获取某个自定义基准信息

python
rqamsc.get_customized_benchmark(customized_benchmark_id: str) -> CustomizedBenchmark
  • 参数
参数类型是否必须说明
customized_benchmark_idstr自定义基准的 id, 可通过 基准列表 获取
  • 返回

CustomizedBenchmark

更新某个自定义基准信息

python
rqamsc.update_customized_benchmark(
        customized_benchmark_id: str, customized_benchmark: Union[Dict, CustomizedBenchmark]
) -> Tuple[Dict, CustomizedBenchmark]
  • 参数
参数类型是否必须说明
customized_benchmark_idstr自定义基准的 id, 可通过 基准列表 获取
  • 返回
字段类型是否必须说明
modifiedboolean是否更新成功
CustomizedBenchmark修改后的基准对象

删除某个自定义基准

python
rqamsc.delete_customized_benchmark(customized_benchmark_id: str) -> Dict
  • 参数
参数类型是否必须说明
customized_benchmark_idstr自定义基准的 id, 可通过 基准列表 获取
  • 返回
字段类型是否必须说明
effect_countint1 表示成功, 0 表示失败

自定义合约管理

查看自定义合约列表

python
rqamsc.list_customized_instruments() -> List[CustomInstruments]
  • 返回

CustomInstruments

新增自定义合约

python
rqamsc.add_customized_instrument(customized_instrument: Union[CustomInstruments, Dict]) -> Dict
  • 参数

CustomInstruments

  • 返回
字段类型是否必须说明
customized_ins_idstr新增自定义合约的 id

获取某个自定义合约价格

python
rqamsc.get_customized_instrument_price(customized_ins_id: str) -> List[Dict]
  • 参数
参数类型是否必须说明
customized_ins_idstr自定义合约的 id
  • 返回
字段类型是否必须说明
datestr日期
valueint价格

上传更新某个自定义合约价格

python
rqamsc.upload_customized_instrument_price(customized_ins_id: str, file_path: str) -> Dict
  • 参数
参数类型是否必须说明
customized_ins_idstr自定义合约的 id
file_pathstr需要上传的价格文件路径(文件格式可参考 web 端中的模板文件)
  • 返回
字段类型是否必须说明
effect_countint成功导入的价格数量

删除某些自定义合约

python
rqamsc.delete_customized_instrument(customized_ins_id_or_list: [str, List[str], ObjectId, List[ObjectId]]) -> Dict
  • 参数
参数类型是否必须说明
customized_ins_id_or_liststr, ObjectID, list[str], list[ObjectId]自定义合约的 id, 或存有 id 的列表
  • 返回
字段类型是否必须说明
effect_countint成功删除的数量

托管事件管理

获取某个产品的托管事件列表

python
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_namestr产品名称或 id
start_datestr只获取该日期之后的托管事件,若该字段为空则不做范围限制
end_datestr只获取该日期之前的托管事件,若该字段为空则不做范围限制
  • 返回

List[CustodianEvent]

给某个产品增加托管事件

python
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_namestr产品名称或 id
custodian_event_or_listUnion[Dict, CustodianEvent, List[Dict], List[CustodianEvent]]托管事件(对象/字典) 托管事件(对象/字典) 组成的列表
  • 返回
字段类型是否必须说明
effect_countint成功导入的托管事件数量

修改产品下的一个托管事件

python
rqamsc.update_custodian_event(
        product_id_or_name: str, custodian_event: Union[Dict, CustodianEvent]
) -> Dict

关于 custodian_event 参数数据的构建可以参考 增加托管事件 api 中构建示例

  • 参数
参数类型是否必须说明
product_id_or_namestr产品名称或 id
custodian_eventUnion[Dict, CustodianEvent]托管事件(对象/字典)
  • 返回
字段类型是否必须说明
effect_countint是否修改成功(1 表示成功 0 表示失败)

删除产品的一些托管事件

python
rqamsc.delete_custodian_events(
        product_id_or_name: str, event_id_or_list: Union[ObjectId, str, List[ObjectId], List[str]]
) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品名称或 id
event_id_or_listUnion[ObjectId, str, List[ObjectId], List[str]]托管事件 id(字符/ObjectId)或托管事件 id 组成的列表
  • 返回
字段类型是否必须说明
effect_countint成功删除的托管事件数量

份额事件管理

获取某个产品的份额事件列表

python
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_namestr产品名称或 id
start_dateint,str,datetime,date只获取该日期之后的份额事件,若该字段为空则不做范围限制
end_dateint,str,datetime,date只获取该日期之前的份额事件,若该字段为空则不做范围限制
include_auto_unitsbool是否返回自动份额事件,默认为 False(只返回手工录入的份额事件)
  • 返回

List[UnitEvent]

给某个产品增加份额事件

python
rqamsc.insert_unit_events(
        product_id_or_name: str, unit_event_or_list: Union[Dict, UnitEvent, List[Dict], List[UnitEvent]]
) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品名称或 id
unit_event_or_listUnion[Dict, UnitEvent, List[Dict], List[UnitEvent]]_份额事件(对象/字典)_ 或 由其组成的列表
  • 返回
字段类型是否必须说明
effect_countint成功导入的份额事件数量
err_msgList[str]返回失败的的份额事件的报错信息

修改产品下的一个份额事件

python
rqamsc.update_unit_event(product_id_or_name: str, unit_event: Union[Dict, UnitEvent]) -> Dict

关于 unit_event 参数数据的构建可以参考 增加份额事件 api 中构建示例

  • 参数
参数类型是否必须说明
product_id_or_namestr产品名称或 id
unit_eventUnion[Dict, UnitEvent]若传对象可参考份额事件(对象)
  • 返回
字段类型是否必须说明
effect_countint是否修改成功(1 表示成功 0 表示失败)

删除产品的一些份额事件

python
rqamsc.delete_unit_events(
        product_id_or_name: str, event_id_or_list: Union[ObjectId, str, List[ObjectId], List[str]]
) -> Dict
  • 参数
参数类型是否必须说明
product_id_or_namestr产品名称或 id
event_id_or_listUnion[ObjectId, str, List[ObjectId], List[str]]托管事件 id(字符/ObjectId)或托管事件 id 组成的列表
  • 返回
字段类型是否必须说明
effect_countint成功删除的份额事件数量

自定义指标管理

获取产品或产品组下的自定义指标

python
rqamsc.get_customized_indicators(product_like_id_or_name: str) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
  • 返回字典结构如下
字段类型是否必须说明
risk_monitordict对应实时监控页面下的指标
    realtime_customized_indicatorslist[dict]如果有该指标,会在实时收益率曲线右侧另开一片区域展示
        keystr指标名称
        valuestr, int, float指标值
    history_indicatorslist[dict]对应历史净值曲线中展示的指标
        keystr指标名称
        valuestr, int, float指标值
        start_datestr开始日期
        end_datestr结束日期

具体可参考如下格式

python
{
    "risk_monitor": {   # 对应实时监控页面下的指标
        "realtime_customized_indicators": [    # 对应实时收益率曲线上方指标
            {
                "key": "对冲比例",  #  指标名称
                "value": 0.95   # 指标值
            },
            {
                "key": "策略类型",
                "value": "多空对冲"
            }
        ],
        "history_indicators": [ # 对应历史净值曲线中展示的指标
            {
                "key": "策略类型",
                "value": "多空杠杆",
                "start_date": "2024-01-01", # 开始日期
                "end_date": "2024-04-30"    # 结束日期
            },
            {
                "key": "策略类型",
                "value": "多空",
                "start_date": "2024-05-01",
                "end_date": "2024-12-10"
            }
        ]
    }
}

创建产品或产品组下的自定义指标

python
rqamsc.insert_customized_indicators(product_like_id_or_name: str, customized_indicators: Dict) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
customized_indicatorsdict可参考 _获取自定义指标_ 接口中数据格式
  • 返回字典结构如下
字段类型是否必须说明
effect_countint1 表示成功,0 表示失败

修改产品或产品组下的自定义指标

python
rqamsc.update_customized_indicators(product_like_id_or_name: str, customized_indicators: Dict) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
customized_indicatorsdict注意:需要将所有指标上传,即修改和未修改指标都要上传,可参考 获取自定义指标 接口中数据格式
  • 返回字典结构如下
字段类型是否必须说明
effect_countint1 表示成功,0 表示失败

删除产品或产品组下的自定义指标

python
rqamsc.delete_customized_indicators(product_like_id_or_name: str) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
  • 返回字典结构如下
字段类型是否必须说明
effect_countint1 表示成功,0 表示失败

交易分析

获取产品或产品组交易分析列表

python
rqamsc.get_trading_analysis_list(
    product_like_id_or_name: str,
    start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None,
) -> List[Dict]
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
start_dateint,str,datetime,date开始日期(如果不传则为产品/产品组的交易起始日)
end_dateint,str,datetime,date结束日期(如果不传则为今天)
  • 返回

区间交易分析结果列表,每个元素包含以下字段:

字段类型是否必须说明
datestr日期
order_book_idstr资产代码
asset_categorystr资产类型
symbolstr资产名称
asset_classasset_class资产类别
directiondirection交易方向
period_pnlfloat区间盈亏

获取单个交易分析

python
rqamsc.get_single_trading_analysis(
    product_like_id_or_name: str,
    order_book_id: str,
    asset_class: str,
    direction: Direction,
    start_date: optional_datetime_like = None,
    end_date: optional_datetime_like = None,
) -> Dict
  • 参数
参数类型是否必须说明
product_like_id_or_namestr产品(组)的 id 或名称
order_book_idstr合约 ID
asset_classasset_class资产类别
directiondirection交易方向
start_dateint,str,datetime,date开始日期(如果不传则为产品/产品组的交易起始日)
end_dateint,str,datetime,date结束日期(如果不传则为今天)
  • 返回字典结构如下:
字段子字段类型是否必须说明
prev_adjusted_price_serieslist[dict]价格前复权序列
datestr日期
pricefloat复权价格
position_quantity_serieslist[dict]持仓数量序列
datestr日期
quantityfloat持仓数量
pnl_serieslist[dict]盈亏序列
datestr日期
pnlfloat累计盈亏
daily_pnlfloat当日盈亏
buy_pointslist[str]买入时点列表
sell_pointslist[str]卖出时点列表
  • 使用说明及示例:

    get_single_trading_analysis 的参数 order_book_idasset_classdirection 可以直接从 get_trading_analysis_list 的返回结果中获取。

    注意:传入的 order_book_idasset_classdirection 必须在对应产品/产品组的持仓中存在,否则无法返回正确的信息。

python
# 先获取交易分析列表
analysis_list = rqamsc.get_trading_analysis_list(product_like_id_or_name="产品名称或ID", start_date="2023-01-01", end_date="2023-12-31")

# 假设我们取第一个分析结果
item = analysis_list[0]

# 提取参数
order_book_id = item["order_book_id"]
asset_class = item["asset_class"]
direction = item["direction"]

# 获取单个交易分析
single_analysis = rqamsc.get_single_trading_analysis(
    product_like_id_or_name="产品名称或ID",
    order_book_id=order_book_id,
    asset_class=asset_class,
    direction=direction,
    start_date="2023-01-01",
    end_date="2023-12-31"
)

print(single_analysis)

API 对象及属性值

工作空间对象

字段类型说明
idstr工作空间 id
namestr工作空间名称
adminstr工作空间管理员 id
capacitystr工作空间人数上限
ctimestr工作空间创建时间
descriptionstr工作空间描述
usersstr or list工作空间的成员列表

产品对象

该对象的构建和使用如下示例

python
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),
    "fund_code": "",
    "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
字段子字段类型是否必须说明
idstr产品 id(不可修改)
user_idstr创建者 id(不可修改)
workspace_idstr所属 workspace id(不可修改)
namestr产品名称
full_namestr产品全名
report_namestr产品报告名称,主要用于对外。 如导出周度报告时报告名称会以该名称命名
start_datedatetime,date产品开始日期
trading_start_datedatetime,date产品开始交易日期
data_sourcestr产品数据来源(不可修改):
1. 交易流水及估值表类型产品(trade_and_valuation_report)
2. 交易流水型产品(trade)
3. 估值表类型产品(valuation_report)
benchmarkdict产品基准
typestr基准类型:
1. index(目前仅支持沪深 300、中证 500 以及中证 1000)
2. customized_index 为自定义基准
idstrindex 的基准代码 或 自定义基准的 id
calendarstr产品日历:
1. 交易所日历(exchange)
2. 银行间交易日历(interbank)
3. 自然日(natural)
auto_equitybool是否自动权益
unit_policystr份额管理方式:
1. 自动份额管理(auto_prev_unit_net_value)
2. 手动份额管理(manual)
accountsList[dict], List[ProductAccount]账户信息
account_numberstr资金账号
namestr账户名称
brokerstr账户通道
is_custodianbool是否是托管账户
fee_settingsdict, ProductFeeSettings费用信息
management_feefloat管理费
custodian_feefloat托管费
sales_and_service_feefloat销售服务费
operation_feefloat运营费
performance_payfloat业绩报酬
realtime_period_typestr, RealtimePeriodType实时估值类型:
1. daytime: 仅白天 09:30 - 15:00
2. natural: 自然日 09:00 - 02:30 (+1)
3. valuation_day: 估值表日 21:00 - 15:00 (+1)
create_timedatetime, str创建时间
paper_tradingboolFalse: 实盘交易
True: 模拟交易
investment_categorystr, ProductInvestmentCategory投资类型
strategy_categorystr, StrategyCategory策略类型:
1. index_enhanced: 指数增强
2. equity_market_neutral: 市场中性
3. stock_long: 股票多头
4. commodity_trading_advisor: CTA
5. mixed: 混合策略
6. long_short_stock: 股票多空
7. stock_leverage_neutral: 股票杠杆中性
8. stock_leverage_long_short: 股票杠杆多空
9. unconventionality: 其他
valuation_settingsdict, ValuationSettings设置资产估值方式
etfstr, ETFValuationAccordingFieldETF 基金估值设置:
1. close: 收盘价 2. iopv: 当日净值
fut_optstr, FutOptValuationAccordingField期货期权估值设置:
1. close: 收盘价 2. settlement: 结算价
acc_net_valuestr, AccUnitValueValuationAccordingField累计净值估值设置:
1. acc_unit_dividend: T 日单位净值+产品起始日至今累计单位份额分红 2. last_unit_net_value: T-1 日累计净值+T 日单位净值-T-1 日单位净值+T 日产品单位份额分红
exchange_rate_settingsdict, ExchangeRateSettings设置估值汇率
HKDstr, ExchangeRateType港股通汇率设置:
1. sh: 沪港通中间价
2. sz: 深港通中间价
fund_codestr基金代码
managerstr管理人
invest_advisorstr投资顾问
invest_managerstr投资经理
maturity_datedate, str, none产品到日期
closing_datedate, str, none封账日
descriptionstr产品描述

产品组对象

字段子字段类型是否必须说明
idstr产品组 id(不可修改)
namestr产品组名称
report_namestr产品组报告名称,主要用于对外。 如导出周度报告时报告名称会以该名称命名
productsList[dict]各个产品成分:
1. id: 产品 id
2. name: 产品名称
product_weightsdict各个产品成分权重(key 为产品 id, value 为权重值)
1. 若该字段存在时,产品组为权重产品组
2. 若不存在该字段,产品组为聚合产品组
benchmarkdict产品组基准
typestr基准类型:
1. index(目前仅支持沪深 300、中证 500 以及中证 1000)
2. customized_index 为自定义基准
idstrindex 的基准代码 或 自定义基准的 id
paper_tradingboolFalse: 实盘交易
True: 模拟交易
trading_start_datestr交易起始日,不能小于产品组的估值起始日,即子产品中最晚的估值起始日
strategy_categoryList[str, ProductInvestmentCategory]策略类型列表(子产品策略类型的集合)
accessible_err_msgList[str]若产品组状态异常将在该字段中展示
create_timestr创建时间
rebalance_frequencystr再平衡频率,当产品组为权重产品组时必传,为聚合产品组时不传
descriptionstr产品描述

估值表对象

字段子字段类型是否必须说明
datestr持仓单日期
total_equityfloat净资产
unitsfloat份额
unit_net_valuefloat单位净值
acc_unit_net_valuefloat单位累计净值
positionsList[PositionsSheetPosition]持仓详情
asset_classstr资产类型
directionstr持仓方向
order_book_idstr资产代码
symbolstr资产名称
market_valuefloat持仓市值
quantityfloat持仓数量(现金类资产 可不填,其余必填)
cost_pricefloat单位成本(现金类资产 可不填,其余必填)
costfloat成本
fair_valuefloat公允价格
accrued_interestfloat应记利息
sterilisation_market_valuefloat冲销市值(期货类资产必填)

交易流水对象

参数类型上传时字段是否必须获取时字段是否会返回说明
trading_asset_classstr交易属性, 提供可以提高识别精准度(绝大部分情况可不提供)
asset_classstr资产类型
transaction_typestr交易类型
accountstr交易账户名称,不提供则默认第一个产品账户
datetimestr,datetime,date交易时间
trading_datestr,datetime,date交易日期
order_book_idstr合约 id,现金类资产传“CNY”
symbolstr合约名称
quantityfloat交易数量(现金类资产 可不填,其余必填)
pricefloat交易价格
• 回购类所传价格表示利率,如文件中为 1.2 表示利率为 1.2%,可直接传小数 1.2, 也可以传 0.012
现金类资产 可不填,其余必填
settlement_amountfloat交易金额(涉及金额的交易类型需要设置该字段,eg. 分红、转债回售、付息、出入金、现金存取、基金申购金额等,具体哪些交易类型需要该字段可参考交易类型枚举文档)
commissionfloat交易佣金
taxfloat交易税
other_feesfloat其他费用
exchange_ratefloat汇率
remarksstr备注
sourcestr流水来源
foreign_idstr外部标识 id
asset_unit_idstr资产单元 id
_idstrAMS 系统内流水的唯一 id

交易流水来源

流水来源取值流水来源描述
manual手工录入
settlement_upload日终结算流水文件导入
1. 上传流水时会删除同账号相同日期下已有的 日终结算流水、日内流水及 open_api 流水,并采用最新上传的流水覆盖
intraday_upload日内流水文件导入
1. 上传流水时会删除同账号相同日期下已有的 日内流水及 open_api 流水,并采用最新上传的流水覆盖
2. 如果同账号相同日期下已有日终结算流水则不能上传日内流水
open_apirqamsc 导入流水
1. 每次上传流水都视为新增,若流水附带 foreign_id 字段则对相同 foreign_id 的流水覆盖
2. 如果同账号相同日期下已有日终结算流水则不能上传 openapi 流水
3. 流水列表可以传入历史的流水, 但该历史流水导入行为依旧符合上述 1 和 2 两条规则
4. 若流水列表中都为当日流水,则认为符合更加快速的增量估值计算标准,即计算服务会从最新的估值截面应用该批流水,如果日内实时导入交易流水且希望能实时估值能快速响应,应避免使用 open_api 方式上传已导入的当日流水
auto_balance自动权益下自动生成的流水
netting_derived_shadow估值表覆盖 AMS 头寸后,根据前后持仓倒推的流水

交易属性

交易属性取值交易属性描述该交易属性代码可能的米筐标准后缀
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_fundETF 基金
lof_fundLOF 基金
reitsREITS 基金
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活期存款(现金类)
asset_unit资产单元
reservation_deposit结算备付金(现金类)
refundable_deposit存出保证金(现金类)
securities_settlement_accounts证券清算款(现金类)
dividend_receivable应收股利(现金类)
other_interest_receivable其他应收利息(现金类)
subscription_receivable应收申购款(现金类)
other_receivable其他应收款(现金类)
other_asset其他资产(现金类)
cash_debt现金类负债(现金类)
other_interest_payable其他应付利息(现金类)
management_fee_payable计提管理费(现金类)
sales_and_service_fee_payable计提销售服务费(现金类)
custodian_fee_payable计提托管费(现金类)
performance_pay_payable计提业绩报酬(现金类)
operation_fee_payable计提运营费(现金类)
tax_payable应付税(现金类)
other_payable其他应付款(现金类)
other_liability其他负债(现金类)

交易类型

交易类型取值交易类型描述需要 settlement_amount(结算金额)字段备注
buy买入
sell卖出
buy_open多头开仓
sell_close多头平仓
sell_open空头开仓
buy_close空头平仓
subscribe申购
redeem赎回
transfer_in划入持仓成本不变,数量增加
transfer_out划出持仓成本不变,数量减少
custodian_transfer_in托管划入和开仓类流水效果一致
custodian_short_transfer_in托管空头划入和开仓类流水效果一致
custodian_transfer_out托管划出和平仓类流水效果一致
custodian_short_transfer_out托管空头划出和平仓类流水效果一致
etf_subscription_transfer_inETF 申购划入ETF 开仓
etf_redeem_transfer_outETF 赎回划出ETF 平仓
etf_subscription_transfer_outETF 申购划出股票平仓
etf_redeem_transfer_inETF 赎回划入股票开仓
etf_cash_replacement_transfer_inETF 现金替代划入
etf_cash_replacement_transfer_outETF 现金替代划出
etf_cash_difference_transfer_inETF 现金差额划入
etf_cash_difference_transfer_outETF 现金差额划出
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直接还券
cash_repayment直接还款
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债券到期

持仓方向

持仓方向取值持仓方向描述
long多头
short空头

业绩归因模板对象

字段类型说明
PATemplate.BRINSONstrbrinson 归因
PATemplate.FACTORstr多因子归因
PATemplate.FACTOR_V2str多因子归因 V2

自定义基准对象

该对象属性构成如下, 具体使用可参考下方代码示例

字段类型是否必须说明
namestr自定义基准名称
typestr自定义基准类型, composite(复合指数),fixed_rates(收益率指数)
weightsList[CustomizedBenchmarkWeights]composite(复合指数) 时必须有此字段
ratesfloatfixed_rates(收益率指数) 时必须有此字段
idstr自定义基准 id, 在创建修改时构建该对象不需要此字段
user_idstr创建者 id, 在创建修改时构建该对象不需要此字段
workspace_idstr所属 workspace id, 在创建修改时构建该对象不需要此字段
remarkstr备注信息
  • 对象初始化方式一
python
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}
            ]
        }
    ]
)
  • 对象初始化方式二
python
# 自定义基准对象可调用方法 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}
#             ]
#         }
#     ]
# )
  • 初始化后的对象可直接调用其属性来使用
python
>>> customized_benchmark.name
多时段自定义权重基准
  • 该对象也可以通过 to_dict 方法转化为字典
python
>>> 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_datestr权重开始生效时,修改权重成分时以 start_date 作为搜索条件修改成分数据,若该 start_date 没有搜索到数据则添加该成分到基准中间
customized_benchmark_idstr自定义基准 id, 在创建修改时构建该对象不需要此字段
weightsList[Dict]自定义基准类型, composite(复合指数),fixed_rates(收益率指数)
order_book_idstr权重成分中资产代码
weightfloat权重成分中资产的权重(权重之和要等于 1)

自定义合约对象

该对象使用方式可参考 自定义基准对象

字段类型是否必须说明
asset_classstr资产类型, 可为如下类型:
1. 股票(stock)
2. 期货(otc_futures)
3. 期权(otc_option)
4. 基金(other_fund)
5. 收益互换(total_return_swap)
6. 债券(bond)
7. 回购(repo)
8. 逆回购(reverse_repo)
order_book_idstrOTC 合约代码
symbolstr合约名称
product_idstr归属产品 id
idstr自定义合约 id

托管事件对象

该对象使用方式可参考 自定义基准对象

字段类型是否必须说明
custodian_event_typestr业务类型,字段枚举:
1. 申购款入账(subscription_fund_received)
2. 赎回款出账(redemption_paid)
3. 产品分红(product_dividend_paid)
4. 产品费用实付(product_cost_paid)
5. 科目调整(subject_adjusted)
datestr托管事件发生日期
amountfloat托管事件发生金额
sr_open_datestr申赎开放日,只有业务类型为"申购"、"赎回"时必填,一般情况应为出入账日期上一交易日
product_cost_typestr产品费用类型,只有在业务类型为"产品费用实付"时为必填,字段枚举:
1. 管理费(management_fee)
2. 托管费(custodian_fee)
3. 业绩报酬(performance_pay)
4. 运营费(operation_fee)
5. 销售服务费(sales_and_service_fee)
adjust_targetstr科目调整项,只有在业务类型为"科目调整"时为必填,字段枚举:
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_operationstr科目调整方向,只有在业务类型为"科目调整"时为必填,字段枚举:
1. 调增(increase)
2. 调减(decrease)
3. 调整到(adjust_to)
remarksstr可填写该事件的备注信息
unit_net_valuefloat申赎单位净值,申赎事件必传,通过该字段指定的净值计算份额变动
idstr托管事件的 id
product_idstr托管事件所属产品 id

份额事件对象

该对象使用方式可参考 自定义基准对象

字段类型是否必须说明
datedatetime.date事件日期
subscription_unitsfloat申购份额(与赎回份额必须二选一)
redemption_unitsfloat赎回份额(与申购份额必须二选一)
sourcestr事件来源:
1. 手工录入(manual)
2. 系统自动生成(auto)
idstr事件 id
product_idstr事件所属产品 id

通用异常对象(exception, 可用于捕获处理对应异常)

名称说明
IllegalInput表示 API 输入有误
UnauthorizedException表示鉴权失败
ForbiddenException表示无权执行该操作