问题描述
/
解决方案
在 ptrade 量化平台中编写融资融券(两融)策略时,不建议且通常不能直接使用普通的 order 系列接口来进行信用交易操作。ptrade 为两融业务提供了专门的 API 接口,以区分普通账户交易和信用账户交易。
为什么不能使用普通的 order 接口?
普通的 order、order_target、order_value 等接口主要用于普通股票账户的买卖操作。在两融账户中,交易行为被细分为担保品买卖、融资买入、融券卖出、卖券还款、买券还券等多种复杂的业务类型,普通的 order 接口无法表达这些具体的信用交易指令。
两融策略应该使用哪些接口?
在两融策略中,您需要根据具体的业务场景使用 ptrade 提供的融资融券专用函数:
1. 担保品买卖(相当于普通买卖)
如果您只是在两融账户中用自有资金买卖股票(作为担保品),应使用 margin_trade 接口:
margin_trade(security, amount, limit_price=None, market_type=None):担保品买卖。
2. 融资交易
margincash_open(security, amount, limit_price=None, market_type=None):融资买入(向券商借钱买股票)。margincash_close(security, amount, limit_price=None):卖券还款(卖出股票以偿还融资负债)。margincash_direct_refund(value):直接还款(用账户现金直接偿还融资负债)。
3. 融券交易
marginsec_open(security, amount, limit_price=None):融券卖出(向券商借股票卖出)。marginsec_close(security, amount, limit_price=None):买券还券(买入股票以偿还融券负债)。marginsec_direct_refund(security, amount):直接还券(用账户现有的股票直接偿还融券负债)。
代码示例对比
错误做法(在两融策略中直接用 order 试图融资):
def handle_data(context, data):
# 错误:order 接口无法指定为融资买入
order('600570.SS', 100)
正确做法(使用两融专用接口):
def handle_data(context, data):
# 1. 担保品买入(用自有资金)
margin_trade('600570.SS', 100)
# 2. 融资买入(借钱买入)
# 先查询最大可融资买入数量
amount_dict = get_margincash_open_amount('600570.SS')
if amount_dict and amount_dict.get('600570.SS', 0) >= 100:
margincash_open('600570.SS', 100)
总结
在开发 ptrade 两融策略时,请务必摒弃普通账户的 order 接口,全面改用 margin_ 开头的两融专用接口,并结合 get_margincash_open_amount 等两融查询接口来控制仓位和资金风险。