问题描述
我在Ptrade策略中使用信用账户下单失败,报错如下:
2024-08-01 13:10:00 - ERROR - 委托失败,错误原因:[250217][资产账号控制表记录不存在]
[p_fund_account=qq-124533718,p_client_id=wx-azhu6713]
解决方案
在 Ptrade 量化平台中,遇到报错 [250217][资产账号控制表记录不存在] 通常是因为账户类型与调用的下单接口不匹配,或者底层账户配置存在异常。针对信用账户(融资融券账户),请按照以下步骤进行排查和解决:
1. 检查是否使用了正确的两融专用下单接口
Ptrade 严格区分普通股票账户和信用账户的下单接口。如果您在信用账户中使用了普通账户的 order()、order_target() 等接口,就会导致系统无法在普通资产表中找到您的账号,从而报出该错误。
信用账户必须使用以下专用接口:
- 担保品买卖:
margin_trade(security, amount, limit_price=None, market_type=None) - 融资买入:
margincash_open(security, amount, limit_price=None, market_type=None) - 卖券还款:
margincash_close(security, amount, limit_price=None) - 融券卖出:
marginsec_open(security, amount, limit_price=None) - 买券还券:
marginsec_close(security, amount, limit_price=None)
错误示例(会导致报错):
def handle_data(context, data):
# 错误:在信用账户中使用了普通账户接口
order('600570.SS', 100)
正确示例:
def handle_data(context, data):
# 正确:使用担保品买入接口
margin_trade('600570.SS', 100)
# 正确:使用融资买入接口
# margincash_open('600570.SS', 100)
2. 确认当前策略的业务类型是否为“融资融券”
在编写策略时,可以通过 get_business_type() 函数来检查当前策略运行的账户环境是否真的是信用账户。
def before_trading_start(context, data):
business_type = get_business_type()
log.info("当前策略的业务类型为:%s" % business_type)
if business_type != 'rzrq':
log.error("警告:当前不是融资融券环境!")
- 如果返回的是
stock,说明您当前登录或绑定的是普通账户,此时调用两融接口也会报错。 - 如果返回的是
rzrq,说明环境正确,请确保全部使用margin_开头的接口。
3. 券商后台账户映射问题
如果您确认已经使用了正确的 margin_trade 等两融接口,且策略环境也是 rzrq,但依然报 [250217] 错误,这通常意味着券商柜台系统或 Ptrade 后台的账户映射存在问题(例如:资金账号未正确同步到 Ptrade 的资产控制表中)。
解决方法:
请直接联系您开户券商的客户经理或 Ptrade 技术支持,提供您的报错截图和资金账号(如报错中的 qq-124533718),请求后台人员核实该信用账户在 Ptrade 系统中的同步状态。