Ricequant Docs
  • RQSDK快速上手
  • RQData - 金融数据 API

    • Python API文档
    • Http API文档
  • RQAlpha Plus - 回测框架

    • 使用教程
    • API使用手册 (opens new window)
  • RQFactor - 因子投研工具

    • 使用教程
    • API使用手册
  • RQOptimizer - 股票组合优化器

    • 使用教程
    • API使用手册 (opens new window)
  • RQPAttr - 绩效归因工具

    • 使用教程
  • RQAMS 用户说明文档
  • RQAMSC 说明文档
量化平台文档
米筐帮助中心
返回官网
  • RQSDK快速上手
  • RQData - 金融数据 API

    • Python API文档
    • Http API文档
  • RQAlpha Plus - 回测框架

    • 使用教程
    • API使用手册 (opens new window)
  • RQFactor - 因子投研工具

    • 使用教程
    • API使用手册
  • RQOptimizer - 股票组合优化器

    • 使用教程
    • API使用手册 (opens new window)
  • RQPAttr - 绩效归因工具

    • 使用教程
  • RQAMS 用户说明文档
  • RQAMSC 说明文档
量化平台文档
米筐帮助中心
返回官网
  • RQAMS 用户说明文档
    • rqamsc 介绍
    • 安装
    • 升级
    • 线程安全和在子进程中使用 rqamsc
    • 私有 rqams 平台
    • 迭代记录
    • 快速开始
      • 导包
      • 登录
      • 获取空间下产品
      • 获取产品某天的头寸
    • 进阶教程
      • 导入 open_api 来源交易流水
      • 本地估值表文件定时自动化导入
      • 使用 openapi 方式给产品导入估值表
    • 打开网页版 RQAMS
    • 登录
    • 工作空间
      • 获取所有工作空间信息
      • 指定一个工作空间
      • 获取当前工作空间
    • 产品管理
      • 获取全部产品信息
      • 获取单个产品信息
      • 修改单个产品信息
      • 删除单个产品
    • 产品组管理
      • 获取全部产品组信息
      • 获取单个产品组信息
      • 修改单个产品组信息
      • 删除单个产品组
    • 重算
      • 产品或产品组重算
    • 交易流水管理
      • 给产品导入交易流水
      • 给产品导入结算交易流水
      • 获取产品的交易流水
      • 删除产品的交易流水
      • 交易流水文件自动化导入 AMS
      • 交易流水文件自定义导入 AMS
      • RQAlpha 回测流水自动导入 AMS 使用说明
    • 持仓单管理
      • 给资产单元导入持仓单
      • 获取资产单元持仓单
      • 删除资产单元持仓单
    • 估值表管理
      • 查看产品已导入估值表信息
      • 给产品导入估值表
      • 给产品导入估值表(正在弃用)
      • 删除产品已导入的估值表
      • 下载已导入的估值表文件
      • 本地估值表文件自动化导入
    • 持仓及衍生指标
      • 获取产品或产品组单日头寸
      • 获取产品或产品组指标
      • 获取产品或产品组时序指标
      • 获取产品或产品组实时信息
      • 获取产品或产品组头寸序列
      • 获取产品或产品组净值周度报告
    • 绩效归因
      • 获取产品或产品组绩效归因
      • 获取产品或产品组收益拆解
    • 自定义基准管理
      • 查看自定义基准列表
      • 创建一个自定义基准
      • 获取某个自定义基准信息
      • 更新某个自定义基准信息
      • 删除某个自定义基准
    • 自定义合约管理
      • 查看自定义合约列表
      • 新增自定义合约
      • 获取某个自定义合约价格
      • 上传更新某个自定义合约价格
      • 删除某些自定义合约
    • 托管事件管理
      • 获取某个产品的托管事件列表
      • 给某个产品增加托管事件
      • 修改产品下的一个托管事件
      • 删除产品的一些托管事件
    • 份额事件管理
      • 获取某个产品的份额事件列表
      • 给某个产品增加份额事件
      • 修改产品下的一个份额事件
      • 删除产品的一些份额事件
    • 自定义指标管理
      • 获取产品或产品组下的自定义指标
      • 创建产品或产品组下的自定义指标
      • 修改产品或产品组下的自定义指标
      • 删除产品或产品组下的自定义指标
    • API 对象及属性值
      • 工作空间对象
      • 产品对象
      • 产品组对象
      • 估值表对象
      • 交易流水对象
      • 交易流水来源
      • 交易属性
      • 资产类型
      • 交易类型
      • 持仓方向
      • 业绩归因模板对象
      • 自定义基准对象
      • 自定义基准成分权重对象
      • 自定义合约对象
      • 托管事件对象
      • 份额事件对象
      • 通用异常对象(exception, 可用于捕获处理对应异常)

# RQAMSC 使用教程文档

# rqamsc 介绍

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

rqamsc 为管理 RQAMS 平台上的资源(交割单、组合、产品等)提供了 Python 接口,大幅提升了 RQAMS 的自动化程度,打通了量化交易和资管系统。

如果您不满足仅仅能管理 RQAMS 平台的话,您可以申请 RQAMS 的私有化部署,通过 rqamsc 管理您的私有 RQAMS。


# 安装

支持 Python 3.7, 3.8, 3.9, 3.10, 3.11

首先在系统中打开一个命令行, 选择好需要安装的 Python 环境,再运行以下安装命令

pip install --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/ rqamsc

或者

pip install -i https://rquser:ricequant99@py.ricequant.com/simple/ rqamsc

第一次安装成功后,命令行应该有类似如下的输出(显示已成功安装的包中有 rqamsc)

Successfully installed brotli-1.1.0 certifi-2024.7.4 charset-normalizer-3.3.2 colorama-0.4.6 et-xmlfile-1.1.0 idna-3.7 msgpack-1.0.8
 numpy-1.24.4 openpyxl-3.1.5 orjson-3.10.6 pandas-2.0.3 python-dateutil-2.9.0.post0 python-rapidjson-1.18 pytz-2024.1 pyyaml-6.0.1 r
equests-2.32.3 rqamsc-0.4.1 rqdatac-3.0.12.2+12.ga61fb64d rqdatac-fund-1.0.35 six-1.16.0 tqdm-4.66.4 tzdata-2024.1 urllib3-2.2.2 win-inet-pton-1.1.0 xlrd-1.2.0

# 升级

升级包版本可使用 --upgrade 参数(使用该参数可以保证获取最新的 rqamsc 版本), 示例如下

pip install --upgrade rqamsc --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/

或者

pip install --upgrade rqamsc -i https://rquser:ricequant99@py.ricequant.com/simple/

对应版本成功升级后的输出结果如下

Installing collected packages: rqamsc
  Attempting uninstall: rqamsc
    Found existing installation: rqamsc 0.4.0
    Uninstalling rqamsc-0.4.0:
      Successfully uninstalled rqamsc-0.4.0
Successfully installed rqamsc-0.4.1

# 线程安全和在子进程中使用 rqamsc

rqamsc 是线程安全的,在当前进程的任何线程中调用 rqamsc 的 api 都是安全的。

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


# 私有 rqams 平台

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

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

# 迭代记录

rqamsc 版本 发布日期 新增 改善 不兼容改动
0.5.3 2025-04-07 1. 托管事件对象 增加申赎开放日及备注字段 1. 托管事件相关接口返回值变动(增加、删除托管事件)
0.5.2 2025-02-18 1. 产品组对象 增加再平衡频率字段
2. 修复 删除单个产品组 接口
3. 优化 api 中提供的 to_datetime 方法
0.5.1 2024-12-19 1. 新增 自定义指标 相关接口 1. 自定义合约 增加归属产品字段
2. 修复使用港股汇率 上传自定义合约价格 时出现的问题
0.5.0 2024-11-27 1. 新增 重算产品或产品组
2. 新增 删除自定义基准
3. 新增 删除自定义合约
1. 产品组 增加返回策略类型
2. 优化估值表导入报错时的信息反馈
3. 程序运行期间可能出现登录过期的情况时会自动重新登录
4. 单产品导入估值表 支持字典格式导入
5. 修复 获取实时信息 传递"额外指标"参数后未返回持仓的问题
1. 产品 及 产品组 增加报告名称属性
2. 增加"股票杠杆多空"策略类型, 可在 产品对象 中查看(产品中若设置了该策略类型,此前版本无法识别)
0.4.2 2024-08-12 1. 绩效归因 支持风险因子 v2
2. 资产单元持仓单导入 支持 BytesIO 对象元
0.4.1 2024-06-26 1. 增加估值表文件下载接口 1. 估值表自动导入服务 优化,支持全量增量更新
2. 单产品导入估值表 支持 BytesIO 对象, 返回结果简化
3. 获取产品列表 支持返回产品下资产单元
0.4.0 2024-05-13 1. 增加份额管理相关接口
2. 产品增加估值汇率设置属性
周度净值报告接口支持产品组 1. 产品及产品组增加交易起始日属性
2. 产品估值设置字段类型变更,详见产品对象
3. 删除托管事件接口返回值调整(此前版本使用该接口可以正常删除但返回结果时会出错)
0.3.16 2024-03-20 1. 修复导入自定义合约价格文件时可能导致的报错
2. 修复自定义合约类(CustomInstruments)未返回 id 属性
0.3.14 2024-03-13 兼容一些异步接口因估值计算未完成提前终止的情况 调整持仓单导入接口参数 file_path -> file_path_or_bytes, 同时支持更丰富的参数类型
0.3.13 2024-01-11 1. 新增持仓单相关操作接口
2. 流水接口支持对资产单元的相关操作

# 快速开始

# 导包

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

>>> import rqamsc

# 登录

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

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

# 获取空间下产品

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

>>> rqamsc.list_products()
[Product(name='多策略1号', data_source='trade_and_valuation_report', start_date='2021-03-10', investment_category='equity', benchmark={'type': 'index', 'id': '000300.XSHG'}, calendar='exchange', auto_equity=True, unit_policy='auto_prev_unit_net_value', accounts=[{'account_number': '123', 'name': '测试托管帐号', 'broker': 'RQ通道', 'is_custodian': True}, {'account_number': '123', 'name': '测试交易帐号', 'broker': 'RQ通道', 'is_custodian': False}], fee_settings={'management_fee_rate': 0.0, 'custodian_fee_rate': 0.0, 'operation_fee_rate': 0.0, 'sales_and_service_fee_rate': 0.0}, user_id=321843, workspace_id=ObjectId('5e9a6b06ba363be9fce2a599'), product_state='normal', full_name='多策略1号', create_time='2021-08-02 11:37:43', case_number='', manager='', invest_advisor='', invest_manager='', maturity_date='2999-12-31', closing_date=None, id='61076887224d591257c5ebb5')]

# 获取产品某天的头寸

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

import rqamsc
def demo():
    rqamsc.init('username', 'password', uri="https://www.ricequant.com", ssl_verify=True)
    rqamsc.choose_workspace('需要指定的工作空间')
    balance = rqamsc.get_balance('一个范例产品', dt=20240802)
    print(balance)
if __name__ == '__main__':
    demo()

以上示例输出结果如下

{
    'date': '2024-08-02',
    'total_equity': 1000089.8,
    'daily_pnl': 0,
    'daily_returns': 0.0,
    'units': 1000000.0,
    'unit_net_value': 1.0000898,
    'acc_unit_net_value': 1.0000898,
    'adjusted_net_value': 1,
    'acc_unit_dividend': 0,
    'positions': [
    ...
}

# 进阶教程

# 导入 open_api 来源交易流水

交易流水是 AMS 中产品估值计算的重要数据来源,可使用 rqamsc.insert_product_trades 来导入open_api 来源的交易流水,如下示例

import datetime
import rqamsc
def demo():
    rqamsc.init('username', 'password')
    rqamsc.choose_workspace('需要指定的工作空间')
    trades = [
        # 第一条流水
        {
            'transaction_type': 'buy',  # 交易类型,字段值可在文档【交易类型】中参考
            'account': '范例产品交易账号中文名',   # 交易账户名称,不提供则默认第一个产品账户
            'datetime': datetime.datetime(2024, 5, 7, 10, 4, 25),
            'order_book_id': '000001.XSHE',
            'symbol': '平安银行',
            'quantity': 1,  # 分红、付息等现金类交易则不需要提供
            'price': 10,    # 分红、付息等现金类交易则不需要提供
            'settlement_amount': 0,  # 买卖等类型可以不提供该字段,但分红、付息、出入金等(可参考文档【给产品导入交易流水】中介绍)必须设置该字段作为交易金额
            'commission': 0.1,    # 交易佣金, 不提供默认为0
            'tax': 0,   # 交易税, 不提供默认为0
            'other_fees': 0,    # 其他费用, 不提供默认为0
            'exchange_rate': 1,  # 汇率, 不提供默认为1
            'remarks': '这是当天第一笔交易',  # 备注, 可不提供
            'foreign_id': '可指定一个在交易系统范围内唯一的id',  # 外部id, 可不提供, 具体功能可参考文档【交易流水来源】中介绍
            'asset_unit_id': None  # 资产单元id, 如果是资产单元下的流水需要指定该字段,不指定则默认该流水是产品层流水
        },
        # 第二条流水
        {
            'transaction_type': 'sell',  # 交易类型
            'datetime': datetime.datetime(2024, 5, 7, 11, 4, 25),
            'order_book_id': '000001.XSHE',
            'symbol': '平安银行',
            'quantity': 1,
            'price': 100,
            'commission': 0.1
        },
        # 第三条流水
        {
            'transaction_type': 'cash_in',  # 入金
            'datetime': datetime.datetime(2024, 5, 7, 14, 4, 25),
            'order_book_id': 'CNY',
            'symbol': 'CNY',
            'settlement_amount': 1000000,  # 入金的金额
            'foreign_id': '123321954783203'
        }
        # 第四条流水
        {
            'transaction_type': 'dividend_payment',  # 现金分红
            'account': '一个不存在的账号',
            'datetime': datetime.datetime(2024, 5, 7, 8, 0, 0),
            'order_book_id': '000001.XSHE',
            'symbol': '平安银行',
            'settlement_amount': 1,  # 分红的金额
        }
        # ... 可增加更多流水
    ]
    # 调用导入流水api,使用result变量接收返回结果并打印输出,可使用chunk_size参数指定每批上传的流水数量,默认1000
    result = rqamsc.insert_product_trades('一个范例产品', trades, chunk_size=500)
    print(result)
if __name__ == '__main__':
    demo()

以上示例运行结果如下

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

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

# Linux:

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

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

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

    vim config.yaml
    或
    nano config.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 保存退出方法详细说明 (opens new window)

  2. 运行&调试

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

    编辑内容示例如下:

    # -*- 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 文件的目录下执行命令):
     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 定时运行,使用以下命令:

    crontab -e
    

    编辑内容示例如下:

    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 为例) 编辑如下内容:

    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 文件,示例如下:

    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 文件
    ```
    然后运行该文件
    - 方式二:通过命令行运行,在命令行中运行以下命令:
    
    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 格式的估值表数据导入产品,如下为示例

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)

以上示例运行结果如下


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

# RQAMSC API 手册

# 打开网页版 RQAMS

rqamsc.go()

# 登录

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

# 工作空间

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

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

# 获取所有工作空间信息

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

rqamsc.get_workspaces()
  • 返回

List[Workspace]


# 指定一个工作空间

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

rqamsc.choose_workspace(workspace_name_or_id: str)

# 获取当前工作空间

rqamsc.current_workspace()
  • 返回

Workspace


# 产品管理

# 获取全部产品信息

rqamsc.list_products() -> List[Product]

获取全部的产品信息

  • 返回

List[Product]

  • 示例
>>> rqamsc.list_products()
[Product(name=多策略1号, data_source=trade_and_valuation_report, start_date=2021-03-10, investment_category=equity, benchmark={'type': 'index', 'id': '000300.XSHG'}, calendar=exchange, auto_equity=True, unit_policy=auto_prev_unit_net_value, accounts=[{'account_number': '123', 'name': '测试托管帐号', 'broker': 'RQ通道', 'is_custodian': True}, {'account_number': '123', 'name': '测试交易帐号', 'broker': 'RQ通道', 'is_custodian': False}], fee_settings={'management_fee_rate': 0.0, 'custodian_fee_rate': 0.0, 'operation_fee_rate': 0.0, 'sales_and_service_fee_rate': 0.0}, user_id=321843, workspace_id=5e9a6b06ba363be9fce2a599, product_state=normal, full_name=多策略1号, create_time=2021-08-02 11:37:43, case_number=, manager=, invest_advisor=, invest_manager=, maturity_date=2999-12-31, closing_date=None, id=61076887224d591257c5ebb5)]

# 获取单个产品信息

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

Product

  • 示例
>>> rqamsc.get_product("60b49659dd715e69dd8b1d8a")
Product(name=多策略1号, data_source=trade_and_valuation_report, start_date=2021-03-10, investment_category=equity, benchmark={'type': 'index', 'id': '000300.XSHG'}, calendar=exchange, auto_equity=True, unit_policy=auto_prev_unit_net_value, accounts=[{'account_number': '123', 'name': '测试托管帐号', 'broker': 'RQ通道', 'is_custodian': True}, {'account_number': '123', 'name': '测试交易帐号', 'broker': 'RQ通道', 'is_custodian': False}], fee_settings={'management_fee_rate': 0.0, 'custodian_fee_rate': 0.0, 'operation_fee_rate': 0.0, 'sales_and_service_fee_rate': 0.0}, user_id=321843, workspace_id=5e9a6b06ba363be9fce2a599, product_state=normal, full_name=多策略1号, create_time=2021-08-02 11:37:43, case_number=, manager=, invest_advisor=, invest_manager=, maturity_date=2999-12-31, closing_date=None, id=61076887224d591257c5ebb5)

# 修改单个产品信息

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

# 删除单个产品

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

# 产品组管理

# 获取全部产品组信息

rqamsc.list_product_groups() -> List[ProductGroup]

获取全部的产品组信息

  • 返回

List[ProductGroup]

  • 示例
>>> rqamsc.list_product_groups()
[ProductGroup(name=范例产品组-等权, products=[{'id': '635fa0dcf900a7b2fcfb44c0', 'name': '量化对冲_347418'}, {'id': '635fa0e3f900a7b2fcfb4670', 'name': '商品期货_347418'}, {'id': '635fa0e3f900a7b2fcfb4691', 'name': '300估值因子增强_347418'}, {'id': '635fa0d6f900a7b2fcfb4485', 'name': '期权产品_347418'}, {'id': '635fa0d9f900a7b2fcfb449f', 'name': '可转债产品_347418'}], benchmark={'type': 'index', 'id': '000300.XSHG'}, description=范例产品组, create_time=2021-10-14 17:15:46, paper_trading=False, product_weights={'635fa0dcf900a7b2fcfb44c0': 0.2, '635fa0e3f900a7b2fcfb4670': 0.2, '635fa0e3f900a7b2fcfb4691': 0.2, '635fa0d6f900a7b2fcfb4485': 0.2, '635fa0d9f900a7b2fcfb449f': 0.2}, id=6167f542ea2e8ac215581cde)]

# 获取单个产品组信息

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

ProductGroup

  • 示例
>>> rqamsc.get_product_group("范例产品组")
ProductGroup(name=范例产品组, products=[{'id': '635fa0dcf900a7b2fcfb44c0', 'name': '量化对冲_347418'}, {'id': '635fa0e3f900a7b2fcfb4670', 'name': '商品期货_347418'}, {'id': '635fa0e3f900a7b2fcfb4691', 'name': '300估值因子增强_347418'}, {'id': '635fa0d6f900a7b2fcfb4485', 'name': '期权产品_347418'}, {'id': '635fa0d9f900a7b2fcfb449f', 'name': '可转债产品_347418'}], benchmark={'type': 'index', 'id': '000300.XSHG'}, description=, create_time=2023-05-05 17:22:44, paper_trading=False, product_weights=None, id=6454cae473ddf7712bcd3434)

# 修改单个产品组信息

rqamsc.update_product_group(group_id_or_name: str, update_fields: Dict) -> Dict
  • 参数
参数 类型 是否必须 说明
group_id_or_name str 是 产品组 id 或名称
update_fields dict 是 需要修改的产品信息(字段值可参考 ProductGroup )
  • 返回
字段 类型 是否必须 说明
effect_count int 是 是否修改成功(1:成功, 0:未成功)
  • 示例
# 以下为聚合型产品组字段构建
update_fields = {
    'name': '新的聚合型范例产品组名称',
    'benchmark': {'index': '000300.XSHG'},
    'products': [
        {'id': "6423efcab15e5e6bbd037292", 'name': "范例产品1"},    # 可省略name
        {'id': "641d74fe026c38928ac2ef55", 'name': "范例产品2"}
    ]
}
# 以下为权重产品组字段构建,也可以使聚合产品组变为权重产品组
update_fields = {
    'name': '新的权重产品组名称',
    'product_weights': {'6423efcab15e5e6bbd037292': 0.5, '641d74fe026c38928ac2ef55': 0.5}
}
# 若想将权重产品组改为聚合产品组,需要设置product_weights为空
update_fields = {
    'name': '新的聚合产品组名称',
    'products': [
        {'id': "6423efcab15e5e6bbd037292", 'name': "范例产品1"},
        {'id': "641d74fe026c38928ac2ef55", 'name': "范例产品2"}
    ],
    'product_weights': None
}

# 删除单个产品组

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

# 重算

# 产品或产品组重算

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

# 交易流水管理

# 给产品导入交易流水

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

rqamsc.insert_product_trades(product_id_or_name: str, trades_or_df: Union[List[Dict], DataFrame], chunk_size: int = 1000) -> List[Dict]
  • 参数:

    • 单条流水中的字段可参考 交易流水对象

    • chunk_size: 按 chunk_size 切分成一个个的 chunk,每次插入一个 chunk 大小。最小的 chunk 大小是 500,默认为 1000。

  • 返回:返回一个结果列表,其顺序对应所上传数据的顺序,列表中每个元素(dict)表示一批导入结果,元素数据结构如下

字段 子字段 类型 是否必须 说明
chunk_start int 是 分批导入时每一批的起始位置, 第一批从位置 0 开始
result list[dict] 是 每一批的导入结果
id str 否 导入成功的交易流水 id
action str 否 导入行为:
1. 新增(insert)
2. 修改(modify)
err str 否 错误信息

# 给产品导入结算交易流水

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

rqamsc.insert_product_settlement_trade_file(
        product_id_or_name: str, account_name: str, file_or_dir_path: Union[str, List[str]],
        asset_unit_id: Optional[Union[str, ObjectId]] = None
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 需要导入流水的产品 id 或产品名称
account_name str 是 需要导入流水的交易账号名称
file_or_dir_path str or List[str] 是 需要导入流水的文件或文件夹目录
asset_unit_id str or ObjectId 否 需要导入的资产单元 id
  • 返回:返回一个 Dict 字典,key 为文件路径, value 结构如下
文件导入状态 类型 参数 说明
成功或部分导入成功 dict confirmation_id 凭证 id, 可以通过此 id 查询凭证以获取详细的导入结果
effect_count 解析出的流水数量
err_msg 是一个存储 dict 的列表,存储导入失败的流水信息(全部成功则为空)
失败 str 失败原因的信息

e.g.

{
  "D:/kst20210618.csv": {
    "confirmation_id": "617bb94760108f5400628391",
    "effect_count": 6105,
    "err_msg": []
  },
  "D:/kst20210621.csv": {
    "confirmation_id": "617bb94560108f5400626bac",
    "effect_count": 3261,
    "err_msg": [{ "line_num": 2, "msg": "无法识别资产:资产分类信息获取失败" }]
  },
  "D:/日终结算.json": "流水文件格式错误"
}

# 获取产品的交易流水

rqamsc.get_product_trades(
        product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None,
        sources: Union[str, Iterable] = None, order_book_id: str = None, symbol: str = None,
        asset_transaction_types: Union[str, Iterable] = None, account_names: Union[str, Iterable] = None,
        asset_unit_id_or_list: Optional[str, ObjectId, List[str, ObjectId]] = None,
        key_words: Union[str, Iterable] = None, group_by: str = None, remarks: str = None,
        is_query_assistant: bool = False
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品 id 或产品名称
start_date int,str,datetime,date 否 开始日期(如果不传则从今天向前取三个月)
end_date int,str,datetime,date 否 结束日期(如果不传则为今天)
sources str,Iterable 否 数据来源, 以下为数据来源及其对应可传入的值
1. 手工录入:手工录入、手工、manual
2. 日终结算:日终结算、日终、settlement_upload
3. 当日成交:当日成交、当日、日内、intraday_upload
4. open_api: open_api、api
5. 系统生成:系统生成、自动权益、auto_balance
account_names str,Iterable 否 账户名称(可传字符串或字符串列表等)
asset_unit_id_or_list str,ObjectId,Iterable 否 资产单元 id(可传字符串或字符串列表等), 指定后查询资产单元下的流水
asset_transaction_types str,Iterable 否 资产类型 与 交易类型 (可传字符串或字符串列表等)
eg. asset_transaction_types='stock-buy'
key_words str,Iterable 否 关键字, 可检索'账号'、'代码'、'名称'、'变动类型'(传多个值时相互间为并集)
order_book_id str 否 资产代码(根据所给值进行正则匹配, 不区分大小写)
symbol str 否 资产名称(根据所给值进行正则匹配, 不区分大小写)
group_by str 否 分组聚合关键字:
1. asset(根据资产聚合)
2. trading_date(根据交易日期聚合)
remarks str 否 备注(根据所给值进行正则匹配, 不区分大小写)
  • 返回:交易流水数组,单个流水结构可参考交易流水对象

# 删除产品的交易流水

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

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

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

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

方式一:在 python 代码中启动

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

or

方式二:命令行启动

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

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

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

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

# 每30s同步一次实时流水至AMS
- path: D:\迅投流水目录
  template: xuntou
  interval: 30 # 用以做实时增量导入,30即30s导入一次
  expire_time: "15:30" # 指定该项配置每天运行到15:30就不再执行
  filename_model: Deal # 所要导入的流水文件名称中共有的字符串,如源文件为 Deal(20230808).csv, 即可指定为 Deal 用以区分出流水文件
  product_account:
    - product: 产品1
      account_name: 产品1的迅投账号名称1
      account_number: "000111" # 注意这里给定字符串类型的账号
    - product: 产品1
      account_name: 产品1的迅投账号2
      account_number: "000222"
# 将 20230801~20230804 的历史流水导入AMS
- path: D:\迅投流水目录
  template: xuntou
  start: "20230801" # 指定导入哪些日期的流水,该字段为区间开始日期,不指定则只导入当天的流水
  end: "20230804" # 指定导入哪些日期的流水,该字段为区间结束日期,不指定则只导入当天的流水
  product_account:
    - product: 产品1
      account_name: 产品1的迅投账号名称1
      account_number: "000111" # 注意这里给定字符串类型的账号
    - product: 产品2
      account_name: 产品2的迅投账号名称
      account_number: "999999" # 注意这里给定字符串类型的账号
# 指定导入 20230726 的期货流水
- path: D:\期货流水目录
  template: ctp_txt
  interval: 0 # 不指定或为0时表示只执行一次
  filename_model: FuturesSettlement
  product_account:
    - product: 期货产品
      account_name: 期货账号名称
      account_number: "888888"
  start: "20230726"
  end: "20230726"

配置文件关键字介绍

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

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

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

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

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

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

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

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

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

import rqamsc
df = rqamsc.parse_caitong_txt_to_df('直接指定要解析的文件地址')
# 这里对df做一些自定义处理,如指定账号名称(account)及foreign_id等
df['account'] = '账号1'
# 最后指定产品导入AMS
rqamsc.insert_product_trades('产品名称', df)

# RQAlpha 回测流水自动导入 AMS 使用说明

用户可通过 rqalpha-mod-ams 模块自动将 RQAlpha 策略回测产生的交易流水上传至 RQAMS 资产管理平台,以便于对策略结果进行深度分析与模拟策略监控。

针对策略回测,用户仅需在 RQAMS 中新建对应产品,并将产品与所在工作空间名称配置在回测框架中即可,rqalpha-mod-ams 模块会自动生成产品的第一笔入金流水。

针对策略模拟交易,用户仅需运行 rqalpha 增量回测,即可实现策略每日流水增量导入 RQAMS 中的对应产品。

安装

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

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

rqalpha mod enable ams

查看 upload 的参数

rqalpha upload -h

使用案例

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

mod-ams 有如下配置:

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

from rqalpha_plus.apis import *
from rqalpha_plus import run_func
def handle_bar(context, bar_dict):
    # 股票
    order_book_id = "000001.XSHE"
    if get_position(order_book_id).quantity <= 300:
        order_shares(order_book_id, 100)
    elif get_position(order_book_id).quantity > 300:
        order_shares(order_book_id, -100)
config = {
    "base": {
        "start_date": "2023-07-10",
        "end_date": "2023-07-26",
        "frequency": "1d",
        "accounts": {
            "stock": 200000,
            "future": 100000
        }
    },
    "mod": {
        "sys_analyser": {
            "benchmark": "000300.XSHG"
        },
        "ams": {
            "enabled": True,
            "ams_product": "https://username:password@www.ricequant.com/workspace/product",
            # 上传的产品地址,需修改对应的用户名、密码、工作空间名称(或id)、产品名称(或id)
          	"reset_trades": True,
            # 是否重置流水,重置表示删除start_date之后的流水再重新上传
        }
    }
}
if __name__ == '__main__':
    result = run_func(config=config, handle_bar=handle_bar)
    for key, value in result["sys_analyser"].items():
        print(key)
        print(value)

# 持仓单管理

# 给资产单元导入持仓单

rqamsc.upload_positions_statement_file(
        product_id_or_name: str, asset_unit_id: Union[str, ObjectId],
        file_path_or_bytes: Union[str, bytes, BufferedReader, BytesIO],
        broker: str = 'ricequant'
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 需要导入流水的产品 id 或产品名称
asset_unit_id str or ObjectId 是 需要导入的资产单元 id
file_path_or_bytes str or bytes or BufferedReader 是 需要导入流水的文件地址 或 字节码 或 文件句柄
broker str 否 需要导入的持仓单模板类型,目前支持模板如下(默认为 RQ 通道):
1. RQ 通道: ricequant
2. 中信 DMA: citic_dma
3. 中金 DMA: cicc_dma
4. 招商 DMA: cms_dma
  • 返回
字段 类型 是否必须 说明
confirmation_id str 是 凭证 id
date str 是 持仓单日期
effect_count int 是 该条持仓单导入情况 0 表示未导入, 1 表示已导入
err_msg list 是 持仓单中具体每条持仓导入失败情况

# 获取资产单元持仓单

rqamsc.get_positions_statement(
        product_id_or_name: str, asset_unit_id: str, start_date: datetime_like, end_date: datetime_like
) -> List[Dict]
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品 id 或产品名称
asset_unit_id str 是 资产单元 id
start_date int,str,datetime,date 是 开始日期
end_date int,str,datetime,date 是 结束日期
  • 返回
字段 类型 是否必须 说明
positions_statement_id str 是 持仓单 id
date str 是 持仓单日期
file_name str 是 持仓单文件名
positions List[Dict] 是 持仓详情
asset_class str 是 资产类型
direction str 是 持仓方向
    order_book_id str 是 资产代码
    symbol str 是 资产名称
    quantity float 是 持仓数量

# 删除资产单元持仓单

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

# 估值表管理

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

rqamsc.list_inserted_valuation_reports(
        product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None,
) -> List[Dict]
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品 id 或产品名称
start_date int,str,datetime,date 否 开始日期,不填默认产品开始日期
end_date int,str,datetime,date 否 结束日期,不填则表示今日
  • 返回
参数 类型 是否必须 说明
date str 是 估值表日期
file_name str 是 估值表名称
valuation_report_id str 是 估值表 id
# 返回数据示例:
result = [
    {
        'date': '2022-03-25',
        'file_name': '估值表文件名称',
        'valuation_report_id': '6243c819894ef8b1047b99d9'
    }
]

# 给产品导入估值表

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

BytesIO 对象设置文件名称

import rqamsc
from io import BytesIO
bytes_data = b'xxxxxx' # 从文件读取的字节码
bytesio_object = BytesIO(bytes_data)
bytesio_object.name = '估值表文件名称'
rqamsc.init(username='用户名', password='密码')
res = rqamsc.upload_valuation_reports_in_directories('一个产品', bytesio_object)
print(res)
  • 返回
字段 类型 是否必须 说明
file str 是 估值表文件名
err_msg Union[List[str], str] 是 估值表识别错误提示
confirmation_id str 否 凭证 id

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

rqamsc.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]

可参考 给产品导入估值表


# 删除产品已导入的估值表

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

# 下载已导入的估值表文件

rqamsc.download_product_valuation_reports(
        product_id_or_name: str, report_save_path: str, start_date: optional_datetime_like = None,
        end_date: optional_datetime_like = None
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品 id 或产品名称
report_save_path str 是 文件保存地址
start_date int,str,datetime,date 否 开始日期,不填默认产品开始日期
end_date int,str,datetime,date 否 结束日期,不填则表示今日
  • 返回
字段 类型 是否必须 说明
successful List[Dict] 否 下载成功的估值表信息
    file_name str 是 估值表文件名称
failed List[Dict] 否 下载失败的估值表信息
    file_name str 是 估值表文件名称
    reason str 是 下载失败原因

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

rqamsc.run_vr_importer(
        user_name=None, password=None, workspace=None, ams_uri=None, ssl_verify=True, config_file='config.yaml', mode='full'
)

对于存放在本地的估值表文件,可使用如下方式自动导入 AMS

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

# 持仓及衍生指标

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

rqamsc.get_balance(
        product_like_id_or_name: str, dt: optional_datetime_like = None, auto_retry_valuation: bool = True
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)的 id 或名称
dt int,str,datetime,date 否 日期,未来时间或不填则表示获取实时持仓
auto_retry_valuation bool 否 当估值计算未完成时是否自动继续请求, 默认自动请求
  • 返回
字段 子字段 类型 是否必须 说明
units float 是 份额
unit_net_value float 是 单位净值
acc_unit_net_value float 是 累计净值
adjusted_net_value float 是 复权净值
total_assets float 是 总资产
total_equity float 是 净资产
daily_pnl float 是 当日盈亏
daily_returns float 是 当日盈亏率
risk_exposure float 是 风险总敞口
net_risk_exposure float 是 风险净敞口
positions list[dict] 是 持仓
order_book_id str 是 合约 id
symbol str 是 合约名称
asset_class str 是 合约资产类型
direction str 是 持仓方向
quantity float 是 持仓数量
avg_price float 是 开仓均价
avg_price_include_fee float 是 开仓均价(含费)
fair_value float 是 公允价格
market_value float 是 市值
clean_price_market_value float 是 净价市值
floating_pnl float 是 浮动盈亏
floating_pnl_percentage float 是 浮动盈亏率
accrued_interest float 否 应记利息
exchange_rate float 是 汇率
currency str 是 币种
bonus_share_receivable float 否 应收红股
asset_unit_id str 否 资产单元 id
children list[dict] 否 对应资产单元下的子持仓,结构可直接参考产品头寸顶层的 positions

# 获取产品或产品组指标

rqamsc.get_indicators(
        product_like_id_or_name: str,
        start_date: optional_datetime_like = None,
        end_date: optional_datetime_like = None,
        auto_retry_valuation: bool = True, **kwargs
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)的 id 或名称
start_date int,str,datetime,date 否 开始日期,不填表示产品(组)开始日期
end_date int,str,datetime,date 否 结束日期,不填则表示昨日
benchmark(关键字参数) str 否 基准(默认使用产品(组)中所设置基准),所传值如 000300.XSHG 或 自定义基准 id
extra_indicators(关键字参数) str 否 额外指标,可指定额外返回以下指标(多个指标使用英文逗号相连)
1.returns_summary: 收益概览
2. asset_series: 组合指标序列
3. benchmark_series: 基准收益序列
4. excess_returns: 主动收益序列
5. monthly_returns: 组合年月周度收益
6. leverage_ratio: 杠杆率序列
7. ashares_market_value: 市值分布
8. annual_risk: 年度风险指标
auto_retry_valuation bool 否 当估值计算未完成时是否自动继续请求, 默认自动请求
  • 返回
字段 子字段 孙字段 类型 是否必须 说明
daily_risk / weekly_risk / monthly_risk dict 是 区间日/周/月频业绩总览指标
alpha float 是 阿尔法
information_ratio float 是 信息比率
beta float 是 贝塔
sharpe float 是 夏普率
excess_sharpe float 是 超额夏普率
annual_tracking_error float 是 年化跟踪误差
annual_downside_risk float 是 年化下行风险
annual_volatility float 是 年化波动率
arithmetic_excess_annual_return float 是 年化(算术)超额收益
geometric_excess_annual_return float 是 年化(几何)超额收益
excess_annual_volatility float 是 年化超额波动率
max_drawdown float 是 最大回撤
geometric_excess_max_drawdown float 是 (几何)超额最大回撤
annual_risk dict 否 区间内年度总览指标
daily_risk / weekly_risk / monthly_risk dict 否 每年日/周/月频业绩指标
alpha float 是 年度阿尔法
information_ratio float 是 年度信息比率
beta float 是 年度贝塔
correlation float 是 年度相关系数
sharpe float 是 年度夏普率
excess_sharpe float 是 年度超额夏普率
dividend_ratio float 是 年度分红率
annual_tracking_error float 是 年度年化跟踪误差
annual_downside_risk float 是 年度年化下行风险
excess_annual_return float 是 年度年化超额收益
annual_volatility float 是 年度年化波动率
arithmetic_excess_annual_return float 是 年度年化(算术)超额收益
geometric_excess_annual_return float 是 年度年化(几何)超额收益
excess_annual_volatility float 是 年度年化超额波动率
max_drawdown float 是 年度最大回撤
geometric_excess_max_drawdown float 是 年度(几何)超额最大回撤
total_returns float 是 年度总收益
total_annual_returns float 是 年度年化总收益
total_geometric_excess_return float 是 年度(几何)超额收益
total_arithmetic_excess_return float 是 年度(算术)超额收益
returns_summary dict 否 期间收益概览
total float 是 期间收益
arithmetic_excess float 是 期间(算术)超额收益
geometric_excess float 是 期间(几何)超额收益
annual float 是 期间年化收益
annual_oneside_turnover_rate float 是 年化单边换手率
this_week float 是 近一周收益
this_month float 是 近一月收益
this_quarter float 是 近一季度收益
this_year float 是 近一年收益
asset_series list[dict] 否 组合指标序列
daily / weekly /monthly dict 否 组合日/周/月指标序列
date str 是 日期
daily_returns float 是 每日收益率
cumulative_returns float 是 累计收益率
benchmark_series list[dict] 否 基准收益序列
daily dict 否 基准日/周/月收益序列
date str 是 日期
daily_returns float 是 每日收益率
cumulative_returns float 是 累计收益率
weekly / monthly dict 否 基准周/月收益序列
date str 是 日期
benchmark_returns float 是 周/月度收益率
benchmark_cumulative_returns float 是 周/月度累计收益率
excess_returns list[dict] 否 超额收益序列
daily / weekly /monthly dict 否 日/周/月度超额收益序列
date str 是 日期
daily_arithmetic_excess_returns float 是 当日(算术)超额收益率
cumulative_arithmetic_excess_returns float 是 累计(算术)超额收益率
cumulative_geometric_excess_returns float 是 累计(几何)超额收益率
monthly_returns list[dict] 否 年月周度收益
date str 是 年度(2022)
portfolio_returns float 是 组合收益
benchmark_returns float 是 基准收益
arithmetic_excess_returns float 是 (算术)超额收益
geometric_excess_returns float 是 (几何)超额收益
children list[dict] 是 月度收益数据
date str 是 月度(2022-01)
portfolio_returns float 是 组合收益
benchmark_returns float 是 基准收益
arithmetic_excess_returns float 是 (算术)超额收益
geometric_excess_returns float 是 (几何)超额收益
children list[dict] 是 周度收益数据
children.date str 是 周度(1,表示第一周)
children.portfolio_returns float 是 组合收益
children.benchmark_returns float 是 基准收益
children.arithmetic_excess_returns float 是 (算术)超额收益
children.geometric_excess_returns float 是 (几何)超额收益
leverage_ratio list[dict] 否 杠杆率
daily / weekly / monthly dict 否 日/周/月度杠杆率
date str 是 日期
total_asset float 是 总资产
total_equity float 是 净资产
leverage_ratio float 是 杠杆率
ashares_market_value dict 否 市值分布
sh_market_value float 是 沪市市值
sz_market_value float 是 深市市值
sh_market_value_prev float 是 T-21 到 T-2 之间的沪市市值平均值
sz_market_value_prev float 是 T-21 到 T-2 之间的深市市值平均值

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

rqamsc.get_indicators_series(
        product_like_id_or_name: str,
        start_date: optional_datetime_like = None,
        end_date: optional_datetime_like = None,
        indicators: Optional[List[str]] = None,
        auto_retry_valuation: bool = True
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)的 id 或名称
start_date int,str,datetime,date 否 开始日期,不填表示昨日
end_date int,str,datetime,date 否 结束日期,不填则表示昨日
indicators List[str] 否 可指定所需指标, 不传默认返回全部指标, 可选指标如下:
1. 单位净值: unit_net_value
2. 累计净值: acc_unit_net_value
3. 复权净值: adjusted_net_value
4. 总资产: total_assets
5. 净资产: total_equity
6. 当日盈亏: daily_pnl
7. 权益净敞口:equity_net_exposure
8. 现金:cash
9. 买入金额: buy_amount
10. 卖出金额: sell_amount
11. 净投入:net_cash_in
12. 申购份额:subscribe_units
13. 申购金额:subscribe_amount
14. 赎回份额:redeem_units
15. 赎回金额:redeem_amount
16. 风险总敞口: risk_exposure
17 风险净敞口: net_risk_exposure
auto_retry_valuation bool 否 当估值计算未完成时是否自动继续请求, 默认自动请求
  • 返回
字段 子字段 类型 是否必须 说明
指标名称 dict 是
日期 str 是 key 为日期, value 所对应指标当日的值

e.g.

{
    "unit_net_value": {
        "2015-01-01": 1,
        "2015-01-02": 1.1,
        "2015-01-03": 1.3
    },
    "daily_pnl": {
        "2015-01-01": 1000,
        "2015-01-02": 1000,
        "2015-01-03": 1000
    }
    ...
}

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

rqamsc.get_asset_snapshot(
        product_like_id_or_name: str, fields: List[str] = None, flatten_positions=True,
        auto_retry_valuation: bool = True
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)id 或名称
fields List[str] 否 除默认字段外,可指定返回一些额外字段如:
1. risk_exposure: 风险总敞口
2. net_risk_exposure: 风险净敞口
3. excess_returns: 超额收益
flatten_positions bool 否 是否将持仓平铺, 默认平铺
auto_retry_valuation bool 否 当估值计算未完成时是否自动继续请求, 默认自动请求
  • 返回
字段 子字段 类型 是否必须 说明
date str 是 日期
name str 是 产品名称
unit_net_value float 是 单位净值
units float 是 份额
prev_unit_net_value float 是 昨日净值
total_assets float 是 总资产
total_equity float 是 净资产
total_liabilities float 是 总负债
daily_pnl float 是 当日盈亏
daily_returns float 是 当日盈亏率
long_market_value float 是 多头市值
short_market_value float 是 空头市值
capital_efficiency float 是 资金使用率(期货杠杆率)
returns_from_establish float 是 成立以来回报率
pnl_this_year float 是 今年以来盈亏(元)
returns_this_year float 是 今年以来盈亏(%)
risk_exposure float 否 风险总暴露
net_risk_exposure float 否 风险净敞口
long_leverage float 否 多头杠杆倍数
long_net_risk_exposure float 否 多头净暴露
benchmark_returns float 否 基准收益率
excess_returns float 否 超额收益率
positions list[dict] 否 持仓明细
order_book_id str 是 合约 id
symbol str 是 合约名称
asset_class str 是 合约资产类型
direction str 是 持仓方向
quantity float 是 持仓数量
price_change float 是 涨跌
price_change_percentage float 是 涨跌幅度
avg_price float 是 开仓均价
avg_price_include_fee float 是 开仓均价(含费)
fair_value float 是 公允价格
price_limit optional[str] 是 是否涨跌停: 涨停(limit_up); 跌停(limit_down); 未发生涨跌停则为空
has_settlement bool 是 是否已更新结算价
market_value float 是 市值
clean_price_market_value float 是 净价市值
floating_pnl float 是 浮动盈亏
floating_pnl_percentage float 是 浮动盈亏率
accrued_interest float 是 应记利息
exchange_rate float 是 汇率
currency str 是 币种
bonus_share_receivable float 是 应收红股
update_time str 是 公允价更新时间

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

rqamsc.get_balance_series(
        product_like_id_or_name: str, start_date: optional_datetime_like, end_date: optional_datetime_like = None,
        fields: Optional[List[str]] = None, auto_retry_valuation: bool = True
) -> List[Dict]
  • 参数
参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)的 id 或名称
start_date int,str,datetime,date 是 开始日期
end_date int,str,datetime,date 否 结束日期,不填则表示今日
fields List[str] 否 除必须字段可选择返回的持仓字段,不填则仅返回必须的持仓字段,字段值可参考下述返回的持仓字段
auto_retry_valuation bool 否 当估值计算未完成时是否自动继续请求, 默认自动请求
  • 返回

List 中字典结构如下

字段 子字段 类型 是否必须 说明
date str 是 日期
total_assets float 是 总资产
total_equity float 是 净资产
daily_pnl float 是 当日盈亏
daily_returns float 是 当日盈亏率
positions list[dict] 否 持仓明细
order_book_id str 是 合约 id
symbol str 是 合约名称
asset_class str 是 合约资产类型
direction str 是 持仓方向
quantity float 是 持仓数量
market_value float 是 市值
price_change float 否 涨跌
price_change_percentage float 否 涨跌幅度
avg_price float 否 开仓均价
avg_price_include_fee float 否 开仓均价(含费)
fair_value float 否 公允价格
clean_price_market_value float 否 净价市值
daily_pnl float 否 当日盈亏
daily_pnl_rate float 否 当日盈亏率
floating_pnl float 否 浮动盈亏
floating_pnl_percentage float 否 浮动盈亏率
accrued_interest float 否 应记利息
bonus_share_receivable float 否 应收红股
acc_dividend_received float 否 累计股息收入
acc_interest_received float 否 累计利息收入

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

rqamsc.get_weekly_net_value_report(
        product_id_or_name: str, report_save_path: str, start_date: optional_datetime_like = None,
        end_date: optional_datetime_like = None, auto_retry_valuation: bool = True
) -> str

参数

参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)的 id 或名称
report_save_path str 是 报告 excel 保存路径(到文件夹)
start_date int,str,datetime,date 否 开始日期
end_date int,str,datetime,date 否 结束日期
auto_retry_valuation bool 否 当估值计算未完成时是否自动继续请求, 默认自动请求

返回

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


# 绩效归因

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

rqamsc.get_performance_attribution(
        product_like_id_or_name: str, start_date: optional_datetime_like, end_date: optional_datetime_like,
        benchmark_id: Union[ObjectId, str] = '000300.XSHG', template: PATemplate = PATemplate.BRINSON,
        industry_standard: str = 'sws', drilldown: bool = False, only_returns_decomposition: bool = False
) -> Dict
  • 参数
参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)的 id 或名称
start_date int,str,datetime,date 是 开始日期
end_date int,str,datetime,date 是 结束日期
benchmark_id Union[ObjectId, str] 否 基准 id(默认为沪深 300):
1. 沪深 300: 000300.XSHG
2. 中证 500: 000905.XSHG
3. 中证 800: 000906.XSHG
4. 中证 1000: 000852.XSHG
5. 米筐小市值概念指数: 866002.RI
6. 一年期国债: china_treasury_bonds
7. 自定义基准:传合约 id 即可
template PATemplate 否 分析模板 可参考 PATemplate,默认为 brinson 归因
industry_standard str 否 行业分类(默认为申万一级):
1. 申万一级: sws
2. 中信一级: citics
3. 申万二级: sws_second
4. 中信二级: citics_second
  • 返回
字段 类型 是否必须 说明
attribution Dict 是
  brinson Dict 否 brinson 归因结果
    industry float 是
    allocation_risk float 是
    selection_risk float 是
    interaction_risk float 是
    allocation_return float 是
    portfolio_weight float 是
    benchmark_weight float 是
    selection_return float 是
  factor_attribution Dict 否 因子贡献
    type str 是
    factors List[Dict] 是
      factor str 是
      portfolio_return float 是
      portfolio_exposure float 是
      benchmark_return float 是
      benchmark_exposure float 是
      portfolio_risk float 是
      benchmark_risk float 是
      active_risk float 是
      active_exposure float 是
      active_return float 是
  factor_exposure Dict 否 因子暴露度
    factor str 是
    data List[Dict] 是
      date str 是
      portfolio float 是
      normalized float 是
      active float 是
  sensitivity Dict 否 敏感性
    date str 是
    data List[Dict] 是
      factor str 是
      portfolio float 是
      t_statistics float 是
return_decomposition List[Dict] 否
  factor float 是
  value float 是
  chlidren Optional[List[Dict]] 是 拆解后的子收益,结构同父节点

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

rqamsc.get_returns_decomposition(
        product_like_id_or_name: str, start_date: optional_datetime_like, end_date: optional_datetime_like,
        benchmark_id: Union[ObjectId, str] = '000300.XSHG'
) -> List
  • 参数
参数 类型 是否必须 说明
product_like_id_or_name str 是 产品(组)的 id 或名称
start_date int,str,datetime,date 是 开始日期
end_date int,str,datetime,date 是 结束日期
benchmark_id Union[ObjectId, str] 否 基准 id(默认为沪深 300):
1. 沪深 300: 000300.XSHG
2. 中证 500: 000905.XSHG
3. 中证 800: 000906.XSHG
4. 中证 1000: 000852.XSHG
5. 米筐小市值概念指数: 866002.RI
6. 一年期国债: china_treasury_bonds
7. 自定义基准:传合约 id 即可
  • 返回

列表内元素结构如下

字段 类型 是否必须 说明
  factor float 是
  value float 是
  chlidren Optional[List[Dict]] 是 拆解后的子收益,结构同父节点

# 自定义基准管理

# 查看自定义基准列表

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


# 创建一个自定义基准

rqamsc.create_customized_benchmark(customized_benchmark: Union[Dict, CustomizedBenchmark]) -> CustomizedBenchmark
  • 参数
    customized_benchmark 参数构建可参考 CustomizedBenchmark

  • 返回

CustomizedBenchmark


# 获取某个自定义基准信息

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

CustomizedBenchmark


# 更新某个自定义基准信息

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

# 删除某个自定义基准

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

# 自定义合约管理

# 查看自定义合约列表

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

CustomInstruments


# 新增自定义合约

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

CustomInstruments

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

# 获取某个自定义合约价格

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

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

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

# 删除某些自定义合约

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

# 托管事件管理

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

rqamsc.list_custodian_events(
        product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None,
) -> List[CustodianEvent]
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品名称或 id
start_date str 否 只获取该日期之后的托管事件,若该字段为空则不做范围限制
end_date str 否 只获取该日期之前的托管事件,若该字段为空则不做范围限制
  • 返回

List[CustodianEvent]


# 给某个产品增加托管事件

rqamsc.insert_custodian_events(
        product_id_or_name: str, custodian_event_or_list: Union[Dict, CustodianEvent, List[Dict], List[CustodianEvent]]
) -> Dict
custodian_event_or_list参数示例:
custodian_event_or_list = [
    {'custodian_event_type': 'subscription_fund_received', 'date': '2022-04-12', 'amount': 412},
    CustodianEvent(
        custodian_event_type='product_cost_paid',
        product_cost_type='management_fee',
        date='2022-05-06',
        amount=101,
    ),
    CustodianEvent(
        custodian_event_type='subject_adjusted',
        adjust_operation='increase',
        adjust_target='current_deposit', # 活期存款
        date='2022-05-06',
        amount=101,
    ),
]
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品名称或 id
custodian_event_or_list Union[Dict, CustodianEvent, List[Dict], List[CustodianEvent]] 是 托管事件(对象/字典) 或 托管事件(对象/字典) 组成的列表
  • 返回
字段 类型 是否必须 说明
effect_count int 是 成功导入的托管事件数量

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

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

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

  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品名称或 id
custodian_event Union[Dict, CustodianEvent] 是 托管事件(对象/字典), 尽量包含该托管事件所需的全部字段信息(id 等)
  • 返回
字段 类型 是否必须 说明
effect_count int 是 是否修改成功(1 表示成功 0 表示失败)

# 删除产品的一些托管事件

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

# 份额事件管理

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

rqamsc.list_unit_events(
        product_id_or_name: str, start_date: optional_datetime_like = None, end_date: optional_datetime_like = None, include_auto_units: bool = False
) -> List[UnitEvent]
  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品名称或 id
start_date int,str,datetime,date 否 只获取该日期之后的份额事件,若该字段为空则不做范围限制
end_date int,str,datetime,date 否 只获取该日期之前的份额事件,若该字段为空则不做范围限制
include_auto_units bool 否 是否返回自动份额事件,默认为 False(只返回手工录入的份额事件)
  • 返回

List[UnitEvent]


# 给某个产品增加份额事件

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

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

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

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

  • 参数
参数 类型 是否必须 说明
product_id_or_name str 是 产品名称或 id
unit_event Union[Dict, UnitEvent] 是 若传对象可参考 份额事件(对象), 字典可以仅传修要修改的字段
  • 返回
字段 类型 是否必须 说明
effect_count int 是 是否修改成功(1 表示成功 0 表示失败)

# 删除产品的一些份额事件

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

# 自定义指标管理

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

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

具体可参考如下格式

{
    "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"
            }
        ]
    }
}

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

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

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

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

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

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

# API 对象及属性值

# 工作空间对象

字段 类型 说明
id str 工作空间 id
name str 工作空间名称
admin str 工作空间管理员 id
capacity str 工作空间人数上限
ctime str 工作空间创建时间
description str 工作空间描述
users str or list 工作空间的成员列表

# 产品对象

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

import datetime
from bson import ObjectId
from rqamsc import Product, ValuationSettings, ETFValuationAccordingField, ExchangeRateSettings, ExchangeRateType
product_doc = {
    "_id": ObjectId("6177c9ea528f3ac1ce662abb"),
    "name": "300估值因子增强_347418",
    "data_source": "trade_and_valuation_report",
    "start_date": datetime.datetime(2019, 1, 3),
    "trading_start_date": datetime.datetime(2019, 1, 3),
    "investment_category": "equity",
    "strategy_category": "index_enhanced",
    "realtime_period_type": "daytime",
    "benchmark": {
        "type": "index",
        "id": "000300.XSHG"
    },
    "calendar": "exchange",
    "accounts": [
        {
            "name": "300估值因子增强_托管账户",
            "is_custodian": True,
            "account_number": "3eb0b699-7ca8-481a-883a-25ff81ea8ad0",
            "broker": "ricequant"
        },
        {
            "name": "300估值因子增强_交易账户",
            "is_custodian": False,
            "account_number": "8e6827c0-3bdf-4c17-b7fb-e643af1cb6da",
            "broker": "ricequant"
        }
    ],
    "fee_settings": {},
    "user_id": 12345,
    "workspace_id": ObjectId("5f19620f7e8e904a613f5482"),
    "auto_equity": True,
    "unit_policy": "auto_prev_unit_net_value",
    "full_name": "300估值因子增强_347418_全名",
    "create_time": datetime.datetime(2021, 10, 26),
    "case_number": "",
    "manager": "",
    "invest_advisor": "",
    "invest_manager": "",
    "maturity_date": datetime.datetime(2999, 12, 31),
    "paper_trading": True,
    "valuation_settings": ValuationSettings(etf=ETFValuationAccordingField.iopv),
    "exchange_rate_settings": ExchangeRateSettings(HKD=ExchangeRateType.sh)
}
# 使用 from_doc 方法将dict数据转化为产品对象
product = Product.from_doc(product_doc)
# 即可调用对象属性
product_id = product.id  # ObjectId("6177c9ea528f3ac1ce662abb")    note: _id被转换为id
trading_start_date = product.trading_start_date  # datetime.datetime(2019, 1, 3)
# 产品对象也可以使用 to_dict 方法转化为字典
product.to_dict()  # 输出结果即与product_doc一致    note: 对象中的id字段在字典中key仍为id
字段 子字段 类型 是否必须 说明
id str 是 产品 id(不可修改)
user_id str 是 创建者 id(不可修改)
workspace_id str 是 所属 workspace id(不可修改)
name str 是 产品名称
full_name str 是 产品全名
report_name str 是 产品报告名称,主要用于对外。 如导出周度报告时报告名称会以该名称命名
start_date datetime,date 是 产品开始日期
trading_start_date datetime,date 是 产品开始交易日期
data_source str 是 产品数据来源(不可修改):
1. 交易流水及估值表类型产品(trade_and_valuation_report)
2. 交易流水型产品(trade)
3. 估值表类型产品(valuation_report)
benchmark dict 是 产品基准
type str 是 基准类型:
1. index(目前仅支持沪深 300、中证 500 以及中证 1000)
2. customized_index 为自定义基准
id str 是 index 的基准代码 或 自定义基准的 id
calendar str 是 产品日历:
1. 交易所日历(exchange)
2. 银行间交易日历(interbank)
3. 自然日(natural)
auto_equity bool 是 是否自动权益
unit_policy str 是 份额管理方式:
1. 自动份额管理(auto_prev_unit_net_value)
2. 手动份额管理(manual)
accounts List[dict], List[ProductAccount] 是 账户信息
account_number str 是 资金账号
name str 是 账户名称
broker str 是 账户通道
is_custodian bool 是 是否是托管账户
fee_settings dict, ProductFeeSettings 是 费用信息
management_fee float 是 管理费
custodian_fee float 是 托管费
sales_and_service_fee float 是 销售服务费
operation_fee float 是 运营费
performance_pay float 是 业绩报酬
realtime_period_type str, RealtimePeriodType 是 实时估值类型:
1. daytime: 仅白天 09:30 - 15:00
2. natural: 自然日 09:00 - 02:30 (+1)
3. valuation_day: 估值表日 21:00 - 15:00 (+1)
create_time datetime, str 是 创建时间
paper_trading bool 是 False: 实盘交易
True: 模拟交易
investment_category str, ProductInvestmentCategory 是 投资类型
strategy_category str, StrategyCategory 是 策略类型:
1. index_enhanced: 指数增强
2. equity_market_neutral: 市场中性
3. stock_long: 股票多头
4. commodity_trading_advisor: CTA
5. mixed: 混合策略
6. long_short_stock: 股票多空
7. stock_leverage_neutral: 股票杠杆中性
8. stock_leverage_long_short: 股票杠杆多空
9. unconventionality: 其他
valuation_settings dict, ValuationSettings 否 设置资产估值方式
etf str, ETFValuationAccordingField 否 ETF 基金估值设置:
1. close: 收盘价
2. iopv: 当日净值
fut_opt str, FutOptValuationAccordingField 否 期货期权估值设置:
1. close: 收盘价
2. settlement: 结算价
acc_net_value str, AccUnitValueValuationAccordingField 否 累计净值估值设置:
1. acc_unit_dividend: T 日单位净值+产品起始日至今累计单位份额分红
2. last_unit_net_value: T-1 日累计净值+T 日单位净值-T-1 日单位净值+T 日产品单位份额分红
exchange_rate_settings dict, ExchangeRateSettings 否 设置估值汇率
HKD str, ExchangeRateType 否 港股通汇率设置:
1. sh: 沪港通中间价
2. sz: 深港通中间价
case_number str 否 备案号
manager str 否 管理人
invest_advisor str 否 投资顾问
invest_manager str 否 投资经理
maturity_date date, str, none 否 产品到日期
closing_date date, str, none 否 封账日
description str 否 产品描述

# 产品组对象

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

# 估值表对象

字段 子字段 类型 是否必须 说明
date str 是 持仓单日期
total_equity float 是 净资产
units float 是 份额
unit_net_value float 是 单位净值
acc_unit_net_value float 是 单位累计净值
positions List[PositionsSheetPosition] 是 持仓详情
asset_class str 是 资产类型
direction str 是 持仓方向
order_book_id str 是 资产代码
symbol str 是 资产名称
market_value float 是 持仓市值
quantity float 否 持仓数量(现金类资产 可不填,其余必填)
cost_price float 否 单位成本
cost float 否 成本
fair_value float 否 公允价格
accrued_interest float 否 应记利息
sterilisation_market_value float 否 冲销市值(期货类资产必填)

# 交易流水对象

参数 类型 上传时字段是否必须 获取时字段是否会返回 说明
trading_asset_class str 否 否 交易属性, 提供可以提高识别精准度(绝大部分情况可不提供)
asset_class str 否 是 资产类型
transaction_type str 是 是 交易类型
account str 否 是 交易账户名称,不提供则默认第一个产品账户
datetime str,datetime,date 是 是 交易时间
trading_date str,datetime,date 否 是 交易日期
order_book_id str 是 是 合约 id
symbol str 是 是 合约名称
quantity float 否 是 交易数量
price float 否 是 交易价格(回购类所传价格表示利率,如文件中为 1.2 表示利率为 1.2%,可直接传小数 1.2, 也可以传 0.012)
settlement_amount float 否 是 交易金额(涉及金额的交易类型需要设置该字段,eg. 分红、转债回售、付息、出入金、现金存取、基金申购金额等,具体哪些交易类型需要该字段可参考交易类型枚举文档)
commission float 否 是 交易佣金
tax float 否 是 交易税
other_fees float 否 是 其他费用
exchange_rate float 否 是 汇率
remarks str 否 是 备注
source str 否 是 流水来源
foreign_id str 否 是 外部标识 id
asset_unit_id str 否 是 资产单元 id
_id str 否 是 AMS 系统内流水的唯一 id

# 交易流水来源

流水来源取值 流水来源描述
manual 手工录入
settlement_upload 日终结算流水文件导入
1. 上传流水时会删除同账号相同日期下已有的 日终结算流水、日内流水及 open_api 流水,并采用最新上传的流水覆盖
intraday_upload 日内流水文件导入
1. 上传流水时会删除同账号相同日期下已有的 日内流水及 open_api 流水,并采用最新上传的流水覆盖
2. 如果同账号相同日期下已有日终结算流水则不能上传日内流水
open_api rqamsc 导入流水
1. 每次上传流水都视为新增,若流水附带 foreign_id 字段则对相同 foreign_id 的流水覆盖
2. 如果同账号相同日期下已有日终结算流水则不能上传 openapi 流水
3. 流水列表可以传入历史的流水, 但该历史流水导入行为依旧符合上述 1 和 2 两条规则
4. 若流水列表中都为当日流水,则认为符合更加快速的增量估值计算标准,即计算服务会从最新的估值截面应用该批流水,如果日内实时导入交易流水且希望能实时估值能快速响应,应避免使用 open_api 方式上传已导入的当日流水
auto_balance 自动权益下自动生成的流水
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_fund ETF 基金
lof_fund LOF 基金
reits REITS 基金
money_market_fund 货币基金
other_fund 其他基金
commodity_futures 商品期货
commodity_option 商品期权
stock_index_futures 股指期货
stock_index_option 股指期权
interest_rate_futures 利率期货
otc_futures 场外期货
otc_option 场外期权
total_return_swap 收益互换
interest_return_swap 利率互换
other_derivatives 其他衍生品
current_deposit 活期存款(现金类)
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_in ETF 申购划入 ETF 开仓
etf_redeem_transfer_out ETF 赎回划出 ETF 平仓
etf_subscription_transfer_out ETF 申购划出 股票平仓
etf_redeem_transfer_in ETF 赎回划入 股票开仓
etf_cash_replacement_transfer_in ETF 现金替代划入 ✓
etf_cash_replacement_transfer_out ETF 现金替代划出 ✓
etf_cash_difference_transfer_in ETF 现金差额划入 ✓
etf_cash_difference_transfer_out ETF 现金差额划出 ✓
withdraw 活期存款取出 ✓ 不会影响份额
deposit 活期存款存入 ✓ 不会影响份额
loan 活期存款借入 ✓
loan_repayment 活期存款借款归还 ✓
cash_in 入金 ✓ 若产品设置"自动份额管理", 同时会调整份额
cash_out 出金 ✓ 若产品设置"自动份额管理", 同时会调整份额
interest_income 利息收入 ✓
interest_payment 利息支出 ✓
interest_tax_payment 利息税支出 ✓
covered_sell_open 备兑空头开仓
covered_buy_close 备兑空头平仓
holder_match 多头对冲轧平
seller_match 空头对冲轧平
ipo_subscribed 新股申购
shares_allotted 新股中签
subscription_fund_unfrozen 申购款解冻
shares_listed 上市流通
buy_on_margin 融资买入
short_sell 融券卖出
sell_to_repay 卖券还款
buy_to_return 买券还券
return_securities 直接还券
refund_securities 多还退券
dividend_payment 红利入账 ✓
dividend_reinvestment 红利再投资
dividend_tax_payment 红利税支付 ✓
bonus_share 红股
pre_dividend_payment 分红预处理 ✓
pre_bonus_share 送股预处理
dividend_on_borrowed 借券红利 ✓
bonus_share_on_borrowed 借券红股
convertible_sell_back 可转债回售 ✓
convertible_redemption 可转债赎回 ✓
cb_to_stock 转债转股 标的可以是股票或转债
reverse_repo 逆回购
repo 正回购
reverse_repo_repurchase 逆回购购回
repo_repurchase 正回购购回
long_deliver 期货多头交割
short_deliver 期货空头交割
holder_exercise 期权多头行权
seller_exercise 期权空头行权
holder_expire 期权多头到期
seller_expire 期权空头到期
coupon_payment 债券付息 ✓
principal_payment 债券偿付本金 ✓
bond_expire 债券到期

# 持仓方向

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

# 业绩归因模板对象

字段 类型 说明
PATemplate.BRINSON str brinson 归因
PATemplate.FACTOR str 多因子归因
PATemplate.FACTOR_V2 str 多因子归因 V2

# 自定义基准对象

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

字段 类型 是否必须 说明
name str 是 自定义基准名称
type str 是 自定义基准类型, composite(复合指数),fixed_rates(收益率指数)
weights List[CustomizedBenchmarkWeights] 否 composite(复合指数) 时必须有此字段
rates float 否 fixed_rates(收益率指数) 时必须有此字段
id str 是 自定义基准 id, 在创建修改时构建该对象不需要此字段
user_id str 是 创建者 id, 在创建修改时构建该对象不需要此字段
workspace_id str 是 所属 workspace id, 在创建修改时构建该对象不需要此字段
remark str 否 备注信息
  • 对象初始化方式一
import datetime
from rqamsc import CustomizedBenchmark
customized_benchmark = CustomizedBenchmark(
    name='多时段自定义权重基准',
    type='composite',
    weights=[
        {
            'start_date': datetime.date(2015, 1, 1),
            'weights': [
                {'order_book_id': '000001.XSHE', 'weight': 0.5},
                {'order_book_id': '000002.XSHE', 'weight': 0.5}
            ]
        }
    ]
)
  • 对象初始化方式二
# 自定义基准对象可调用方法 from_doc & to_dict 示例如下
import datetime
from rqamsc import CustomizedBenchmark
customized_benchmark_doc = {
    "name": "多时段自定义权重基准",
    "type": "composite",
    "weights": [
        {
            "start_date": "2015-01-01",
            "weights": [
                {
                    "order_book_id": "000001.XSHE",
                    "weight": 0.5
                },
                {
                    "order_book_id": "000002.XSHE",
                    "weight": 0.5
                }
            ]
        }
    ]
}
# 使用 from_doc 可将dict数据转换为相应对象
customized_benchmark = CustomizedBenchmark.from_doc(customized_benchmark_doc)  # 该函数执行结果(customized_benchmark)如下
# 输出 customized_benchmark 对象如下
# CustomizedBenchmark(
#     name='多时段自定义权重基准',
#     type='composite',
#     weights=[
#         {
#             'start_date': datetime.date(2015, 1, 1),
#             'weights': [
#                 {'order_book_id': '000001.XSHE', 'weight': 0.5},
#                 {'order_book_id': '000002.XSHE', 'weight': 0.5}
#             ]
#         }
#     ]
# )
  • 初始化后的对象可直接调用其属性来使用
>>> customized_benchmark.name
多时段自定义权重基准
  • 该对象也可以通过 to_dict 方法转化为字典
>>> customized_benchmark.to_dict()
{
    'name': '多时段自定义权重基准',
    'type': 'composite',
    'workspace_id': None,
    'user_id': None,
    'remarks': None,
    'id': None,
    'weights': [
        {
            'start_date': datetime.date(2015, 1, 1),
            'weights': [
                {'order_book_id': '000001.XSHE', 'weight': 0.5},
                {'order_book_id': '000002.XSHE', 'weight': 0.5}
            ],
            'customized_benchmark_id': None,
            'id': None
        }
    ],
    'rates': 0
}

# 自定义基准成分权重对象

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

字段 子字段 类型 是否必须 说明
start_date str 是 权重开始生效时,修改权重成分时以 start_date 作为搜索条件修改成分数据,若该 start_date 没有搜索到数据则添加该成分到基准中间
customized_benchmark_id str 是 自定义基准 id, 在创建修改时构建该对象不需要此字段
weights List[Dict] 是 自定义基准类型, composite(复合指数),fixed_rates(收益率指数)
order_book_id str 是 权重成分中资产代码
weight float 是 权重成分中资产的权重(权重之和要等于 1)

# 自定义合约对象

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

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

# 托管事件对象

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

字段 类型 是否必须 说明
custodian_event_type str 是 业务类型,字段枚举:
1. 申购款入账(subscription_fund_received)
2. 赎回款出账(redemption_paid)
3. 产品分红(product_dividend_paid)
4. 产品费用实付(product_cost_paid)
5. 科目调整(subject_adjusted)
date str 是 托管事件发生日期
amount float 是 托管事件发生金额
sr_open_date str 否 申赎开放日,只有业务类型为"申购"、"赎回"时必填,一般情况应为出入账日期上一交易日
product_cost_type str 否 产品费用类型,只有在业务类型为"产品费用实付"时为必填,字段枚举:
1. 管理费(management_fee)
2. 托管费(custodian_fee)
3. 业绩报酬(performance_pay)
4. 运营费(operation_fee)
5. 销售服务费(sales_and_service_fee)
adjust_target str 否 科目调整项,只有在业务类型为"科目调整"时为必填,字段枚举:
1.活期存款(current_deposit)
2. 结算备付金(reservation_deposit)
3. 存出保证金(refundable_deposit)
4. 证券清算款(securities_settlement_accounts)
5. 期货清算款(futures_settlement_accounts)
6. 其他应收利息(other_interest_receivable)
7. 应收申购款(subscription_receivable)
8. 其他应收款(other_receivable)
9. 现金类负债(cash_debt)
10. 其他应付利息(other_interest_payable)
11. 计提管理费(management_fee_payable)
12. 计提托管费(custodian_fee_payable)
13. 计提运营费(operation_fee_payable)
14. 计提销售服务费(sales_and_service_fee_payable)
15. 计提业绩报酬(performance_pay_payable)
16. 应付税(tax_payable)
17. 其他应付款(other_payable)
18. 其他类型(other_asset)
19. 其他负债(other_liability)
adjust_operation str 否 科目调整方向,只有在业务类型为"科目调整"时为必填,字段枚举:
1. 调增(increase)
2. 调减(decrease)
3. 调整到(adjust_to)
remarks str 否 可填写该事件的备注信息
net_value_decimals int 否 申赎事件可以通过该字段指定使用小数点后几位净值计算份额变动(不指定则默认4位)
id str 否 托管事件的 id
product_id str 否 托管事件所属产品 id

# 份额事件对象

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

字段 类型 是否必须 说明
date datetime.date 是 事件日期
subscription_units float 否 申购份额(与赎回份额必须二选一)
redemption_units float 否 赎回份额(与申购份额必须二选一)
source str 否 事件来源:
1. 手工录入(manual)
2. 系统自动生成(auto)
id str 否 事件 id
product_id str 否 事件所属产品 id

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

名称 说明
ValuationNotReady 表示产品的估值计算还没有完成(所以无法返回相应指标),通常在指定了 auto_retry_valuation=False 后才会出现该异常
IllegalInput 表示 API 输入有误
UnauthorizedException 表示鉴权失败
ForbiddenException 表示无权执行该操作

e.g.
例 1. 对 ValuationNotReady 异常进行捕获并轮询获取产品持仓信息

import time
import rqamsc
from rqamsc.exception import ValuationNotReady
while True:
    try:
        # 产品未完成估值计算且指明,调用持仓数据时会抛出 ValuationNotReady 异常
        balance_res = rqamsc.get_balance('未计算完成的产品', auto_retry_valuation=False)
        break
    except ValuationNotReady:
        # 正常情况下我们只需轮询等待产品估值状态完成即可拿到持仓数据
        time.sleep(0.5)
print(balance_res)

例 2. 需要抛错并在报错后进行相关的自定义处理

import datetime
import rqamsc
from rqamsc.exception import ValuationNotReady
try:
    # 产品未完成估值计算且指明,调用持仓数据时会抛出 ValuationNotReady 异常
    today_balance = rqamsc.get_balance('未计算完成的产品', auto_retry_valuation=False)
except ValuationNotReady:
    # 记录一下在什么时间当天还未计算出估值头寸
    print(f'{datetime.datetime.now()} 还未计算出头寸')
Last Updated: 4/7/2025, 4:22:19 PM