English Русский Español Deutsch 日本語 Português
preview
通过成交量洞察交易:趋势确认

通过成交量洞察交易:趋势确认

MetaTrader 5交易系统 |
698 4
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

引言

在当今波动的金融市场中,区分真实与虚假的市场行情是交易者面临的一个持续难题。市场噪音——其特征是短暂的价格波动和虚假突破——一旦被误认为是真正的交易机会,就可能导致重大损失。在突破交易中,这个问题尤为严重,因为成功与否取决于能否准确识别长期的价格趋势。

为了克服这些问题,本方案提供了一种改进的趋势确认方法,该方法融合了价格行为和成交量分析。该方法基于一个核心理念:显著的市场变化通常伴随着高于平均水平的交易量,因此它将成交量作为关键的验证标准。通过要求价格突破和成交量激增这两个条件同时出现,该方法有助于剔除误导性信号,找到更可靠的交易机会。这种双重确认策略旨在通过确保市场行情有足够的交易活动作为支撑,来提高交易质量,并提升价格持续朝同一方向变动的可能性。



增强型趋势确认技术 

为了构建一个稳健的交易系统,增强型趋势确认技术结合了多种分析要素。从本质上讲,该技术通过分析支撑位和阻力位来进行价格趋势分析,当价格行为明确突破这些关键位时,便识别出潜在的突破机会。为了适应不断变化的市场状况,系统会持续追踪多个时间周期的价格变动,并根据近期的价格历史来确定动态的支撑和阻力区域。

关键的二次验证方法是成交量确认,它要求交易量必须超过其移动平均线的一定阈值,才能验证一个交易信号。这个成交量要素至关重要,因为它确认了价格波动的强度和其可能的持续性。该方法特别寻找成交量在20个周期的回望窗口内,超过正常交易量50%或以上的激增情况,以确保价格突破得到实质性市场活动的支撑。

这些要素共同构成了一个全面的交易系统。一旦价格突破发生,系统会立即评估相关的成交量数据。只有当所有条件都得到满足——即出现明确的价格突破和显著放大的成交量——该技术才会生成一个交易信号。由于真实的市场行情通常同时表现出价格动能和增加的交易活动,这种双重确认方法有助于剔除虚假突破和低概率的交易设置。该框架通过使用基于平均真实波幅计算的动态止损和止盈水平,进一步优化了交易管理,确保风险管理能适应市场的波动性。

这段代码实现了一个复杂的交易策略,该策略结合了三个关键技术分析要素来进行趋势确认。其核心是,该策略监控成交量突破,即成交量超过前20个周期窗口内计算出的历史平均值的50%。此成交量分析由价格行为确认作为补充,系统从近期价格历史中识别出支撑位和阻力位,并在价格收盘突破这些水平时验证突破的有效性。

为了整合机器学习,该技术采用了一个拥有32个隐藏节点的LSTM神经网络来分析成交量模式。这个神经网络会随着每一根新K线的出现而更新其预测,为成交量突破增加了另一层验证。当所有三个要素——高成交量、已验证的价格突破和LSTM验证——都达成一致时,算法便会执行基于ATR的仓位调整来进行交易。
实施风险管理至关重要,动态的止损和止盈水平是通过平均真实波幅(ATR)来定义的。通过将止盈目标设在入场点上方3倍ATR处,止损设在入场点下方2倍ATR处,从而产生良好的风险回报比。此外,该系统还设有防止重复持仓的保护机制,确保任何时候都只有一个未平仓交易。

流程图



实施策略

该EA运用了若干核心要素,来执行一套系统化的突破交易策略。为了量化波动性,代码首先设置了ATR(平均真实波幅)指标和成交量分析参数。为防止重复处理,OnTick() 方法在整个执行过程中作为主入口点,但仅在新的价格K线形成时才启动分析。

核心逻辑遵循一个结构化的决策树:

通过 IsVolumeBreakout() 函数进行成交量突破验证,该函数会检查当前成交量是否以指定的阈值(默认为50%)超过了历史平均值。

bool IsVolumeBreakout()
{
    double currentVolume = iVolume(_Symbol, PERIOD_CURRENT, 1);
    double avgVolume = 0;
    
    for(int i = 1; i <= VOLUME_LOOKBACK; i++)
    {
        avgVolume += iVolume(_Symbol, PERIOD_CURRENT, i);
    }
    avgVolume = avgVolume / VOLUME_LOOKBACK;
    
    .....
    
    return (currentVolume > avgVolume * VOLUME_THRESHOLD);
}

价格突破确认通过 IsPriceBreakout() 函数实现,该函数会分析近期的价格行为,以识别价格向上突破阻力位或向下突破支撑位的情况。

bool IsPriceBreakout(bool &isLong)
{
    double high[], low[], close[];
    ArraySetAsSeries(high, true);
    ArraySetAsSeries(low, true);
    ArraySetAsSeries(close, true);
    
    if(CopyHigh(_Symbol, PERIOD_CURRENT, 0, 10, high) <= 0) return false;
    if(CopyLow(_Symbol, PERIOD_CURRENT, 0, 10, low) <= 0) return false;
    if(CopyClose(_Symbol, PERIOD_CURRENT, 0, 10, close) <= 0) return false;
    
    double resistance = high[1];
    double support = low[1];
    
    for(int i = 2; i < 10; i++)
    {
        if(high[i] > resistance) resistance = high[i];
        if(low[i] < support) support = low[i];
    }
    
    ....
    
    if(close[0] > resistance && close[1] <= resistance)
    {
        isLong = true;
        Print("BREAKOUT ALCISTA DETECTADO");
        return true;
    }
    else if(close[0] < support && close[1] >= support)
    {
        isLong = false;
        Print("BREAKOUT BAJISTA DETECTADO");
        return true;
    }
    
    return false;
}

交易执行通过 PlaceOrder() 函数进行,且仅在成交量与价格条件均满足时才会触发。

风险管理通过多种机制整合实现:

  • 仓位规模固定为每笔交易0.1手
  • 止损位通过ATR倍数动态计算(默认为2.0倍ATR)
  • 止盈目标设置为入场点起算的3.0倍ATR距离
  • 系统禁止持有多个同向持仓
  • 最低K线确认要求(默认为2根K线)有助于规避假突破

交易的退出机制由以下规则主导:

  • 基于ATR的预设止损和止盈水平
  • 单一持仓限制确保了清晰的进场/出场周期
  • 所有计算均使用标准化价格值,以在不同交易品种上保持精度
void PlaceOrder(bool isLong)
{
    CTrade trade;
    double price = isLong ? SymbolInfoDouble(_Symbol, SYMBOL_ASK) : SymbolInfoDouble(_Symbol, SYMBOL_BID);
        
    double atr[], close[];
    ArraySetAsSeries(atr, true);
    ArraySetAsSeries(close, true);
    
    if(CopyBuffer(atr_handle, 0, 0, 1, atr) <= 0) return;
    if(CopyClose(_Symbol, PERIOD_CURRENT, 0, 1, close) <= 0) return;
    
    double stopLoss = isLong ? price - (atr[0] * SL_ATR_MULTIPLIER) : price + (atr[0] * SL_ATR_MULTIPLIER);
    double takeProfit = isLong ? price + (atr[0] * TP_ATR_MULTIPLIER) : price - (atr[0] * TP_ATR_MULTIPLIER);
    
    stopLoss = NormalizeDouble(stopLoss, _Digits);
    takeProfit = NormalizeDouble(takeProfit, _Digits);
    
    ENUM_ORDER_TYPE orderType = isLong ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
    
    ....
    
    if(PositionsTotal() > 0)
    {
        Print("Ya hay posiciones abiertas, saliendo...");
        return;
    }
    
    if(!trade.PositionOpen(_Symbol, orderType, 0.1, price, stopLoss, takeProfit))
    {
        ...
        return;
    }
    
    Print("Orden colocada exitosamente. Dirección: ", isLong ? "LONG" : "SHORT");
}



适应性与灵活性

该技术所采用的多重验证方法,正是其灵活性的关键所在。在外汇市场中,成交量的突破可能暗示着大型市场参与者的介入;而在股票市场,成交量激增则通常意味着机构的活动。由于大宗商品市场的成交量飙升通常发生在重大趋势转变之前,因此该方法在此类市场上尤其有效。

为了获得最佳效果,必须针对特定市场进行校准。在流动性极高的市场(如主要外汇货币对)中,当前设定为1.5倍的成交量阈值可能需要调整,以过滤掉市场噪音。对于流动性较差的交易品种,MIN_CANDLES_CONFIRM(最低K线确认数)设置变得至关重要,用以防止假突破。LSTM组件的 HIDDEN_SIZE(隐藏层大小)参数应根据市场的常规成交量模式进行缩放;对于像加密货币这样更复杂的市场,数值越高越好。
基于ATR的仓位调整也提供了对市场的有机适应性。SL_ATR_MULTIPLIER(止损ATR倍数)和 TP_ATR_MULTIPLIER(止盈ATR倍数)所设定的动态止损和止盈目标,能够根据每个交易品种的波动性特征进行动态调整。例如,大盘指数可能从更紧密的设置中获益,而像小盘股这样波动性更大的市场,则可能受益于更宽松的止损(即更高的倍数)。

设置

输入

图形

回测

凭借一套结合了成交量分析、趋势识别和LSTM神经网络预测的稳健策略,该EA展现出了令人鼓舞的成果。尽管仍有改进空间,但权益曲线的稳定性表明其风险管理系统正在高效运作。相对较低的盈利因子暗示了一种谨慎的交易策略,这通常有利于实现长期可持续性。

该系统在EURUSD(欧元/美元)市场的复杂性中仍能保持稳定表现的能力,是相当引人注目的。LSTM预测、趋势分析和成交量阈值这三个确认变量,似乎协同工作得很好,能够有效过滤掉错误信号。对吞没形态的识别和针形线(Pin Bar)假突破检测的使用,提供了另一层安全保障。

然而,仍有改进的空间。大约50%的胜率表明,进场/出场标准或许还有提升的余地。一个可行的方案是采用比当前K线计数和假突破检测更复杂的退出策略。此外,在系统的成交量阈值计算中加入对市场波动的修正,也可能带来益处。

尽管回撤水平尚在可控范围内,但可以通过引入与其他主要货币对的相关性分析来降低回撤,从而避免在高度关联的市场行情中过度暴露风险;或者,也可以根据市场状况引入动态仓位调整。

LSTM实现中极短的输入规模和回看周期,表明其侧重于近期的市场活动。尽管这在当前设置中似乎运作良好,但延长回看周期可能有助于识别更长期的市场趋势,并在重大趋势转变期间提高预测准确性。

保守的获利策略虽然保证了稳定性,但在强劲势头期间通过仓位加码来优化利润,尤其是在特别有利的市场条件下,或许存在着机会。

该EA的架构专注于成交量分析和价格趋势等普适性市场特征,这使其在交易EURUSD之外的多种金融工具时具有高度的灵活性。

由于LSTM神经网络基于的是相对成交量波动和价格模式,而非特定货币的因素,其架构尤其具有适应性。这意味着它可以成功地应用于其他主要外汇货币对、大宗商品,甚至是那些价格走势受成交量严重影响的股票指数。

但必须记住,不同的交易品种可能需要调整其回看周期和成交量阈值倍数。例如,考虑到USDJPY或GBPUSD等货币对独特的交易特性和常规成交量特征,它们可能需要不同的成交量标准。同样,黄金或石油等大宗商品由于其独特的市场动态,可能会从延长的回看周期中受益。

由于针形和吞没形态在所有金融市场都很常见,因此利用它们进行假突破检测的技术具有广泛的适用性。然而,其有效性可能因每个交易品种的常规波动性而异。例如,对于波动性更大的交易品种,可能需要为形态识别设置更宽泛的阈值。

尽管当前的EURUSD结果提供了一个坚实的起点,但在其他交易品种上使用该策略的交易者,应注意针对成交量阈值和LSTM隐藏层大小等参数进行周期调整。灵活性是该策略的优势之一,但必须认识到,每个市场都有其独特的“个性”和交易特征,在调整参数设置时必须将这些因素考虑在内。

为了在不同交易品种上实现最佳效果,可以考虑开发一个自我调整机制,根据每个交易品种的成交量特征和波动性历史来校准关键参数。这将进一步增强策略对不同交易品种和市场状况的适应性与稳健性。

设置GBPUSD

GBPUSD的输入参数

GBPUSD的图形

回测GBPUSD


设置Gold

Gold的输入参数

Gold的图形

回测Gold



结论

总而言之,这套交易方法具备多项显著优势,使其成为市场参与者的一项有力工具。这套系统化的策略能够利用可预期的市场趋势和波动性来获利,同时减少了情绪化决策。通过整合多项技术指标和严谨的风险管理流程,该方法提供了一个全面的框架,该框架具备足够的灵活性,能够适应不断变化的市场环境。其内置的保护机制——例如仓位管理指南和止损机制——有助于在市场不利变动时保护资金,同时又能让交易者在有利趋势中获得有意义的参与。

最重要的是,交易者需要理解,该方法并非一个“设置后便可高枕无忧”的系统。为了在市场环境变化时保持有效性,持续的观察和频繁的参数调整是取得成功的必要条件。交易者应详细记录所有交易,定期评估绩效指标,并准备好根据数据驱动的方式,对风险参数、仓位规模和指标设置进行调整。对这种持续适应和发展的投入,是长期成功的关键。

建议希望采用此技术的交易者,首先从模拟交易开始,以熟悉进出场时机和操作机制。在熟悉之后,从较小的仓位开始,随着你展现出可靠的执行力,再逐步增加仓位。请记住,没有任何策略能在所有市场环境下都有效;相反,你应该建立明确的规则,规定在何种不利情况下应限制风险敞口或暂时暂停使用该策略。建立一个稳固的每日市场分析习惯,在遵循既定规则的同时,保持适应环境变化的灵活性。最终,成功源于专注的执行,以及基于对结果的深入分析而对策略进行严格的修正。
文件 保存文件的目录
.mqh 将机器学习(ML)文件保存在 MQL5/Include/ 目录下。
.mq5 将EA保存在 MQL5/Expert/ 目录下。

本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/16573

附加的文件 |
Volume_LSTM.mqh (14.23 KB)
最近评论 | 前往讨论 (4)
Anil Varma
Anil Varma | 16 1月 2025 在 16:06
MetaQuotes:

查看新文章:通过成交量洞察交易:趋势确认

作者:Javier Santiago Gaston De Iriarte Cabrera哈维尔-圣地亚哥-加斯顿-德-伊里亚特-卡布雷拉

你好,哈维尔

感谢您基于 "使用 LSTM 神经网络进行额外确认 "的 EA

但是,我没有找到您在 EA 中使用上述额外确认的位置和方法。

能否请您详细说明一下。

Fernando Carreiro
Fernando Carreiro | 16 1月 2025 在 16:12
@Anil Varma #: 你好,哈维尔。感谢您基于 "使用 LSTM 神经网络进行额外确认 "的 EA 但是我没有找到您在 EA 中使用上述额外确认的位置和方法。能否请您详细说明一下。
作者目前被禁言(不知道多久),无法回答您的问题。
Anil Varma
Anil Varma | 17 1月 2025 在 06:54
Fernando Carreiro #:
作者目前被禁言(不知道禁言多久),无法回答您的问题。

感谢更新@Fernando Carreiro

我只是想知道为什么他的名字被删除了。

ceejay1962
ceejay1962 | 17 1月 2025 在 12:22
Anil Varma #:

你好,哈维尔

感谢您基于 "同时使用 LSTM 神经网络进行额外确认 "的 EA

但我没有找到您在 EA 中使用上述额外确认的位置和方法。

能否请您详细说明一下。

我对此也有点困惑 - 似乎 EA 是用 volumePredictor *volumePredictor 创建交易量预测器对象的;随后调用 volumePredictor.UpdateHistoricalData(volumes); 更新预测。但我找不到任何对 volumePredictor.PredictNextVolume() 的调用;

金融建模中合成数据的生成式对抗网络(GAN)(第 1 部分):金融建模中的 GAN 与合成数据概述 金融建模中合成数据的生成式对抗网络(GAN)(第 1 部分):金融建模中的 GAN 与合成数据概述
本文向交易者介绍产生合成金融数据的生成式对抗网络(GAN),解决模型训练中的数据限制。它涵盖了 GAN 基础知识、python 和 MQL5 代码实现,以及实际的金融应用,令交易者能够通过合成数据强化模型的准确性和健壮性。
将您自己的 LLM 集成到 EA 中(第 5 部分):使用 LLM 开发和测试交易策略(二)-LoRA-调优 将您自己的 LLM 集成到 EA 中(第 5 部分):使用 LLM 开发和测试交易策略(二)-LoRA-调优
随着当今人工智能的快速发展,语言模型(LLMs)是人工智能的重要组成部分,因此我们应该考虑如何将强大的 LLMs 整合到我们的算法交易中。对于大多数人来说,很难根据他们的需求微调这些强大的模型,在本地部署它们,然后将它们应用于算法交易。本系列文章将采取循序渐进的方法来实现这一目标。
将 MQL5 与数据处理包集成(第 3 部分):增强的数据可视化 将 MQL5 与数据处理包集成(第 3 部分):增强的数据可视化
在本文中,我们将通过结合交互性、分层数据和动态元素等功能,超越基本图表,实现增强的数据可视化,使交易者能够更有效地探索趋势、形态和相关性。
基于时间、价格和成交量创建 3D 柱状图引入波动率测量 基于时间、价格和成交量创建 3D 柱状图引入波动率测量
本文探讨了多元三维价格图表及其创建方法。我们还将探讨 3D 柱状图如何预测价格反转,以及 Python 和 MetaTrader 5 如何让我们实时绘制这些成交量柱状图。