问题描述
解决方案
在PTrade量化交易平台中,针对融资融券业务(两融),可以使用特定的查询函数来获取当前账户针对某只股票的最大可操作数量。
以下是针对融资买入和卖券还款这两个具体场景的API说明及代码示例。
1. 核心API介绍
这两个函数仅支持在PTrade客户端的两融交易模块中使用。
(1) 查询融资买入最大数量
使用 get_margincash_open_amount(security, price=None)。
- 用途:根据当前账户的可用保证金、标的折算率及融资额度,计算某只股票最多可以融资买入多少股。
- 参数:
security: 股票代码(如 '600570.SS')。price: (可选) 限定价格。如果不传,通常按当前最新价计算。
- 返回值:返回一个字典
{股票代码: 最大数量(int)}。
(2) 查询卖券还款最大数量
使用 get_margincash_close_amount(security, price=None)。
- 用途:查询某只股票在进行“卖券还款”操作时,最大可卖出的数量。
- 参数:同上。
- 返回值:返回一个字典
{股票代码: 最大数量(int)}。
2. 策略代码示例
以下代码展示了如何在策略中调用这两个接口,并打印结果。
def initialize(context):
# 设置我们要操作的股票,例如恒生电子
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# ---------------------------------------------------
# 场景一:查询融资买入最大数量
# ---------------------------------------------------
# 获取字典数据
open_amount_dict = get_margincash_open_amount(g.security)
# 判空处理,确保获取到了数据
if open_amount_dict:
# 从字典中提取具体数量
max_buy_amount = open_amount_dict.get(g.security)
log.info("股票 %s 当前最大可【融资买入】数量为: %s 股" % (g.security, max_buy_amount))
# 示例:如果可买数量大于100股,则进行融资买入
# if max_buy_amount >= 100:
# margincash_open(g.security, 100)
else:
log.info("未查询到 %s 的融资买入额度信息" % g.security)
# ---------------------------------------------------
# 场景二:查询卖券还款最大数量
# ---------------------------------------------------
# 获取字典数据
close_amount_dict = get_margincash_close_amount(g.security)
if close_amount_dict:
# 从字典中提取具体数量
max_sell_amount = close_amount_dict.get(g.security)
log.info("股票 %s 当前最大可【卖券还款】数量为: %s 股" % (g.security, max_sell_amount))
# 示例:如果有可卖额度,则卖出还款
# if max_sell_amount > 0:
# margincash_close(g.security, max_sell_amount)
else:
log.info("未查询到 %s 的卖券还款额度信息" % g.security)
3. 注意事项
- 环境限制:上述函数(
get_margincash_open_amount和get_margincash_close_amount)通常仅支持在PTrade客户端(实盘或仿真)的两融交易模块中运行。在普通的回测环境中,如果回测引擎不支持两融柜台的详细模拟,可能会返回空值或报错。 - 返回值类型:接口返回的是一个字典(dict),而不是直接的整数。务必使用
.get(security)来获取具体的数值。 - 价格参数:如果在盘中价格波动剧烈,建议传入
price参数(例如传入涨停价或对手价)来更保守或更精确地计算可买卖数量,防止因价格变动导致资金不足废单。
Q&A
Q: 如果我想查询融券卖出(做空)的最大数量,应该用哪个函数?
A: 融券卖出应使用 get_marginsec_open_amount(security, price=None)。
Q: 如果我想查询买券还券(买入股票还给券商)的最大数量,应该用哪个函数?
A: 买券还券应使用 get_marginsec_close_amount(security, price=None)。
Q: 为什么我在回测中调用这些函数返回 None?
A: 这些函数依赖于柜台的信用资产和授信数据。普通回测环境可能没有模拟完整的信用账户体系,因此这些特定于两融柜台查询的函数可能无法返回数据。建议在仿真或实盘的两融账号中测试。