网格低价可转债的标的选取

2022年7月29日 973点热度 3人点赞 0条评论

从研究量化交易这个事开始,断断续续写过许多策略,但是从实盘来讲,用的最多的还是网格策略。原因如下:

1、网格交易赚取的是波动收益,符合当下市场行情特征。

2、网格交易在市场下行阶段分批加仓,上行时分批减仓。低位重仓,高位轻仓,正向收益预期强。

3、网格交易不需要市场有大行情,只要有波动性在,就可以积累差价收益。

实盘系统重构后,增加了对每笔单子利润的记录表格。从6月初开始用重构系统实盘交易以来,通过统计累计的网格利润并对比本金总量,以利润锁定的效率上看,如果能长期保持在这个水平,预期长期年化在15%-20%之间。

目前我的持仓主要集中在地产ETF,游戏ETF,医疗ETF上。还有一部分仓位在做可转债网格。在这个基础上,如果要通过网格交易策略提高整体收益,需要对投资标的重新进行选择。我目前的计划是,后续清仓基建ETF,腾出仓位继续网格低价债,因为从目前的统计上看,高密度网格低价债的利润锁定效率比ETF网格要高很多。

想快速积累网格利润,需要选择波动大的交易标的,低价可转债作为有债底保护的投资品种是首选。两市现在一共400多只可转债,我目前用三个因子进行交易标的的筛选。

1、第一个因子是价格,120以下的可转债是首选。

2、第二个因子是日K的极差比率,每一根日K线的低点至高点之间的涨幅,这个指标反映了标的的日内波动程度。

3、第三个因子是变异系数,日K线的变异系数其含义是每日收盘价序列的标准差与均值的比,表征着标的在日线级别上的波动程度,同样,该指标没有量纲,方便标的横向对比。

接下的思路就很简单了,标的选取原则是:在价格足够低的前提下,选取日K极差比率大,变异系数大的交易标的。当然还有很多其他因子要考虑,比如剩余期限,溢价率之类的,这个可以在前述因子筛选后再进行考量。

从东财上,我们可以很方便的找到可转债比价表,简单写一个爬虫脚本,将这个数据保存到本地,命名为cb.csv。接下来用代码进行数据分析,因子二,我们取日K极差比率的中位数作为参考。

# 研究可转债日内波动与变异系数,作为网格策略的辅助决策工具

import os,sys
sys.path.append(os.getcwd())

import pandas as pd
from analyzer._statistics import series_vsmcr
import numpy as np
from core import spider
import time

# 计算日内波动与日K变异系数的函数
def k_range(code,name):
    df = spider.get_k_bars(code,240,500,3,{'qfq_day':'None'})
    df['range'] = df['high']/df['low'] - 1
    mid = np.percentile(df['range'],50)
    cv = series_vsmcr(df['close'])['cv']
    print (f'{name} 波动率中位数:{mid:.2%} , 变异系数:{cv}')
    return mid,cv

df = pd.read_csv(f'{os.path.dirname(os.path.realpath(__file__))}\cb.csv',index_col=0)
# 完善转债代码,增加sh,sz前缀
df['转债代码'] = list(map(lambda x:'sh'+x if x[:2]=='11' else 'sz'+x,df['转债代码'].astype(str)))
# 去除表格中包含 ‘-’ 的行
factors = ['转股价值','纯债价值','转股溢价率','纯债溢价率','转债价格']
for factor in factors:
    # 如果某个factor中不包含-,drop会引发异常,如果发生异常,将df直接复制给temp_df
    try:
        temp_df = df.drop(df[df[factor].str.contains('-')].index)
    except:
        temp_df = df
# 去掉-后,选取转债价格小于110元的转债
temp_df['转债价格'] = temp_df['转债价格'].astype(float)
target_df = temp_df[temp_df['转债价格']<110]

# 定义储存结果的df对象
df_result = pd.DataFrame(columns=['转债代码','转债名称','波动率中位数','变异系数'])
# 计算日内波动率中位数与日K线变异系数
for index,rows in target_df.iterrows():
    mid,cv = k_range(rows['转债代码'],rows['转债名称'])
    df_result = df_result.append({'转债代码':rows['转债代码'],'转债名称':rows['转债名称'],'波动率中位数':mid,'变异系数':cv},ignore_index=True)
    time.sleep(5)

print (df_result)
df_result.to_csv(f'{os.path.dirname(os.path.realpath(__file__))}\cb_result_110.csv')

程序的输出,大致如下图所示:

程序中我们对110元以下的可转债进行了计算,同样我们可以通过修改程序中关于价格过滤的条件来筛选120元以下的可转债。接下来,我们对计算结果进行分析。

我们先看110元以下的可转债(共36只),我们按波动率降序进行排列:

如上图所示,110元以下的可转债,波动率与变异系数最好的标的,是蓝帆转债。看看转债价格,103.367,剩余期限3.83年,剩余规模15.21亿,还挺nice的,正股是医药股,现在处于合理低估区间。第二名长集转债就不看了,这个之前已经在我的标的池里了,正股是做垃圾发电的,绿电概念,盘子不大,存在炒作空间。接下来看看120元以下的可转债的情况,一共134只:

120元以下的标的里,波动率和变异系数最好的是奥佳转债,波动率中位数高达3.2%,变异系数高达0.16。当前转债价格117,剩余年限3.58年,剩余规模4.59亿,正股奥佳华是做小家电的,属于可选消费。第二名闻泰转债,当前转债价格119.67,剩余年限5年,剩余规模85.98亿,正股闻泰科技,半导体龙头,板块整体还处于左侧区间。这两只债从日K线图上看,都处于一个长时间的横盘摸底形态,适合网格。

目前我在做网格的可转债有两只,一个是中金转债,一个是兴业转债,前者是宽幅网格,网格区间2%-4%,后者是高密度网格,网格区间0.2%-0.4%。标的池中还有长集转债,尚未启动交易,后续准备连同蓝帆转债和奥佳转债开启高密度网格,区间也定在0.2%-0.4%(跌0.2%买入,涨0.4%卖出)

从之前的统计情况看,高密度网格的利润锁定效率相当高,不输于ETF,唯一的风险是,如果出现较大跌幅,容易造成仓位过重,这点还需要随时关注行情,调整策略运行节奏。

QThinker

前地产从业者,假装是个程序员,热爱编程与交易 自研QThinker量化交易框架

文章评论