ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

gs-quant Basket.get_latest_rebalance_data 指南:获取组合最新调仓数据的用法与源码实现

gs-quant Basket.get_latest_rebalance_data 指南:获取组合最新调仓数据的用法与源码实现 gs-quant Basket.get_latest_rebalance_data 指南获取组合最新调仓数据的用法与源码实现【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quantgs-quant 是 Goldman Sachs 开源的量化金融 Python 工具包其中gs_quant.markets.baskets.Basket用于表示、创建与维护自定义篮子basket资产。本文围绕Basket.get_latest_rebalance_data()方法展开讲解如何在 gs-quant 中获取篮子最近一次调仓rebalance的完整数据、其底层 REST API 调用链、初始化校验机制以及它与get_latest_rebalance_date、poll_status等兄弟方法的配合使用方式。读完本文你将掌握组合调仓数据的获取、解析与二次加工方法并能在自己的量化工作流中直接复用这些代码片段。一、方法概览一次调用拿到最新调仓数据Basket.get_latest_rebalance_data()是 gs-quant 为篮子资产提供的一个只读查询方法作用与用法见 方法定义def get_latest_rebalance_data(self) - dict: Retrieve the most recent rebalance data for a basket **Usage** Retrieve the most recent rebalance data for a basket **Examples** Retrieve the most recent rebalance data for a basket from gs_quant.markets.baskets import Basket basket Basket.get(GSMBXXXX) basket.get_latest_rebalance_data() **See also** :func:get_latest_rebalance_date return GsIndexApi.last_rebalance_data(self.id)核心要点返回值类型为dict即最近一次调仓数据的原始字典其具体字段由服务端GET /indices/{id}/rebalance/data/last接口决定详见下文源码链路。方法本身无参数只需要一个已经初始化好的Basket实例即可调用。self.id是篮子的 Marquee 资产 ID它由Basket.get(GSMBXXXX)初始化时解析得到。对应的 API 文档页面为 Basket.get_latest_rebalance_data采用 Sphinxautomethod指令自动生成方法签名与 Docstring 与本文上述源码完全一致。二、底层调用链从 Basket 方法到 REST 接口get_latest_rebalance_data本身是一层薄封装真正的数据请求发生在GsIndexApi.last_rebalance_data。其实现位于 indices.pyclassmethod def last_rebalance_data(cls, id_: str) - dict: Get latest basket rebalance data url f/indices/{id_}/rebalance/data/last return GsSession.current.sync.get(url)调用链可以概括为Basket.get_latest_rebalance_data() └─ GsIndexApi.last_rebalance_data(self.id) └─ GsSession.current.sync.get(/indices/{id}/rebalance/data/last)这条链路说明了两点事实数据来自 Marquee 服务端get_latest_rebalance_data并非本地计算而是向GsSession当前会话绑定的环境生产/QA/开发发起同步GET请求返回dict是 API 响应的直接透传方法不做任何字段解析或类型转换dict的键值结构即 REST 响应结构。2.1 请求 URL 与数据语义端点GET /indices/{id}/rebalance/data/last的含义是「获取该篮子最近一次调仓的数据」{id}为篮子资产 ID如GSMBXXXX解析后的 Marquee ID/rebalance/data/last表示只取最近一次调仓记录而非调仓历史序列。如果需要调仓日期而非完整数据可以改用 get_latest_rebalance_date它的实现复用了同一个底层方法只是多了一步日期解析_validate(ErrorMessage.UNINITIALIZED) def get_latest_rebalance_date(self) - dt.date: ... last_rebalance GsIndexApi.last_rebalance_data(self.id) return dt.datetime.strptime(last_rebalance[date], %Y-%m-%d).date()由此可以推断get_latest_rebalance_data()返回的dict中至少包含一个date键其值格式为%Y-%m-%d如2024-05-31否则get_latest_rebalance_date的strptime解析将无法工作。这是从源码中可以确认的字段事实。三、初始化校验_validate与UNINITIALIZED保护get_latest_rebalance_data上方的装饰器是理解其安全语义的关键_validate(ErrorMessage.UNINITIALIZED) def get_latest_rebalance_data(self) - dict:_validate装饰器的实现位于 baskets.pydef _validate(*error_msgs): Confirms initialization is complete and checks for errors before calling function def _outer(fn): wraps(fn) def _inner(self, *args, **kwargs): if has(self, _Basket__error_messages) and self._Basket__error_messages is not None: if len(self._Basket__error_messages) 1: self._Basket__finish_initialization() for error_msg in error_msgs: if error_msg in self._Basket__error_messages: raise MqError(error_msg.value) return fn(self, *args, **kwargs) return _inner return _outer其行为逻辑是若Basket实例尚未完成初始化存在未解决的错误信息先尝试_finish_initialization()补齐若ErrorMessage.UNINITIALIZED仍存在于错误集合中则抛出MqError错误信息为Basket class object must be initialized using one of an existing baskets identifiers to perform this action也就是说必须先通过Basket.get(GSMBXXXX)或create/clone后获得已初始化的实例才能调用get_latest_rebalance_data。未初始化的空Basket()调用该方法会直接报错。这一点在测试中也有明确的断言见 test_baskets.pymock_basket_init(mocker, user_ena, False) basket Basket() with pytest.raises(MqError, matchErrorMessage.UNINITIALIZED.value): basket.clone() with pytest.raises(MqError, matchErrorMessage.UNINITIALIZED.value): basket.get_latest_rebalance_data()测试同时覆盖了clone与get_latest_rebalance_data两个受UNINITIALIZED保护的方法说明「未初始化即调用」是本方法的官方预期异常路径之一。四、API 层单元测试接口契约验证在 API 层GsIndexApi.last_rebalance_data的契约由 test_index.py 验证mock.patch.object(GsIndexApi, last_rebalance_data) def test_basket_last_rebalance_data(mocker): # construct mock response mock_response {reportId: report_id, assetId: basket_id} # setup mock session and api response mock_session() mocker.return_value mock_response # run test response GsIndexApi.last_rebalance_data(basket_id) assert response mock_response测试中构造的示例响应形如{reportId: ..., assetId: ...}即返回字典可能包含reportId最近一次调仓对应的报告 ID与assetId篮子资产 ID等字段。这为实际解析返回字典提供了参考样例可以把reportId与poll_status/poll_report联动追踪调仓报告的最终状态。五、完整实战从获取篮子到解析调仓数据综合上述源码一个完整的「获取最新调仓数据」实战流程如下5.1 前置条件已安装 gs-quant 并完成GsSession的登录/环境配置GsSession.use(...)详见项目 README.md 与 gs_quant/session.py拥有目标篮子的访问权限并已知其标识符RIC、ticker 或 Marquee ID 均可传入Basket.get。5.2 基础用法from gs_quant.markets.baskets import Basket # 1. 获取篮子实例标识符可为 ric/ticker/Marquee ID basket Basket.get(GSMBXXXX) # 2. 获取最近一次调仓数据dict last_rebalance basket.get_latest_rebalance_data() print(last_rebalance) # 3. 只取最近一次调仓日期与 get_latest_rebalance_data 底层同源 rebalance_date basket.get_latest_rebalance_date() print(rebalance_date) # datetime.date 对象如 2024-05-315.3 结合报告状态追踪调仓结果由于返回dict中可能包含reportId见上文 API 层测试样例可以结合poll_report对调仓报告的最终状态进行轮询from gs_quant.markets.baskets import Basket basket Basket.get(GSMBXXXX) data basket.get_latest_rebalance_data() report_id data.get(reportId) if report_id: status basket.poll_report(report_id, timeout120, step20) print(status)关于poll_report/poll_status的参数timeout默认 600 秒、step默认 30 秒与用法可参考 poll_status 的 Docstring。5.4 未初始化实例的异常处理from gs_quant.errors import MqError from gs_quant.markets.baskets import Basket basket Basket() # 未通过已有标识符初始化 try: basket.get_latest_rebalance_data() except MqError as e: print(e) # Basket class object must be initialized using one of an existing baskets identifiers...六、与相邻方法的协作组成调仓数据全景get_latest_rebalance_data只是篮子调仓查询家族中的一员它与以下方法配合可以构成完整的调仓数据工作流全部定义于 baskets.py方法返回类型作用源码位置get_latest_rebalance_data()dict最近一次调仓数据本文主角baskets.py#L360get_latest_rebalance_date()datetime.date最近一次调仓日期baskets.py#L384get_rebalance_approval_status()str最近一次调仓提交的审批状态baskets.py#L411cancel_rebalance()dict撤销未审批的最近一次调仓提交baskets.py#L438poll_status()/poll_report()ReportStatus轮询 create/edit/rebalance 报告状态baskets.py#L330典型应用场景调仓事件检测周期性调用get_latest_rebalance_date()与上次记录的日期对比判断是否发生新调仓调仓结果审计用get_latest_rebalance_data()拿到调仓数据含reportId再用poll_report确认报告完成状态调仓审批流管理get_rebalance_approval_status()判断是否需要人工审批必要时cancel_rebalance()撤回未获批的提交。七、注意事项与边界依赖网络会话本方法发出同步 HTTP 请求需要GsSession已就绪且当前环境可访问 Marquee 服务端生产/QA/开发由GsSession的 domain 决定可参考 get_url 中按环境拼接-dev/-qa的逻辑推断环境差异返回结构依赖服务端dict的具体键值以 API 响应为准源码可确认的字段仅有date%Y-%m-%d格式由get_latest_rebalance_date的解析逻辑反推reportId/assetId等见于测试样例实际字段建议打印后确认必须先初始化未通过Basket.get等途径初始化的实例调用会抛出MqError(UNINITIALIZED)只读方法get_latest_rebalance_data只做查询不产生任何写入操作不会触发调仓或修改篮子配置。八、小结Basket.get_latest_rebalance_data()是 gs-quant 中获取自定义篮子最近一次调仓数据的标准入口它无参、返回dict、受UNINITIALIZED校验保护底层通过GsIndexApi.last_rebalance_data请求GET /indices/{id}/rebalance/data/last端点。配合get_latest_rebalance_date、get_rebalance_approval_status、poll_status等方法可以覆盖「调仓检测 → 数据解析 → 报告追踪 → 审批管理」的完整组合维护闭环。相关源码与测试可分别在 baskets.py、indices.py 与 test_index.py、test_baskets.py 中进一步阅读。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表