MLMI的Python实现:结合机器学习算法的动量预测指数

·
·
·

机器学习动量指数(MLMI)是一种智能工具,帮助交易者洞察市场的动力和趋势。它结合了动量分析和机器学习算法,提供实时分析。MLMI通过识别趋势方向、盘整区域和超买/超卖状态,支持交易决策。使用MLMI时,可以根据需要设置预测数据和趋势长度参数。这个指标的独特之处在于它集成了机器学习技术,可以动态适应市场变化,并提供更准确、响应更灵敏的分析。

如何构建机器学习动量指数(MLMI)

MLMI结合了相对强弱指数(RSI)的加权移动平均线(WMA)和机器学习算法。它通过计算快速(5周期)和慢速(20周期)WMA来衡量市场的动量和方向。同时,它还利用机器学习的k-最近邻算法,智能地分析历史数据,提供更准确的动量预测。

import numpy as np
import pandas as pd
import pandas_ta as ta
from sklearn.neighbors import NearestNeighbors

def mlmi(close, fast_window=5, slow_window=20, momentumWindow=20, n=500, k=200):
    """机器学习动量指数(MLMI)是一种智能工具,帮助交易者洞察市场的动力和趋势。它结合了动量分析和机器学习算法,
    提供实时分析。MLMI通过识别趋势方向、盘整区域和超买/超卖状态,支持交易决策。使用MLMI时,可以根据需要设置预
    测数据和趋势长度参数。这个指标的独特之处在于它集成了机器学习技术,可以动态适应市场变化,并提供更准确、响
    应更灵敏的分析。

    参考:https://www.tradingview.com/script/I2X9DE84-Machine-Learning-Momentum-Index-MLMI-Zeiierman/?aff_id=27627
    """
    # 计算快速和慢速移动平均线
    MA_quick = ta.wma(close, length=fast_window)
    MA_slow = ta.wma(close, length=slow_window)

    # 计算快速和慢速相对强弱指标(RSI)
    rsi_quick = ta.wma(ta.rsi(close, length=fast_window), length=momentumWindow)
    rsi_slow = ta.wma(ta.rsi(close, length=slow_window), length=momentumWindow)

    # 计算交叉位置
    pos = pd.Series((MA_quick > MA_slow) & (MA_quick.shift() < MA_slow.shift())).astype(int)
    neg = pd.Series((MA_quick < MA_slow) & (MA_quick.shift() > MA_slow.shift())).astype(int)
    assert len(pos) > 0 or len(neg) > 0

    data = pd.concat([close, rsi_quick, rsi_slow], axis=1)
    data.columns = ['close''rsi_quick''rsi_slow']
    data["label"] = (close.pct_change() > 0).astype(int) *2 -1
    data = data.dropna()

    rsi_quick = data['rsi_quick']
    rsi_slow = data['rsi_slow']
    labels = data['label']

    # 创建一个空的结果序列
    result = pd.Series(dtype='float64')

    for i in range(n, len(data)):
        # 获取当前行的rsi_quick和rsi_slow值
        current_rsi_quick = rsi_quick.iloc[i]
        current_rsi_slow = rsi_slow.iloc[i]

        # 取出历史样本
        historical_rsi_quick = rsi_quick.iloc[:i]
        historical_rsi_slow = rsi_slow.iloc[:i]
        historical_labels = labels.iloc[:i]

        # 将rsi_quick和rsi_slow值组合成一个特征向量
        features = np.column_stack((historical_rsi_quick, historical_rsi_slow))

        # 使用K最近邻算法找到历史样本中最靠近的k个样本
        nn = NearestNeighbors(n_neighbors=k)
        nn.fit(features)
        _, indices = nn.kneighbors([[current_rsi_quick, current_rsi_slow]])

        # 取出对应的label值,并计算均值
        closest_labels = historical_labels.iloc[indices[0]]
        mean_label = closest_labels.mean()

        # 将均值添加到结果序列中
        result = pd.concat([result, pd.Series(mean_label)], ignore_index=True)
    
    result.index = data.iloc[n:].index

    result = ta.wma(result, length=20)
    return result

MLMI的优势

  1. 识别趋势方向和强度:MLMI帮助交易者判断市场趋势是上升还是下降,并提供对趋势强度的洞察。
图片
image.png
  1. 识别盘整区域:当MLMI预测线和MLMI预测线的WMA在中间水平附近振荡时,这是市场进入盘整阶段的信号。交易者可以利用这一洞察力判断市场是否犹豫不决。
图片
image.png
  1. 识别超买或超卖状况:MLMI通过识别市场可能出现的超买或超卖水平,提供对潜在价格修正或逆转的见解。

图片

MLMI的参数设置经验

  1. 设置预测数据(k):通过调整k值,可以改变对数据局部波动的敏感程度。
  2. 调整趋势长度:较短的趋势长度对短期价格变化更敏感,但也可能产生更多误报。较长的趋势长度则对短期噪音的反应较小,但可能滞后于重大价格变化。
  3. 机器学习动量指数 (MLMI) 在较高的时间范围内可能无效,例如每日或以上。出现这种限制是因为这些时间范围内可能没有足够的数据来提供准确的动量和趋势分析。为了克服这一挑战并充分利用 MLMI 提供的功能,建议在较短的时间范围内使用该指标。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/111021
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 6小时前
下一篇 6小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注