3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化实盘交易中,许多交易员需要将同一个策略模板部署在不同的资金账号下,或者根据账号资金规模、风险偏好的不同施加差异化的风控规则。PTrade 提供了 get_user_name() API,用于获取当前登录终端的资金账号,从而帮助开发者轻松实现动态账号鉴权与差异化风控管理。
get_user_name() 接口用于获取当前策略运行环境所登录终端的资金账号信息。
str) 或 None(若获取失败/未登录)。user_account = get_user_name()
以下是一个完整的 PTrade 策略示例,展示如何在策略初始化阶段获取资金账号,并根据账号配置不同的风控参数:
# -*- coding: utf-8 -*-
# 定义不同账号的风控配置字典
ACCOUNT_RISK_CONFIG = {
'123456789': {
'max_position_value': 500000.0, # 允许最大持仓市值 50 万
'single_order_amount': 1000, # 单笔下单量 1000 股
'allow_trade': True
},
'987654321': {
'max_position_value': 100000.0, # 允许最大持仓市值 10 万
'single_order_amount': 200, # 单笔下单量 200 股
'allow_trade': True
}
}
def initialize(context):
# 设置主交易标的
g.security = '600570.SS'
set_universe(g.security)
# 获取当前登录的资金账号
g.user_name = get_user_name()
log.info("当前登录资金账号为: %s" % g.user_name)
# 校验资金账号权限与初始化风控配置
if g.user_name in ACCOUNT_RISK_CONFIG:
g.config = ACCOUNT_RISK_CONFIG[g.user_name]
log.info("账号 %s 验证通过,已加载专属风控配置。" % g.user_name)
else:
# 未授权账号默认禁用交易或采用最严格风控
g.config = {
'max_position_value': 0.0,
'single_order_amount': 0,
'allow_trade': False
}
log.warning("账号 %s 未在授权列表中,已开启全止交易保护!" % g.user_name)
def handle_data(context, data):
# 1. 检查风控开关
if not g.config.get('allow_trade', False):
log.warning("当前账号 [%s] 无交易权限,跳过下单逻辑。" % g.user_name)
return
# 2. 检查总持仓市值限制
current_portfolio_value = context.portfolio.positions_value
max_allowed_value = g.config.get('max_position_value', 0.0)
if current_portfolio_value >= max_allowed_value:
log.info("当前持仓市值 (%.2f) 已达该账号允许上限 (%.2f),暂停加仓。" % (
current_portfolio_value, max_allowed_value
))
return
# 3. 执行下单逻辑(带单笔数量限制)
order_amount = g.config.get('single_order_amount', 0)
if order_amount > 0:
# 获取当前持仓
pos = get_position(g.security)
if pos.amount == 0:
log.info("账号 [%s] 触发买入信号,买入数量: %d" % (g.user_name, order_amount))
order(g.security, order_amount)
initialize(context) 中调用 get_user_name() 并绑定到全局变量 g 中,避免在盘中高频回调(如 tick_data 或 handle_data)里重复查询。get_user_name() 能返回真实的券商资金账号;在回测环境中返回值可能会视券商平台配置有所不同,建议提供默认兜底规则。get_user_name() 返回的是简单字符串,直接赋值给 g.user_name 即可完美支持 PTrade 的 pickle 持久化恢复机制。