VeighNa Elite 事前交易风控引擎(RiskManager)配置与规则实战指南
【免费下载链接】vnpy基于Python的开源量化交易平台开发框架项目地址: https://gitcode.com/vnpy/vnpy
导读
本文面向 VeighNa Elite Trader 用户,系统讲解事前交易风控引擎(RiskManager)的完整用法:从模块启动、JSON 风控配置,到内置的 9 类风控规则的参数含义与拦截逻辑。读完本文,你将能够独立编写risk_engine_setting.json配置文件,为自动化交易搭建一套覆盖黑名单、委托限额、自成交、价格偏离、持仓上限、委托流量等场景的事前风控体系,确保每一笔委托在发出前都经过严格检查。
一、模块定位:什么是"事前交易风控"
RiskManager 是 VeighNa Elite Trader 中用于事前交易风控的功能模块。所谓"事前",是指风控检查发生在委托通过交易 API 接口发出之前:用户(或策略程序)每发出一笔委托,都会先经过风控引擎的逐条校验,只有全部规则通过后,委托才会真正送达到交易柜台。
这种"前置拦截"机制与事后风控(如成交后检查、持仓超限告警)形成互补:事前风控在资金风险、违规委托真正暴露之前就将其挡下,是从源头控制交易风险的关键防线。用户可以通过编辑.vntrader文件夹下的risk_engine_setting.json配置文件,便捷地完成风控规则的设定与管理,无需修改任何代码。
历史背景:从 CHANGELOG.md 可以看到,早在 vn.py 2.4.0 版本中,"将事前风控模块剥离到 vnpy_riskmanager 项目中",社区版以独立应用形式存在;而 Elite 版本将事前风控整合进 VeighNa Elite Trader 客户端,内置了更丰富、更细粒度的 9 类风控规则。
二、主要优势
RiskManager 模块的核心优势包括:
- 标准化的风控规则开发模板:模块提供了统一的风控规则开发范式,用户完全可以按照模板自行开发自定义风控规则,与内置规则一起挂载到风控引擎中运行;
- 开箱即用的内置规则库:覆盖从"禁止交易某合约"到"限制持仓集中度"的常见风控诉求,内置规则如下表所示:
| 规则类名 | 中文名称 | 核心作用 |
|---|---|---|
| BlackListRule | 黑名单规则 | 拦截黑名单合约的委托 |
| WhiteListRule | 白名单规则 | 仅放行白名单合约的委托 |
| OrderLimitRule | 委托数量和金额限制规则 | 限制日内撤单次数、单笔委托数量与金额 |
| SelfTradeRule | 自成交限制规则 | 拦截可能造成自成交的委托 |
| RiskLevelRule | 账户风险度限制规则 | 限制保证金风险度 |
| OrderFlowRule | 委托流量限制规则 | 流控委托发出频率与日内总笔数 |
| PriceRangeRule | 价格偏离度规则 | 拦截偏离行情过远的委托价格 |
| PosLimitRule | 持仓上限规则 | 限制多空净总持仓与持仓集中度 |
| TradeValueRule | 日内开仓限制规则 | 限制日内成交敞口变化 |
- 配置驱动、零编码:所有内置规则均通过 JSON 配置文件启用和调参,普通用户即可上手。
三、启动模块
3.1 启动前置条件
RiskManager 模块需要在启动前通过【策略应用】标签页完成加载。启动登录 VeighNa Elite Trader 后,在启动模块之前,请先连接交易接口。等待 VeighNa Elite Trader 主界面【日志】栏输出"合约信息查询成功"之后,再启动模块。
IB 接口特别注意:IB(盈透证券)接口在登录时无法自动获取全部合约信息,只有用户手动订阅行情时才能获取对应合约。因此使用 IB 接口时,需要先在主界面上手动订阅合约行情,再启动模块,否则风控引擎可能因缺失合约信息而无法正常工作。
3.2 进入风控引擎界面
成功连接交易接口后,通过以下任一方式进入风控引擎模块的 UI 界面:
- 点击菜单栏【功能】→【风控引擎】;
- 点击左侧按钮栏中的风控引擎图标。
进入后即可看到风控引擎模块的 UI 界面,界面中会展示风控运行状态、规则配置以及风控日志输出区域。
四、配置风控
事前风控模块负责在委托通过交易 API 接口发出前,检查其状态是否符合各种风控规则。风控规则的配置完全通过编辑 JSON 文件完成。
4.1 配置文件位置与结构
配置文件位于用户目录下的.vntrader文件夹中,文件名为risk_engine_setting.json。一个典型的配置结构如下(仅示例,实际以自身需求为准):
{ "active": true, "black_list": [], "white_list": [], "order_cancel_limit": 100, "order_volume_limit": 100, "order_value_limit": 1000000.0, "risk_level_limit": 0.8, "price_range_limit": 0.05, "order_flow_interval": 10, "order_flow_limit": 50, "total_order_limit": 1000, "contract_setting": { "rb2501.SHFE": { "long_pos_limit": 1000, "short_pos_limit": 1000, "net_pos_limit": 1000, "total_pos_limit": 2000, "oi_percent_limit": 0.2, "trade_value_limit": 5000000.0 } } }说明:上述 JSON 仅为演示各规则字段的组织形式,实际配置时只需包含你要启用的规则所需字段即可。Elite 版风控引擎在读取配置文件时按规则类名逐一加载对应字段。
4.2 规则启用开关(关键)
配置风控规则时,对应规则的active必须设置为true才会启用;设置为false时该规则不会生效。建议先规划好需要启用的规则清单,再统一写入配置并检查 JSON 语法,避免因误设导致风控"形同虚设"或意外拦截正常交易。
4.3 生效与拦截反馈
成功配置风控规则后,启动 VeighNa Elite Trader 并加载风控引擎模块,即可在发出委托之前检查每一笔发出的委托是否符合风控要求。若委托被风控引擎拦截:
- VeighNa Elite Trader 主界面的【日志】栏会输出相应拦截日志;
- 风控引擎的 UI 界面也会同步输出日志,便于即时定位是哪一条规则、哪一项参数触发了拦截。
五、风控规则详解
以下逐一解析 9 类内置风控规则的参数与拦截逻辑,参数后的类型标注为 JSON 配置中的取值类型。
5.1 BlackListRule:黑名单规则
black_list[list[str]]:黑名单列表,元素为合约代码(vt_symbol)。
启用后,凡是在黑名单列表内的vt_symbol发出的委托都会被直接拦截。典型场景:禁用某问题合约、禁止自营与资管账户对敲合约等。
5.2 WhiteListRule:白名单规则
white_list[list[str]]:白名单列表。
启用后,不在白名单列表内的vt_symbol委托都会被拦截。白名单规则适用于"只允许交易固定品种"的强约束场景,与黑名单规则方向相反、逻辑互补。
5.3 OrderLimitRule:委托数量和金额限制规则
order_cancel_limit[int]:日内撤单次数上限;order_volume_limit[int]:单笔委托数量上限;order_value_limit[float]:单笔委托金额上限。
启用后,以下四类委托会被拦截:
- 找不到对应
vt_symbol合约信息的委托(无法核算数量与金额); - 日内撤单次数超过
order_cancel_limit的委托; - 单笔委托数量超过
order_volume_limit的委托; - 单笔委托金额超过
order_value_limit的委托。
其中单笔委托金额由委托价格与委托数量结合合约乘数核算得出,因此合约信息缺失时无法校验金额,这也是"找不到合约信息即拦截"的原因。
5.4 SelfTradeRule:自成交限制规则
该规则无需额外参数。启用后,凡是委托方向与已有未成交委托相反,且委托价格超过未成交委托价格的委托会被拦截。以多头为例:新委托方向为多、已有未成交委托方向为空,且新委托价格大于等于未成交空方向委托价格时,触发拦截。
该规则用于防范自成交(self-trade)风险——即同一账户(或关联账户)的多空委托互相撮合,产生虚假成交量、影响市场公正性,也是交易所重点监控的行为。
5.5 RiskLevelRule:账户风险度限制规则
risk_level_limit[float]:保证金风险度上限(只支持单账户)。
启用后,以下两类委托会被拦截:
- 接口获取不到账户当前资金时发出的委托(无法计算风险度);
- 账户风险度超限的委托,即当账户冻结资金 / 账户余额小于配置的保证金风险度上限
risk_level_limit时发出的委托。
风险度越接近 1 表示资金占用越满、可用资金越紧张,此处"小于"与"上限"的表述需要结合账户风险度的计算口径理解(不同柜台的风险度定义可能相反),配置前请确认所用接口的实际语义。
5.6 PriceRangeRule:价格偏离度规则
price_range_limit[float]:价格偏离度。
启用后,以下两类委托会被拦截:
- 没有获取到对应
vt_symbol实时行情的委托(无法核算偏离度); - 委托价格超过合约涨跌停价的委托,或委托价格超过价格上下限的委托。
其中价格上下限的计算方式为:基于合约最新价,取最新价 × (1 +/- price_range_limit)得到初步上下界后,再取 min/max 并基于合约价格跳动(pricetick)进行调整,最终得到可用于校验的价格区间。该规则是防"乌龙指"(错误价格下单)的核心防线。
5.7 PosLimitRule:持仓上限规则
contract_setting[dict]:按合约粒度配置的持仓限制,结构如下:vt_symbol(key):合约代码;setting(value):该合约的限制参数:long_pos_limit[int]:多头仓位限制;short_pos_limit[int]:空头仓位限制;net_pos_limit[int]:净仓位限制;total_pos_limit[int]:总仓位限制;oi_percent_limit[float]:日内成交净额限制(用于持仓集中度校验)。
启用后,以下委托会被拦截:
- 没有获取到对应
vt_symbol实时行情的委托; - 委托后合约多仓总数量、空仓总数量、净仓总数量、总仓总数量超限的委托;
- 持仓集中度超限的委托。
持仓集中度超限的认定标准:委托后该合约的总仓位超过了"合约持仓量(tick.open_interest)与配置的该合约日内成交净额限制oi_percent_limit的乘积"。即:
集中度上限 = tick.open_interest × oi_percent_limit 总仓位 > 集中度上限 → 拦截该规则用于防止单个合约仓位占比过高,控制流动性风险与市场冲击成本。
5.8 TradeValueRule:日内开仓限制规则
contract_setting[dict]:按合约粒度配置:vt_symbol(key):合约代码;setting(value):trade_value_limit[int]:日内成交敞口变化上限。
启用后,发出委托后与缓存的该合约日内成交敞口累加值超过配置的变化上限时,委托会被拦截。
敞口计算口径:缓存配置合约的每一笔委托成交敞口,均基于委托价格 × 委托数量 × 合约乘数的乘积计算。该规则从"名义成交金额"维度控制单合约的日内开仓规模,防止策略在单一日内累积过大的成交敞口。
5.9 OrderFlowRule:委托流量限制规则
order_flow_interval[int]:委托流控时间窗口(秒);order_flow_limit[int]:给定时间窗口内最多允许发出的委托笔数;total_order_limit[int]:日内总委托笔数上限。
启用后,以下两类委托会被拦截:
- 在配置的流控时间窗口
order_flow_interval内,已发出委托笔数超过order_flow_limit的委托(即单位时间内委托频率超限); - 发出委托笔数超过当日总委托笔数上限
total_order_limit的委托。
日内总委托笔数的统计口径:取决于主引擎查询到的所有委托的长度(即引擎维护的委托列表总量),而非仅统计当前策略产生的委托。该规则是防止高频程序失控"刷单"的最后一道流量闸门。
六、从源码看风控设计要点
结合仓库现状可以进一步理解该模块的设计脉络:
- 核心仓库中,事前风控模块已从主框架剥离(见 CHANGELOG.md 中 2.4.0 版本"将事前风控模块剥离到 vnpy_riskmanager 项目中"),社区版以独立应用的方式通过
main_engine.add_app(RiskManagerApp)挂载(参见 docs/community/app/risk_manager.md 中的脚本加载方式); - Elite 版则将其深度集成进 VeighNa Elite Trader 客户端,规则体系由社区版的"流控、单笔上限、总成交上限、活动委托、合约撤单"扩展为上文 9 类规则,覆盖更完整的事前风控链路;
- 从规则字段设计可以推断,每条规则在引擎内部以独立类实现,统一接收配置并对外暴露"检查委托是否放行"的判定接口,这也正是"标准化风控规则开发模板"的落地形式:新增自定义规则时,只需按模板实现同类判定逻辑并在配置中登记即可挂载运行。
七、实战建议
- 上线顺序:先启用 OrderFlowRule、OrderLimitRule、PriceRangeRule 等"硬约束",确认交易环境稳定后再逐步放开;
- IB 用户:务必先手动订阅合约行情再启动模块,否则合约信息缺失会导致大量委托被误拦;
- 参数校验:
active字段务必确认;修改 JSON 后重启客户端使其生效(或按客户端指引重新加载配置); - 日志监控:运行中密切关注主界面与风控引擎 UI 的日志输出,被拦截的委托会留下完整记录,可据此反推策略参数是否需要调整;
- 盘中调整:发现某规则误伤正常交易时,及时修改
risk_engine_setting.json中对应参数并重新加载,避免影响实盘运行。
【免费下载链接】vnpy基于Python的开源量化交易平台开发框架项目地址: https://gitcode.com/vnpy/vnpy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考