3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade中,如果您想使用账户中持有的股票直接归还融券负债(即“现券还券”),而不是从市场买入股票还券,您需要使用 marginsec_direct_refund 函数。
marginsec_direct_refund(security, amount)
security: 股票代码(例如 '600570.SS')。amount: 还券数量(正整数)。get_margin_entrans_amount(security)
以下是一个完整的策略示例,展示了如何查询最大可还券数量并执行直接还券操作:
def initialize(context):
# 设置我们要操作的股票,假设是恒生电子
g.security = '600570.SS'
set_universe(g.security)
# 设置一个标志位,防止重复操作
g.refund_done = False
def handle_data(context, data):
# 如果已经执行过还券,则不再执行
if g.refund_done:
return
# 1. 查询该股票最大可“现券还券”的数量
# get_margin_entrans_amount 返回的是一个字典,key是股票代码,value是数量
entrans_info = get_margin_entrans_amount(g.security)
if entrans_info is None:
log.info("查询现券还券数量失败或无数据")
return
# 获取具体数量
max_refund_amount = entrans_info.get(g.security, 0)
log.info("股票 %s 当前最大可现券还券数量为: %s" % (g.security, max_refund_amount))
# 2. 如果有可还券数量,执行直接还券
if max_refund_amount > 0:
# 这里演示全部偿还,也可以根据需求指定具体数值,如 100
marginsec_direct_refund(g.security, max_refund_amount)
log.info("已触发直接还券操作,数量: %s" % max_refund_amount)
g.refund_done = True
else:
log.info("当前没有足够的持仓或没有负债用于现券还券")
amount 必须为正整数。系统会自动校验您的持仓数量和负债数量,取两者较小值作为实际可操作上限,但建议先使用 get_margin_entrans_amount 查询。Q1: marginsec_close 和 marginsec_direct_refund 有什么区别?
A1: marginsec_close 是买券还券,即使用资金从二级市场买入股票来偿还融券负债;marginsec_direct_refund 是直接还券(现券还券),即使用账户里已经持有的股票直接抵消融券负债,不涉及资金买入操作。
Q2: 我怎么知道我还欠多少券?
A2: 您可以使用 get_margin_contract() 查询具体的合约负债详情,或者使用 get_marginsec_close_amount(security) 查询买券还券的最大可买数量(这通常等同于您的负债数量)。
Q3: 如果我普通账户有股票,能直接调用这个函数吗?
A3: 不能。PTrade 的两融接口操作的是信用账户。如果股票在普通账户,您需要先在交易软件中进行“担保品划入”,将股票从普通账户转入信用账户,之后才能使用 marginsec_direct_refund。