文章来源公众号:Logan投资,可获取相关代码
往期文章:
985/211的量化课程和代码资料,别再乱买课当韭菜了!
量化交易数据源对比
中国期货市场的动量
高频因子--tick级别订单流因子计算(附代码)
因子动量的讨论
在传统的研究中,回归预测和分类预测的思想是未来值和当前值的比较。不同之处在于,回归预测强调未来价格的预测,而分类预测则侧重未来价格的上涨和下跌方向。
Leung等人【Forecasting stock indices: a comparison of classification and level estimation models[J].】的研究表明,分类模型在预测股市走向和最大化投资交易回报方面优于水平估计模型。相信通过使用分类算法构建机器模型可以做出更好的预测。
传统的分类问题数据标注方法强调对价格上涨和下跌的微观层面预测。由此,采用相应的数据标注方法,通过不同时间点数据的差异性对数据进行标注。其普遍的做法,就是用未来n个周期的收益率作为Label,建立因子和未来收益率的映射关系。(Up-dwon labeling)
但是,时间序列数据在短期具有显著的随机性,受各种因素影响较大,噪声较多。而上文中利用未来n个周期的收益率作为Label的做法在时序CTA分类预测中容易让信号“回归”,让机器学习会学习和拟合“噪音”,从而在趋势中丢掉大的利润。
但关键是时序CTA不是从随机的“噪音”上赚钱,其利润来源是趋势行情。
而且旧的Labeling很难以有一个积极的结果。例如在左图中,股票价格在短期内上升,长期内下降。而右图可以看作是股票价格长期上涨,但短期内正在下降。但许多标注方法在这种行情中难以精确进行分类。

所以本文介绍了几种不一样的标注方法。
本文介绍第一种方法:
连续**趋势标注法(CTL,Continuous Trend Labeling)**
该方法属于二分类预测的标注方法
1、识别历史数据中的波峰(向量h)和波谷(向量 l),分别存入向量中。
2、计算相邻波峰与波谷之间的趋势度(TD指数),公式如下:

3、阈值比较与趋势分类
- 设定阈值参数ω,若TD指数超过ω,则认为存在连续趋势:
- 上升趋势(标签为1):相邻波峰涨幅超过阈值,且后续价格持续高于阈值。
- 下降趋势(标签为-1或0):相邻波谷跌幅超过阈值,且后续价格持续低于阈值(深度学习模型中可能用0避免负标签报错)。
若TD指数未超过ω,视为正常波动,不标记为连续趋势

通过实证,可以看到基于方法一定义市场的连续上涨和下跌趋势,该方法有效提取了金融时间序列数据的连续趋势特征,更符合金融市场运行规律。
本文介绍的第二种标注方法:
该方法属于三分类的标注方法,同样也是趋势标注法,该方法在之前的推文中介绍过---科学的机器学习回测方法。
方法来源:TSANTEKIDIS A, PASSALIS N, TEFAS A, 等. Forecasting Stock Prices from the Limit Order Book Using Convolutional Neural Networks[C/OL]//2017 IEEE 19th Conference on Business Informatics (CBI). Thessaloniki, Greece: IEEE, 2017: 7-12[2025-05-05].
具体算法如下:

def mlt_labeling(prices, window, alpha):
labels = np.zeros(len(prices))
prices = np.array(prices)
for i in range(len(prices)):
if i < window or i > len(prices) - window:
continue
m_minus = np.mean(prices[i - window: i])
m_plus = np.mean(prices[i: i + window])
lt = (m_plus - m_minus) / m_minus
if lt > alpha:
labels[i] = 1
elif lt < -alpha:
labels[i] = -1
return labes
这个标注方法有两个参数,一个是 t 这个时间窗口的长度,另一个是 alpha。当 lt > alpha 或者 lt < -alpha 时,可以定义上升趋势(1)和下降趋势(-1),否则为震荡趋势(0)。下图展示的是使用前后5个样本数据计算的 , lt = 0.008的标注结果。

这种方法本来是用来限价订单薄LOB分类预测打标签用的,原本是使用买一卖一计算的中间价来计算m_t,m+t的,我只是改成了用close price。不过这个Labeling 方法在日频三分类会很容易导致样本不平衡,但可以通过alpha的阈值来调整。若alpha=0,则变成了二分类预测的标注了。
本文介绍的第三种方法:
选择性遗传算法标注(SGA,Selective Genetic Algorithm Labeling)
该方法的核心目标是通过遗传算法优化时间序列的标注(标签生成),目标是找到一组能最大化特定适应度函数(Fitness)的标签序列。
SGA Labeling通过三个步骤提取最优标签。
- 第一步,随机生成300组( Pop Size )标签,每组标签与训练数据量相匹配。生成的标签有向上( 1 )或向下( 2 )的值。
- 第二步,将每个标签集合与股票开盘价结合构建数据集。然后基于适应度函数(如交易策略的收益指标(如夏普比率、胜率、盈亏比),寻找最优标签(即,调用合并函数)。
- 第三步,执行遗传算法的选择Selection、交叉Crossover和变异Mutation过程,从已有的父标签集合中创建新的子标签集合。
最后达到最大迭代次数(如1000次)或适应度收敛就终止输出,并且输出历史最优标签序列,用于训练机器学习模型。

已经有实证证明该方法的有效性,通过使用Linear Regress,Neural Network和XGB来进行分类预测得到结果,并与Up-Down Labeling进行对比,发现SGA Labeling的标注方法具有更高胜率和收益率。
这个方法我打算之后再写一篇讲一讲