3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade中,将持有的可转债转换成股票(债转股),主要使用的是交易函数 debt_to_stock_order。
以下是关于该函数的详细说明及完整的策略代码示例。
debt_to_stock_order(security, amount)
'110077.SS')。-10。以下是一个完整的策略示例。该策略的逻辑是:
debt_to_stock_order 将所有持仓进行转股。def initialize(context):
"""
初始化函数
"""
# 设定要操作的可转债代码,例如:113050.SS (南银转债)
# 请注意后缀:上海为.SS,深圳为.SZ
g.bond_code = '113050.SS'
# 设置股票池(虽然转股不需要行情驱动,但设置universe是好习惯)
set_universe(g.bond_code)
# 设置一个标志位,防止重复报单(可选)
g.converted = False
def handle_data(context, data):
"""
盘中运行函数,根据频率(分钟或日线)运行
"""
# 如果已经执行过转股,则不再执行
if g.converted:
return
# 获取当前可转债的持仓信息
position = get_position(g.bond_code)
# 检查持仓数量
# position.amount 包含当前总持仓
# position.enable_amount 包含当前可用持仓
current_amount = position.enable_amount
# 如果持有数量大于0,则执行转股
if current_amount > 0:
log.info("检测到持有可转债: %s, 数量: %s, 准备进行转股..." % (g.bond_code, current_amount))
# 调用债转股接口
# 注意:amount必须为负数
order_id = debt_to_stock_order(g.bond_code, -current_amount)
if order_id:
log.info("转股委托已发送,订单ID: %s" % order_id)
g.converted = True
else:
log.error("转股委托发送失败")
else:
log.info("当前未持有可转债 %s,无法转股" % g.bond_code)
如果你希望编写一个更智能的策略,比如当转股溢价率为负(即转股价值高于转债价格,存在套利空间)时才转股,可以使用以下逻辑:
def initialize(context):
# 设置可转债代码
g.bond_code = '113050.SS'
# 对应的正股代码(需要手动查询或通过get_cb_info获取)
g.stock_code = '601009.SS'
set_universe([g.bond_code, g.stock_code])
def handle_data(context, data):
# 1. 获取可转债基础信息(包含转股价)
# 注意:get_cb_info 返回的是所有转债信息的DataFrame,需要筛选
cb_info = get_cb_info()
if cb_info is None or cb_info.empty:
return
# 筛选出当前转债的信息
# 注意:不同版本的pandas语法略有不同,这里使用通用逻辑
target_bond = cb_info[cb_info['bond_code'] == g.bond_code[:6]]
if target_bond.empty:
log.info("未找到转债基础信息")
return
# 获取转股价
convert_price = float(target_bond.iloc[0]['convert_price'])
# 2. 获取当前价格
bond_price = data[g.bond_code]['close']
stock_price = data[g.stock_code]['close']
# 3. 计算转股价值 = (转债面值100 / 转股价) * 正股价格
convert_value = (100.0 / convert_price) * stock_price
# 4. 计算溢价率 = (转债价格 - 转股价值) / 转股价值
premium_rate = (bond_price - convert_value) / convert_value
# 5. 判断逻辑:如果溢价率小于某个阈值(例如 -1%,即负溢价),则进行转股
if premium_rate < -0.01:
position = get_position(g.bond_code)
if position.enable_amount > 0:
log.info("出现负溢价,溢价率: %.2f%%,执行转股" % (premium_rate * 100))
debt_to_stock_order(g.bond_code, -position.enable_amount)
debt_to_stock_order 的 amount 参数必须是负数。Q: debt_to_stock_order 函数在回测中有效吗?
A: 该函数主要设计用于交易模块(实盘或仿真)。在纯回测模式下,PTrade的撮合引擎可能不完全支持复杂的债转股清算逻辑(如T+1到账),建议主要在交易环境中使用。如果在回测中需要模拟,可以直接卖出转债并买入对应价值的股票来近似模拟。
Q: 如何查询转股是否成功?
A: 可以通过 get_orders() 查看委托状态,或者在第二天通过 get_position(正股代码) 查看股票持仓是否增加。
Q: 为什么我的转股委托变成了“废单”?
A: 常见原因包括: