English Русский Español Deutsch 日本語 Português
preview
基于混沌理论方法的超买超卖趋势分析

基于混沌理论方法的超买超卖趋势分析

MetaTrader 5交易系统 |
39 3
Yevgeniy Koshtenko
Yevgeniy Koshtenko

当混沌成为一种模式

试想穿越暴风雪中的森林。雪花看似无序飘落,轨迹难测。但如果凝神观察,便会发现它们顺着无形的气流运动,遵循着特定的模式。正如金融市场的价格波动——看似随机,实则暗含韵律。

混沌理论揭示了一个惊人的真相:在看似完全不可预测的系统深处,潜藏着稳定的模式与结构。气象学家爱德华·洛伦兹(Edward Lorenz)在天气模型研究中偶然发现:当输入数据四舍五入后,系统会产生完全不同的结果。这一发现后来被称为"蝴蝶效应",证明初始条件的微小变化可导致结果的指数级差异。

洛伦兹提出:"具有奇异吸引子的系统表面看似随机,实则内蕴秩序。"正如天气系统存在无形模式,金融市场虽表面混沌,却遵循特定规律。

吸引子:市场的无形磁极

想象您在房间内抛掷球体。无论抛掷力度或方向如何,球最终必落于地面。此时地面即为吸引子 —— 球体的引力中心。

金融市场中的吸引子的作用机制类似。经济力量替代物理引力,促使价格回归特定水平。当股票价格过高时,卖方力量主导;价格过低时,买方力量主导。这种"橡皮筋效应"持续将市场拉向均衡点。

但市场不同于简单球体,其中存在"奇异吸引子"。这并非单一节点,而是系统趋近却永不重合的复杂结构。如同溪流汇入湖泊:水流始终奔向湖泊,但每次路径都截然不同。

如何解读市场的分形模式

20世纪60年代,贝努瓦·曼德勃罗(Benoît B. Mandelbrot)在IBM研究棉花价格长期波动时,有了惊人的发现。无论观察日线、月线还是年线数据,价格走势图竟呈现相同的形态。这一发现催生了分形几何学 —— 研究在不同尺度下自我重复的形态科学。

观察蕨类叶片:整体轮廓在每个小叶中重复,进而在更微小的结构中延续。市场运作遵循同样的逻辑。1分钟图上的形态,常在1小时、1日甚至1月图上复现。

这种自相似性绝非偶然。其反映出市场并非随机噪声,而是一个具有内在结构的复杂系统。理解这种结构,即掌握预测未来走势的钥匙。

均值回归:自然的普世韵律

金融界有句箴言:“树不会长到天上”。历史证明,经历极端涨跌后,市场终将回归长期均值。

这一现象在自然界中无处不在。想象钟摆运动:摆幅越大,回归中心的力量越强。或思考体温调节:发烧时,身体会启动降温机制恢复36.6℃的常态。

市场中的同类效应同样显著。某个时期表现异常突出的股票,后续往往表现平庸。长期超越市场增速的公司,几乎必然出现增长放缓。正如传奇投资者彼得·林奇所言:“均值回归是连伟大企业都无法逃脱的引力。”

但"感知神经吸引子"的革命性在于:它不仅能识别静态均值,更能捕捉市场当前动态趋近的层级。如同在重力突变时,精准预测钟摆的最终停驻位置。

初始条件敏感性:华尔街的蝴蝶效应

“巴西蝴蝶振翅会引发得州龙卷风吗?”洛伦兹的著名诘问揭示了混沌理论的核心原则:初始条件敏感性。

金融市场中这类"蝴蝶效应"屡见不鲜。一条CEO推文可致公司股价暴跌。美联储的意外决策可能引发全球市场回调。甚至小银行破产传闻也能引发银行业恐慌(如2008年危机所示)。

这种敏感性使长期精确预测成为不可能。正如尼尔斯·玻尔所言:“预测非常困难,尤其是关于未来的预测。”但通过理解系统结构并识别吸引子,我们仍能做出具有概率优势的预测。


神经吸引子振荡器:驾驭市场混沌

从理论到实践:构建指标

您是否曾注意到,资产价格似乎会回归至某一特定水平,仿佛受到一种无形力量的驱使?疯狂的上涨之后,为何会出现急剧的回调?而漫长的下跌之后,又是如何开始突然的复苏?仿佛有股无形力量在拉扯价格,阻止其单向运动。这正是我们试图用数字网络捕捉的"隐形之手"。

当其他交易者仍在使用上世纪的指标时,我们将开启更深层的探索 —— 构建一个能学习识别市场隐藏规律的智能指标。在我们的探索旅程中,指南针是神经网络,地图是吸引子理论。

神经网络架构:指标的“大脑”

还记得黑客电影中主角几分钟就创造出超级智能的场景吗?现实中虽然更复杂,但也并非普通交易程序员无法企及。

我们的神经网络如同经验丰富的追踪者:分析雪地上的足迹(历史价格数据),并试图预测猎物(市场)的走向。这位追踪者的结构相当简单:一个收集数据的输入层,一个进行模式识别“魔法”的隐藏层,以及一个做出预测的输出层。

这就是我们“大脑中枢”的初始化过程:

void InitializeNetwork() {
   // Initializing hidden layer
   ArrayResize(Network.hidden, HiddenNeurons);
   for(int i = 0; i < HiddenNeurons; i++) {
      ArrayResize(Network.hidden[i].weights, InputNeurons);
      // Initializing weights with random values in the range [-0.5, 0.5]
      for(int j = 0; j < InputNeurons; j++) {
         Network.hidden[i].weights[j] = (MathRand() / 32767.0) - 0.5;
      }
      Network.hidden[i].bias = (MathRand() / 32767.0) - 0.5;
   }
   
   // Initializing output neuron
   ArrayResize(Network.output.weights, HiddenNeurons);
   for(int i = 0; i < HiddenNeurons; i++) {
      Network.output.weights[i] = (MathRand() / 32767.0) - 0.5;
   }
   Network.output.bias = (MathRand() / 32767.0) - 0.5;
}

注意权重初始化的关键步骤。如同科研前调试显微镜的灵敏度。我们以随机值启动参数,随后通过学习过程逐步调节这些"旋钮",最终生成更精准的市场图景。

网络训练:从新手到大师的蜕变

想象孩童学步的过程。初次跌倒,蹒跚几步,再次跌倒,技能渐精。我们的神经网络同样通过历史数据"学步",在试错中持续优化。

训练的核心机制为前向与反向传播。在前向传播中,网络基于当前生成预测;而在反向传播中,其根据误差调整权重。

double ForwardPass(double &inputs[]) {
   // Calculating outputs of the hidden layer
   for(int i = 0; i < HiddenNeurons; i++) {
      double sum = Network.hidden[i].bias;
      for(int j = 0; j < InputNeurons; j++) {
         sum += inputs[j] * Network.hidden[i].weights[j];
      }
      Network.hidden[i].output = Sigmoid(sum);
   }
   
   // Calculating neural network output
   double sum = Network.output.bias;
   for(int i = 0; i < HiddenNeurons; i++) {
      sum += Network.hidden[i].output * Network.output.weights[i];
   }
   Network.output.output = Sigmoid(sum);
   
   return Network.output.output;
}

如果能窥探函数运行时的内部机制,我们将看到类似脑神经元的电脉冲传导 —— 信息在连接网络中流动、转化并增强,犹如神经突触间的信号传递。

激活函数:神经元的"点火"机制

在指标的升级版本中,我们将传统Sigmoid函数替换为双曲正切函数(tanh)。该函数的输出范围为[-1, 1],使其在建模混沌系统时具有独特优势 —— 能同时处理正负值信号,精准捕捉市场波动的双向特征。

double Tanh(double x) {
   return (MathExp(x) - MathExp(-x)) / (MathExp(x) + MathExp(-x));
}

双曲正切函数在中心区域具有更陡的斜率,使网络能加速学习并精准捕捉数据中的突变特征。这对混沌市场至关重要,因为市场状态的切换往往在瞬息之间完成。

数据标准化:构建统一的语言体系

在将数据输入神经网络前,必须进行标准化处理 —— 将所有特征映射到相同尺度。这如同将文本翻译成对话双方都能理解的语言。如果您说俄语而对方仅通晓英语,沟通必将无效。

double NormalizePrice(double price) {
   double min = ArrayMin(PriceHistory);
   double max = ArrayMax(PriceHistory);
   return (price - min) / (max - min);
}

该函数将所有价格数据线性映射至[0, 1]区间,完美适配Sigmoid激活函数的输入要求。

振荡器计算:核心价值揭晓

现在进入最关键环节 —— 振荡器数值计算。如何计算?将当前价格与模型预测的吸引子进行对比,计算价格偏离吸引子的百分比幅度。

// Calculate oscillator value as ratio of current price to attractor
if(AttractorBuffer[i] > 0) {
   OscillatorBuffer[i] = (CurrentPriceBuffer[i] / AttractorBuffer[i] - 1.0) * 100.0;
} else {
   OscillatorBuffer[i] = 0; // Division-by-zero protection
}

这个简单的公式精准量化了当前价格偏离其“自然”水平的程度。如果震荡指标显示+30%,则价格"过热",可能很快回归吸引子。如果显示-30%,则价格"过冷",可能向上反弹。


根据需求定制指标

还记得那句俗话"一刀切"吗?在交易中,却极少奏效。每个市场、每个时间框架都有其自身的特性,自身的“情绪”。我们的指标必须适应这些特征。

input int    InputNeurons = 10;     // Number of input neurons (historical periods)
input int    HiddenNeurons = 20;    // Number of neurons in the hidden layer
input double LearningRate = 0.01;   // Learning rate
input int    TrainBars = 1000;      // Number of bars for training
input int    PredictionPeriod = 5;  // Prediction period (in bars)
input bool   Smoothing = false;     // Apply smoothing to the oscillator
input int    SmoothingPeriod = 3;   // Smoothing period

这些参数就像昂贵的音频放大器上的控制旋钮。想要更灵敏的指标?增加神经元数量或缩短预测周期。噪声太大?启用平滑滤波功能。

预测周期:时间望远镜

PredictionPeriod参数堪称市场预测的“时间透镜”。它决定了我们试图预测多远的未来。如果您是工作在分钟图上的剥头皮交易者,那么数值5意味着向前预测5分钟。如果您是日线图上的持仓交易者,那么就是5天。

我推荐尝试此设置。从小值开始,逐渐增加,观察指标行为如何变化。如同真正的科学,没有标准答案,只有通过经验和实验建立认知。

李雅普诺夫指数:混沌市场随机性的“计量仪”

升级版指标的核心创新在于引入李雅普诺夫指数 —— 这一数学工具可以量化系统对初始条件的敏感度。该指标用数学语言描述了著名的“蝴蝶效应” —— 初始条件的微小变化在长期导致显著偏差的现象。

double CalculateLyapunovExponent(const double &close[], int bars) {
   double epsilon = 0.0001; // Small perturbation
   double lyapunov = 0.0;
   int samples = MathMin(LyapunovPeriod, TrainBars/2);
   
   for(int i = 0; i < samples; i++) {
      int startIdx = MathRand() % (TrainBars - InputNeurons - PredictionPeriod);
      
      // Initial input data
      double inputs1[];
      ArrayResize(inputs1, InputNeurons);
      for(int j = 0; j < InputNeurons; j++) {
         inputs1[j] = NormalizePrice(close[bars - TrainBars + startIdx + j]);
      }
      
      // Slightly perturbed input data
      double inputs2[];
      ArrayResize(inputs2, InputNeurons);
      ArrayCopy(inputs2, inputs1);
      inputs2[MathRand() % InputNeurons] += epsilon;
      
      // Predictions for both data sets
      double pred1 = ForwardPass(inputs1);
      double pred2 = ForwardPass(inputs2);
      
      // Distance between predictions
      double distance = MathAbs(pred2 - pred1);
      
      // Lyapunov exponent
      if(distance > 0) {
         lyapunov += MathLog(distance / epsilon);
      }
   }
   
   // Average and normalize
   lyapunov = lyapunov / samples;
   
   // Limit the value for stability
   lyapunov = MathMax(-1.0, MathMin(1.0, lyapunov));
   
   return lyapunov;
}

分形噪声:赋予市场天然肌理

本指标最具突破性的创新在于引入中点位移算法生成的分形噪声。该技术由分形几何奠基人伯努瓦·曼德尔布罗(Benoit Mandelbrot)首创,揭示了金融市场内在的自相似结构。

void GenerateFractalNoise(int size) {
   ArrayResize(FractalNoiseBuffer, size);
   
   // Starting points
   FractalNoiseBuffer[0] = 0;
   FractalNoiseBuffer[size-1] = 0;
   
   // Recursive calculation of midpoints
   MidpointDisplacement(FractalNoiseBuffer, 0, size-1, 1.0, FractalDimension);
   
   // Normalization
   double min = ArrayMin(FractalNoiseBuffer, 0, size);
   double max = ArrayMax(FractalNoiseBuffer, 0, size);
   
   for(int i = 0; i < size; i++) {
      FractalNoiseBuffer[i] = 2.0 * (FractalNoiseBuffer[i] - min) / (max - min) - 1.0;
   }
}

分形维度(FractalDimension)参数值越高,生成的噪声曲线越崎岖混沌,能更精准地模拟极端波动市场。


指标的实际应用

到目前为止,我们已经理解了指标的工作原理,接下来讨论其实际应用。与任何震荡指标一样,也可将神经吸引子震荡指标用于判断市场是否超买或超卖。

想象您在观察一个摆锤。当它向右偏离太远时,很快会开始向左移动。反之,当它向左偏离太远时,很快会向右移动。我们的指标以同样的方式运作,但将摆锤拉回中心的不是机械力,而是市场均衡力量。

受混沌约束的入场信号
  1. 买入信号:当震荡指标跌破吸引子下边界(根据李雅普诺夫指数动态调整)并开始回升时,这或许是建立多头仓位的良机。与此同时,重要的是要考虑李雅普诺夫指数的当前值:该值越低,信号越可靠。
  2. 卖出信号:当震荡指标升破吸引子上边界并开始下降时,这可能表明是建立空头仓位的好点位。同样,较低的李雅普诺夫指数会增加信号的可靠性。
  3. 背离:指标峰值与价格之间的背离是特别有价值且高度准确的信号。

请谨记,在高混沌期(高李雅普诺夫指数),即便是强烈的信号也不可靠,您应该减小仓位或暂避市场。

混沌理论背景下的背离

混沌吸引子震荡指标为经典背离提供了新的视角。当价格形成新的极值,但无震荡指标时,可能不仅表明趋势减弱,还表明吸引子结构的变化 —— 即市场正在趋向的均衡点发生了改变。

当背离与李雅普诺夫指数的变化同时出现时,会产生特别强烈的信号。例如,从正值转为负值可能表明混沌期后新稳定趋势的形成。

网络的动量优化

在我们更新的指标中,我们应用了动量优化方法,显著增强了学习过程并降低了陷入局部最小值的可能性:

// Updating the output layer weights with momentum
for(int j = 0; j < HiddenNeurons; j++) {
    double delta = LearningRate * Network.output.error * Network.hidden[j].output;
    Network.output.momentum[j] = momentum * Network.output.momentum[j] + (1.0 - momentum) * delta;
    Network.output.weights[j] += Network.output.momentum[j];
}

动量方法的工作原理类似于物理学中的“惯性” —— 如果网络在优化过程中长期朝某个方向移动,即使遇到小障碍(局部最小值),它也会继续朝该方向移动。这对混沌系统尤其有用,因为其误差函数曲面往往具有高度复杂的拓扑结构。


未来改进方向

尽管当前指标已具备强大功能,混沌吸引子理论仍有以下关键发展方向值得探索:

  1. 循环神经网络(RNN):将现有前馈神经网络替换为长短期记忆网络(LSTM)或门控循环单元(GRU),可显著提升模型对混沌系统中长程依赖关系的捕捉能力。
  2. 多重分形分析:实现多重分形分析方法,以确定不同时间尺度上的波动率结构。
  3. 吸引子拓扑分析:应用动态拓扑方法识别和分类价格动态中的奇异吸引子。
  4. 量子算法:未来,也许会将量子计算用于模拟复杂的混沌系统,在预测市场运动方面可能带来革命性的突破。

当然,稍后我们肯定会考虑基于该系统创建智能交易系统(EA)的问题。当前EA的原型设计框架如下:

总体而言,该系统表现尚可 —— 虽未达到卓越水准,但也无明显缺陷。

灵活平滑方法

在更新版指标中,我们新增了不同的平滑方法选择功能,使交易者可以根据市场状态自定义指标响应特性:

void ApplySmoothing(int rates_total, int prev_calculated, int period, ENUM_MA_METHOD method) {
   int start = prev_calculated == 0 ? InputNeurons + period : prev_calculated - 1;
   
   double temp[];
   ArrayResize(temp, rates_total);
   ArrayCopy(temp, OscillatorBuffer);
   
   for(int i = start; i < rates_total; i++) {
      switch(method) {
         case MODE_SMA: // Simple moving average
            {
               double sum = 0;
               for(int j = 0; j < period; j++) {
                  sum += temp[i - j];
               }
               OscillatorBuffer[i] = sum / period;
            }
            break;
            
         case MODE_EMA: // Exponential moving average
            {
               double alpha = 2.0 / (period + 1.0);
               OscillatorBuffer[i] = temp[i] * alpha + OscillatorBuffer[i-1] * (1.0 - alpha);
            }
            break;
            
         // ... other methods ...
      }
   }
}

对于李雅普诺夫指数较高的混沌市场,指数移动平均线(EMA)因响应速度更快而更为适用。而在李雅普诺夫指数较低、可预测性更强的市场中,简单移动平均线(SMA)能提供更可靠的信号,减少虚假触发。


结论

我们开发的并非又一个平庸的技术指标,而是一套完整的市场混沌分析系统。混沌吸引子振荡器融合了混沌理论、分形几何与神经网络的最新进展,在复杂不可测市场中为交易者提供导航的利器。

该指标的特殊价值在于,它不仅能够生成交易信号,还能通过李雅普诺夫指数评估这些信号的可靠性。交易者能够根据当前市场条件调整策略 —— 在系统可预测时积极行动,在混沌时谨慎行事。

在算法交易和人工智能(AI)时代,那些能够最好地模拟市场复杂本质的交易者将获得优势。混沌吸引子震荡指标是朝这个方向迈出的一步,让我们在别人只看到随机性时看到隐藏的秩序结构。

请牢记,即使是最先进的指标也不是成功的保证。交易始终需要严格的准则、完善的风险管理和对市场背景的理解。但是,当被赋予洞察市场混沌本质的能力时,您在通往持续盈利的道路上就获得了显著的优势。

祝交易顺利,愿混沌吸引子指引您前行!

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/17706

附加的文件 |
最近评论 | 前往讨论 (3)
stawros25
stawros25 | 20 4月 2025 在 16:07
非常有趣的文章和指标。我想把它放在真实账户的图表上,与传统的超买、超卖和背离 RSI指标 并行,比较这两个指标指示信号的准确性。 但是,正如人们所说的,唉,啊!我们这些外汇交易的老前辈使用的是 MQL4 语言,这种语言早已被熟练掌握,对于没有受过高等 IT 教育的普通统计交易者来说,它是可靠和易懂的。我们不能为了 MQL5 这样的新东西而改变它。请作者将该指标翻译成 MQL4。数以千计的实践交易者将感激不尽,尤其是如果该指标在趋势变化预测的准确性方面超过我们的老牌 RSI 指标。提前感谢您。
Yevgeniy Koshtenko
Yevgeniy Koshtenko | 22 4月 2025 在 02:55
stawros25 超买、超卖和背离 RSI指标 并行,比较这两个指标指示信号的准确性。 但是,正如人们所说的,唉,啊!我们这些外汇交易的老前辈使用的是 MQL4 语言,这种语言早已被熟练掌握,对于没有受过高等 IT 教育的普通统计交易者来说,它是可靠和易懂的。我们不能为了 MQL5 这样的新东西而改变它。请作者将该指标翻译成 MQL4。数以千计的实践交易者将感激不尽,尤其是如果该指标在趋势变化预测的准确性方面超过我们的老牌 RSI 指标。提前感谢您。

非常感谢。好的,我会试着把它翻译成 4)

Miguel Angel Vico Alba
Miguel Angel Vico Alba | 28 1月 2026 在 01:55
你好、

我读了你的文章--我非常喜欢你的观点和表述。我想和大家分享一点技术上的看法,也许大家会对这个话题感兴趣。

文中提到 Lyapunov 指数与市场混乱有关,但在代码(CalculateLyapunovExponent())中,实际上是计算模型的灵敏度:取两个几乎相同的输入样本,通过 ForwardPass(),然后计算MathLog(distance / epsilon)。这给出的是模型的度量,而不是市场动态的度量,这是非常合乎逻辑的,因为 "市场 "的 Lyapunov 几乎无法直接估算。

如果你想更深入地研究 "市场 "方面的问题,有一种方法是通过塔肯斯嵌入(Takens embedding):从本质上讲,相空间是由价格重建的,在这里你可以近似地计算轨迹的发散性。这纯粹是一种有趣的替代方法,而不是改变任何东西的建议--这篇文章已经发表了,而且很不错。

再次感谢你的想法。

附注: 如果从西班牙语到俄语的翻译有不清楚的地方,我深表歉意。
交易策略 交易策略
各种交易策略的分类都是任意的,下面这种分类强调从交易的基本概念上分类。
基于机器学习的黄金单向趋势交易策略研究 基于机器学习的黄金单向趋势交易策略研究
本文讨论一种仅沿选定方向(买入或卖出)进行交易的方法。为此,采用了因果推断技术和机器学习方法。
新手在交易中的10个基本错误 新手在交易中的10个基本错误
新手在交易中会犯的10个基本错误: 在市场刚开始时交易, 获利时不适当地仓促, 在损失的时候追加投资, 从最好的仓位开始平仓, 翻本心理, 最优越的仓位, 用永远买进的规则进行交易, 在第一天就平掉获利的仓位,当发出建一个相反的仓位警示时平仓, 犹豫。
神经Boid优化算法2(NOA2) 神经Boid优化算法2(NOA2)
新型专有优化算法NOA2融合了种群智能原理与神经控制机制。NOA2将神经Boid的运动机制与自适应神经系统结合,使智能体在搜索最优解的过程中能够自我修正其行为。该算法目前正处于积极开发阶段,展现出对于解决复杂优化问题的潜力。