第四章:机器学习基础与交易策略

说实话,很多人一听到「机器学习」就觉得头大。我刚开始接触时也一样,觉得这玩意儿离量化交易太远了。但后来我发现,其实机器学习在币圈的应用,比你想象的要接地气得多。

这一章,我们就来聊聊监督学习、无监督学习,以及怎么搭一个靠谱的回测框架。嗯,都是我自己踩过坑之后总结出来的经验。

4.1 监督学习:分类与回归

监督学习,说白了就是「给答案,学规律」。你给模型一堆历史数据,告诉它哪些是涨、哪些是跌,它自己就能学会判断。

4.1.1 分类任务:涨还是跌?

我最常用的分类场景就是预测未来1小时的涨跌方向。比如,把价格涨超过0.5%标记为1,跌超过0.5%标记为0,横盘就扔掉。

代码示例(逻辑回归):

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 假设 X 是特征矩阵,y 是标签(0或1)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42
)

model = LogisticRegression()
model.fit(X_train, y_train)

# 预测概率
y_prob = model.predict_proba(X_test)[:, 1]
我的经验:逻辑回归虽然简单,但胜在可解释性强。我曾经用它做日内短线信号,配合止盈止损,年化收益能做到15%左右。别小看简单模型,稳定才是王道。

4.1.2 回归任务:涨多少?

分类告诉你方向,回归告诉你幅度。我个人习惯用回归模型预测未来N根K线的收益率。

举个例子,用随机森林做回归:

from sklearn.ensemble import RandomForestRegressor

rf = RandomForestRegressor(n_estimators=100, max_depth=5)
rf.fit(X_train, y_train)

# 预测收益率
pred_return = rf.predict(X_test)
注意:回归模型在加密货币上容易过拟合。我曾经用深度神经网络做回归预测,回测曲线漂亮得不行,一上实盘就崩。后来我学乖了,回归模型只做辅助参考,不直接作为交易信号。

4.2 无监督学习:聚类

无监督学习不需要标签。它自己找规律,说白了就是「让数据自己说话」。

4.2.1 K-Means 聚类:发现市场状态

我常用K-Means来识别市场状态。比如,把波动率、成交量、价格变化率这些特征丢进去,聚类出「震荡市」、「趋势市」、「极端行情」等状态。

from sklearn.cluster import KMeans

# 特征:波动率、成交量变化、价格变化率
features = ['volatility', 'volume_change', 'price_change']
X_cluster = data[features]

kmeans = KMeans(n_clusters=3, random_state=42)
data['market_state'] = kmeans.fit_predict(X_cluster)

你想想看,不同市场状态下,策略参数应该不一样。震荡市用均值回归,趋势市用动量策略。这个思路,我用了好几年,效果一直不错。

核心思路:聚类 + 条件策略 = 自适应交易系统。先聚类识别当前状态,再切换到对应的策略参数。

4.3 模型评估:别被回测骗了

模型评估这块,我吃过太多亏了。曾经有个模型回测夏普比率3.5,我兴奋得直接上实盘,结果一个月亏了20%。

为什么会这样?因为回测和实盘之间存在巨大的鸿沟。

4.3.1 常用评估指标

指标 说明 我的建议
准确率 预测正确的比例 别只看这个,币圈涨跌不平衡
精确率/召回率 看多信号的可靠性 我一般要求精确率 > 55%
F1分数 精确率和召回率的调和平均 比准确率靠谱得多
夏普比率 风险调整后收益 回测夏普 > 2 才考虑实盘
最大回撤 最惨的时候亏多少 我个人不能接受超过15%

4.3.2 过拟合检测

我有个简单粗暴的方法:把数据按时间分成三段——训练集、验证集、测试集。如果训练集和测试集表现差距很大,那就是过拟合了。

# 时间序列分割,不能用随机打乱
train = data[:'2023-06']
val = data['2023-06':'2023-12']
test = data['2024-01':]
避坑指南:我曾经犯过一个低级错误——用未来的数据预测过去。因为特征计算时用了未来信息,回测结果好得离谱。记住,特征计算必须只用历史数据,不能「偷看」未来。

4.4 回测框架搭建

回测框架,说白了就是模拟交易环境,看看你的策略到底行不行。我建议自己搭一个轻量级的框架,别用太重的第三方库。

4.4.1 框架核心组件

一个完整的回测框架,至少需要这几个模块:

  • 数据模块:获取K线数据、处理缺失值、计算特征
  • 策略模块:根据信号生成买卖指令
  • 风控模块:仓位管理、止损止盈
  • 绩效模块:计算收益率、回撤、夏普比率

4.4.2 简易回测代码

class BacktestEngine:
    def __init__(self, data, initial_capital=10000):
        self.data = data
        self.capital = initial_capital
        self.position = 0
        self.trades = []
    
    def run(self, signal_col='signal'):
        for i in range(len(self.data)):
            signal = self.data.iloc[i][signal_col]
            price = self.data.iloc[i]['close']
            
            if signal == 1 and self.position == 0:
                # 开多
                self.position = self.capital / price
                self.capital = 0
                self.trades.append(('buy', price, i))
            elif signal == -1 and self.position > 0:
                # 平多
                self.capital = self.position * price
                self.position = 0
                self.trades.append(('sell', price, i))
        
        # 计算最终收益
        final_value = self.capital + self.position * self.data.iloc[-1]['close']
        return final_value
我的习惯:回测时一定要加上交易手续费和滑点。币圈手续费虽然低,但高频交易下来也是一笔不小的开支。我一般按0.1%的滑点来模拟。

4.5 知识体系总览

下面这张图,是我自己整理的机器学习交易策略知识体系。你看一眼,就能明白这一章讲了什么。

机器学习交易策略 监督学习 分类(涨/跌) 回归(涨多少) 无监督学习 K-Means 聚类 模型评估 评估指标 过拟合检测 回测框架搭建 数据模块 策略模块 风控模块 绩效模块 核心思想:数据驱动 → 模型训练 → 回测验证 → 实盘部署 每一步都要谨慎,别被回测数据骗了

嗯,这一章的内容就到这里。机器学习在币圈的应用,说白了就是「用历史规律预测未来」。但记住,历史不会简单重复,模型需要持续迭代。

我个人建议,先从最简单的逻辑回归和K-Means开始,跑通一个完整的回测流程。等你有感觉了,再上更复杂的模型。别一上来就搞深度学习,容易把自己搞懵。


专注资料整理