Skip to content

紧跟潮流!机器学习会让你的交易智慧爆发式提升

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:在瞬息万变的金融世界中,我们总是在寻找更好的方法来把握市场时机。今天,我要和大家分享一个令人兴奋的新工具——它将人工智能(AI)的强大力量与传统技术分析相结合,为我们提供了一个全新的市场预测和交易信号生成视角。这个工具的核心,是潜在高斯混合模型(LGMM)与多项式回归的巧妙融合。听起来很复杂?别担心,我接下来会用简单的语言来解释。

一、工作原理

您可以想象一下,当我们拥有一个强大的AI大脑,它能够学习市场的历史数据,找出那些隐藏的模式和关联。这就是潜在高斯混合模型(LGMM)的作用——它像是一个侦探,通过分析数据来揭示市场的秘密。然后,我们再加入多项式回归——这是一种统计学方法,可以帮助我们预测未来的市场趋势。而它就像是一个预言家,通过过去的数据来预测未来。

将这两者结合起来,我们就得到了一个强大的AI工具,能够更准确地预测市场走势,生成更可靠的交易信号。这就像是给了我们一双洞察市场的慧眼,帮助我们做出更明智的投资决策。

二、应用效果

让我们以 2020 年至 2024 年期间的道琼斯工业平均指数 ETF (DIA) 进行测试举例。

  • 这个期间经历了 COVID-19
  • 然后是显著的恢复
  • 遇到了通货膨胀问题
  • 加息减息周期

结果如何?如下图所示,该模型成功识别了价格下跌时的主要买入机会和价格上涨时的潜在卖点。

我在我的 Google Colab 笔记本中分享了完整的实施过程代码,地址如下:

https://colab.research.google.com/drive/1MEt8TIvZRTla8Jj-1l6B5JASq0Z8-WSj?usp=sharing

请记住最好的代码是你能理解并能根据自己的需要修改的代码。请不要害怕尝试,让它成为你自己的代码!

三、代码说明

1. 设置数据管道

def get_clean_financial_data(ticker, start_date, end_date):
    data = yf.download(ticker, start=start_date, end=end_date)
    data.columns = data.columns.get_level_values(0)
    data = data.ffill()
    data.index = data.index.tz_localize(None)
    return data

该函数是我们的数据基础。它的作用如下:

  • 使用 yfinance 下载股票数据;
  • 清理列结构;
  • 使用前向填充法处理任何缺失值;
  • 统一时区,防止时间混乱。

2. 准备我们的特色功能

data = data.reset_index()
data['Date_Ordinal'] = pd.to_numeric(data['Date'].map(pd.Timestamp.toordinal))
X = data[['Date_Ordinal']].values
y = data['Close'].values
  • 我们将日期转换成计算机可以理解的数值;
  • 提取我们的特征(X)和目标变量(y);
  • 日期转换对我们数学模型的运行至关重要。

3. 建立高斯混合模型

gmm = GaussianMixture(n_components=3, covariance_type='full', random_state=42)
gmm.fit(X)
latent_features = gmm.predict_proba(X)
  • 创建包含 3 个组成部分的 GMM(将它们视为市场状态);
  • 数据拟合;
  • 提取各州的概率分数(这些概率会成为我们的 “隐藏 “特征)。

4. 模型组合

X_latent = np.hstack([X, latent_features])
poly_reg = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())
poly_reg.fit(X_latent, y)

在这里,我融合了不同的方法以获得更好的预测效果:

  • 用 GMM 概率堆叠我们的原始特征;
  • 创建多项式回归管道;
  • 将所有内容整合在一起,进行更细致的预测。

5. 生成交易信号

residuals = y - y_pred
std_dev = np.std(residuals)
upper_bound = y_pred + 2 * std_dev
lower_bound = y_pred - 2 * std_dev

data['Buy_Signal'] = np.where(y < lower_bound, 1, 0)
data['Sell_Signal'] = np.where(y > upper_bound, 1, 0)
  • 计算价格与预测的偏差程度;
  • 使用标准偏差设置界限(可以进行±2 的区间调整);
  • 根据这些界限生成明确的买入/卖出信号。

6. 可视化验证

plt.plot(data['Date'], y, color='blue', label='Actual Closing Price')
plt.plot(data['Date'], y_pred, color='red', linestyle='--', label='Fitted Values')
plt.plot(data['Date'], upper_bound, color='green', linestyle=':', label='Upper Bound')
plt.plot(data['Date'], lower_bound, color='green', linestyle=':', label='Lower Bound')

# Add buy/sell signals
plt.scatter(buy_signals['Date'], buy_signals['Close'], marker='^', color='magenta', label='Buy Signal')
plt.scatter(sell_signals['Date'], sell_signals['Close'], marker='v', color='orange', label='Sell Signal')

可视化展示带来了以下内容:

  • 展示实际价格变动;
  • 进行模型预测;
  • 显示交易带;
  • 给出明确的买入/卖出信号。

7. 相关提示

你一定想尝试一下修改代码供自己使用吧?这里有一些参数可供调整:

  • 高斯混合物中(GaussianMixture)中的 n_components,可以针对不同的市场复杂度,可尝试 2-5 这些数值。
  • 标准偏差乘数(Standard deviation multiplier ),目前为 2,可根据信号灵敏度进行调整。
  • 多项式度数(Polynomial degree),目前为 2,higher = 更复杂的模式。
  • 还可以用不同的技术指标作为附加功能。

四、观点总结

这套代码不仅能预测市场,还能更好地理解市场。从基本的价格走势到我们的 GMM 发现的隐藏模式,每个组件都增加了一层洞察力。

  • 机器学习在市场预测中的应用:通过结合机器学习算法(LGMM和多项式回归),可以更精确地预测市场走势,并识别出传统方法可能遗漏的交易机会。
  • 数据处理和特征提取的重要性:在建立预测模型时,对数据的正确处理和特征的提取对于模型性能至关重要。
  • 模型融合以提高预测准确性:可以将LGMM模型的输出与多项式回归模型结合的方法,以提高市场预测的准确性和可靠性。
  • 交易信号的生成和验证:通过设置统计界限,生成了清晰的买卖信号,并通过可视化手段验证了模型的有效性。
  • 定制和调整模型以适应个人交易策略:鼓励大家根据自己的需求对模型进行定制和调整,例如通过改变LGMM中的成分数量、调整标准偏差乘数、改变多项式度数等。

综上所述,如果你对市场预测和交易信号生成感兴趣,不妨试试这个结合了AI和传统技术分析的新方法。它可能会给你带来意想不到的收获!

感谢您阅读到最后,希望本文能给您带来新的收获。祝您投资顺利!如果对文中的内容有任何疑问,请给我留言,必复。


本文内容仅仅是技术探讨和学习,并不构成任何投资建议。

Published inAI&Invest专栏

Be First to Comment

    发表回复