用MACD决策树模型预测股票趋势

55beb1de8f2a80aa56819a3b46091672.gif

前言

上回说到,可以用LSTM时序模型来预测股票价格,在股票价格技术分析中,MACD作为一个经典的交易指标,一直指导着买卖时机,这篇我们实现一下在这个指标下的决策树模型,来预测未来的股票走势。

基本概念

MACD指标

MACD(Moving Average Convergence/Divergence),是一种用于股票价格分析的技术指标,由 Gerald Appel 在 1970 年代后期创建。它旨在揭示股票价格趋势的强度、方向、动量和持续时间的变化。

3bfb4ef5f6659c1ffb1a5f20e01d3b1d.png

MACD 指标是根据历史价格数据(通常是收盘价)计算得出的三个时间序列的指标。,即三个 EMA 的时间常数,通常表示为 "MACD( a , b , c )" 。其中 MACD序列是具有特征时间 a(短周期)和 b(长周期)指数移动平均线(EMA) 的差,平均序列是具有特征时间c的MACD序列的 EMA。

这些参数通常以天为单位。最常用的值是 12、26 和 9 天,即 MACD(12,26,9)。与大多数技术指标一样,MACD 也从过去主要基于日线图的技术分析中找到其周期规律。

由于过去的工作周是 6 天,因此 (12, 26, 9) 的周期设置分别代表 2 周、1 个月和 1 周半。现在,当交易周只有 5 天时,也可以相应调整周期参数,比如(10, 20, 7)。但是,最好坚持大多数交易者使用的周期设置,因为基于标准设置的买卖决策会进一步影响价格朝该方向发展。

短期 EMA 比长期 EMA 对近期股票价格变化的反应更快。通过比较不同时期的EMA,MACD序列可以指示股票趋势的变化。据称,背离系列可以揭示股票趋势的微妙变化。

由于 MACD 基于移动平均线,所以它是一个慢速指标滞后指标。作为预测未来价格趋势的指标,MACD 无法直接用于在完全没有规律的区间内交易或者价格不可预测的场合。而且当 MACD 显示趋势时,趋势已经完成或几乎完成。

决策树模型

决策树模型是统计、数据挖掘和机器学习中使用的预测建模方法之一。它使用决策树作为预测模型,在树枝中呈现对历史数据的观察,在叶子中得到预测目标值。

4ed4aeeaace7eecd0d90b75e80490cd0.png

如果目标值可以采用一组离散值的树模型称为分类树;在这些树结构中,叶子代表分类标签,分支代表连词导致这些分类标签的特征。如果目标值可以取连续值(通常是实数)的决策树称为回归树。我们这里预测目标为股票价格,所以采用的就是回归模型。

由于决策树的可理解性和简单性,决策树是最流行的机器学习算法之一。在决策分析中,决策树可用于直观、明确地表示决策和决策制定。

综上所述,MACD是一个平均指标,虽然不适合直接反应出瞬息万变的即时股票价格,但可以用来反应出一段时间的价格背离的程度,接下来我们就用决策树来预测未来一段时间的价格走势。

环境准备</

  • 10
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
以下是使用布林带和MACD指标构建长期趋势跟踪模型Python代码示例: ```python import pandas as pd import yfinance as yf import talib # 获取股票数据 symbol = 'AAPL' start_date = '2010-01-01' end_date = '2021-05-31' data = yf.download(symbol, start=start_date, end=end_date) # 计算布林带指标 data['MA20'] = talib.SMA(data['Close'], timeperiod=20) data['stddev'] = talib.STDDEV(data['Close'], timeperiod=20) data['UpperBand'] = data['MA20'] + 2 * data['stddev'] data['LowerBand'] = data['MA20'] - 2 * data['stddev'] # 计算MACD指标 data['MACD'], data['MACDsignal'], data['MACDhist'] = talib.MACD(data['Close'], fastperiod=12, slowperiod=26, signalperiod=9) # 定义买入和卖出信号 data['BuySignal'] = (data['Close'] > data['UpperBand']) & (data['MACD'] > data['MACDsignal']) data['SellSignal'] = (data['Close'] < data['LowerBand']) & (data['MACD'] < data['MACDsignal']) # 计算持仓和收益 data['Position'] = 0 data.loc[data['BuySignal'], 'Position'] = 1 data.loc[data['SellSignal'], 'Position'] = -1 data['Position'] = data['Position'].fillna(method='ffill') data['Returns'] = data['Close'].pct_change() * data['Position'].shift(1) data['CumulativeReturns'] = (1 + data['Returns']).cumprod() # 输出结果 print(data.tail()) ``` 在上面的代码中,我们首先使用`yfinance`库获取股票数据,并使用`talib`库计算布林带和MACD指标。然后,我们定义了买入和卖出信号,当股价突破布林带上轨并且MACD线大于MACD信号线时产生买入信号,当股价突破布林带下轨并且MACD线小于MACD信号线时产生卖出信号。接着,我们根据买入和卖出信号计算持仓和收益,并计算累计收益。最后,我们打印出最后几行数据以便查看结果。 请注意,此代码仅作为示例,仅供参考。在实际应用中,您需要根据自己的需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluishfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值