English Русский Español Português
preview
在MQL5交易中集成计算机视觉(第二部分):将架构扩展到2D RGB图像分析

在MQL5交易中集成计算机视觉(第二部分):将架构扩展到2D RGB图像分析

MetaTrader 5交易系统 |
33 2
Yevgeniy Koshtenko
Yevgeniy Koshtenko

引言:当数字 “活” 起来

本系列的第一部分中,我们展示了卷积神经网络如何通过一维滤波器分析外汇报价的时间序列。现在,我们将实现一次质的飞跃:让算法学会将市场视为完整的视觉图景,从中捕捉纹理、形态与隐藏信号。

将枯燥的数值序列转化为图像,能让算法以全新的视角分析市场。这正是资深交易者的思维方式——他们看到的不只是数据表,更是一幅动态的市场图景,每一个细节都蕴含着重要的信号。该算法突破了一维表示的局限,揭示出在纯数值序列中无法察觉的结构与形态。


数据炼金术:从数字到视觉交响

我们以128×128像素的数字画布为舞台,上演市场的动态演变。市场报价曲线被转化为多通道的视觉图谱。 

红色通道承载价格数据 —— 这是交易者追寻的核心信息。绿色通道呈现技术指标 —— 移动平均线、MACD、布林带等历经数十年验证的工具。蓝色通道反映震荡指标 —— RSI、随机震荡器与波动率指标,如同脉搏一般揭示市场情绪。

构建这一效果的代码看似简单,但其背后蕴藏着足以革新市场认知的强大力量:

# Code snippet that converts data into an RGB image
for t in range(window_size):
    x = int(t / window_size * img_size[1])
    y = int((1 - img_data[j, t]) * img_size[0])
    if 0 <= y < img_size[0] and 0 <= x < img_size[1]:
        img[y, x, 0] = 1.0  # Red channel for price data

当数据被转化为图像时,奇妙的形态便会浮现,宛如夜空中的繁星。这就好比在照片中直接看到一张面孔,而非用数学公式去描述它。交易者需要花费数年时间才能学会识别的形态 —— 头肩顶、双底、旗形 —— 在算法面前清晰呈现,如同黎明般显而易见。 

我们还加入了K线形态,让这些图像信息更加丰富。看涨K线呈现鲜亮的绿色,象征上涨的希望;看跌K线则以红色显示,如同警示信号。影线以半色调绘制,如同阴影一般,暗示着多空双方的激烈博弈。这样使得模型不仅能捕捉整体趋势,还能识别“锤子线”、“吞没形态”、“十字星”等细微形态。

具体实现代码如下:

if close_y < open_y:  # Bullish candle
    for y in range(close_y, open_y):
        if 0 <= y < img_size[0] and 0 <= x < img_size[1]:
            img[y, x, 1] = 1.0  # Green
else:  # Bearish candle
    for y in range(open_y, close_y):
        if 0 <= y < img_size[0] and 0 <= x < img_size[1]:
            img[y, x, 0] = 1.0  # Red

这些图像绝非单纯的可视化呈现。它们宛如热力图,色彩的强度映射着市场的能量,每一根 K 线都在诉说多头与空头博弈的微观故事。这是一种全新的语言,算法借此与市场对话,其韵律如诗般优美。


神经网络架构:拥有三重视觉的人工交易者

打造人工交易者,如同建造摩天大楼, 每一层都各司其职,共同构筑出宏伟的成果。我们的网络架构包含三条并行分支,每条分支都以独有的视角审视市场。第一条分支采用短卷积滤波器,捕捉瞬时信号:价位突破、趋势反转、剧烈跳动。第二条分支使用较长的卷积滤波器,洞察主导市场周期的宏观大趋势,如同江河塑造地貌。第三条分支监控波动率与动量,通过分析震荡指标判断市场是处于平稳状态,还是即将迎来剧烈波动。

实现这一设计理念的代码如下:

local_path = Conv1D(64, 3, padding='same', activation='relu')(inputs[:,:,:,0])
trend_path = Conv1D(64, 7, padding='same', activation='relu')(inputs[:,:,:,1])
vol_path = Conv1D(64, 5, padding='same', activation='relu')(inputs[:,:,:,2])

这些分支在融合为一个整体前,会先经过注意力机制处理 —— 这项技术能让模型学会聚焦关键信息,就像资深交易者能在新闻与图表的噪音中,精准捕捉核心信号。《创造力代码》一书的作者马库斯・杜・索托伊(Marcus du Sautoy)将其比作冥想:“模型学会穿透噪音,看见本质。”简单的一行代码就能实现这一效果:

attention_layer = Attention()([merged, merged])

但这还不是全部。我们还加入了双向LSTM层,它能前后双向遍历数据,如同历史学家翻阅过去与未来的篇章。这样有助于捕捉复杂的市场形态:长期盘整、隐藏反转、突破前的市场静默时刻。接下来,全局特征聚合层如同指挥家,将所有信息汇集成一曲完整的交响乐,形成对市场的全局认知。

最后的点睛之笔是多任务训练。模型不仅判断价格涨跌,还能预测市场的波动幅度。传奇投资大师彼得・林奇(Peter Lynch)曾说,知道一只股票会上涨是一回事,而精准预测它会上涨8%,则完全是另一回事。我们的模型正是做到了这一点,如同棋手不仅能看到一步棋,更能预判整局棋局。


透过钥匙孔:算法如何揭示它的 “思考”

实现这一功能的代码看似简单,背后却是一场革新:

attention = np.mean(np.abs(attention_maps[i]), axis=-1)
heatmap = cv2.applyColorMap(np.uint8(255 * attention_resized), cv2.COLORMAP_JET)

这种可视化开启了一门全新的学科:市场神经解析学。我们第一次不再只是从 “黑箱” 中获取预测结果,而是能理解模型为何做出这一判断。 

另一项重大发现是神经元的专业化分工。通过分析隐藏层的激活状态,我们发现:有的神经元仅在市场剧烈反转时 “点亮”,有的仅在平稳趋势中激活,还有的只在风暴来临前的平静期响应。这与人类大脑极为相似 —— 不同脑区分别负责视觉、听觉等功能。

模型自主构建了专属的市场认知地图,以分析师从未有过的方式对市场状态进行分类。例如,它发现了RSI与价格之间罕见的背离信号,资深交易者后续证实该信号极具价值。这不只是一种算法,更是一种全新的市场分析方式。


决策透明度:当机器自我解释

我们的系统不仅输出预测结果,还能解释它是如何得出结论的。我们可以绘制热力图,用红色高亮显示模型的注意力聚焦区域,直观展示模型关注的重点。这就像直接窥探交易者的思维,找出他在图表上圈画的关键点位。该可视化的实现代码如下:

def plot_prediction_with_attention(data, prediction, attention_weights):
    plt.plot(data.index, data['close'], label='Close price', color='black', linewidth=2)
    for i in range(len(data.index) - 1):
        plt.axvspan(data.index[i], data.index[i+1], 
                   alpha=attention_weights[i] * 0.3, color='red')

这类可视化图像让模型从一个神秘的 “黑箱” 变成了一位交易合作伙伴。交易者不仅能知道市场将要上涨,还能明白背后的原因:究竟是哪些指标、哪些K线、哪些关键时段让算法做出了这一判断。模型在数据中流畅推演,逐帧生成预测,如同导演在拍摄一部市场动态影片。这些不再只是冰冷的数字 —— 而是一段流动着的市场叙事。

imageio.mimsave(gif_path, frames, duration=0.5)


成功案例:模型如何颠覆交易模式

为了直观理解模型在实战中的作用,不妨想象一位名叫安(Ann)的交易者,她就职于芝加哥一家小型自营交易基金。多年来,安一直依靠经验与直觉做交易,但市场日趋复杂,竞争也愈发激烈。自从使用这款模型后,她的交易方式彻底改变。她不再花费数小时分析图表,转而查看模型为欧元兑美元生成的注意力热力图。这些图清晰地显示出市场在何处即将反转、何处趋势正在增强、何处可能进入沉寂阶段。模型还可以进一步演变为自动交易机器人(如EA),让安彻底从高压决策中解脱出来。 


技术细节:模型如何实现 “视觉感知”

其中一个关键步骤,是使用RobustScaler(稳健缩放器)对数据进行标准化处理。市场本身是混沌的。突发新闻等剧烈冲击常会扭曲数据形态。RobustScaler能够忽略这类异常值,让模型保持稳定可靠的判断能力。其工作原理如下:

scaler = RobustScaler()
if window_data[indicator].std() != 0:
    img_data[j] = scaler.fit_transform(window_data[indicator].values.reshape(-1, 1)).flatten()

另一项技巧是使用高斯滤波器对图像进行模糊处理。这一操作能平滑噪声,帮助模型聚焦于整体形态,而非随机的波动尖峰。这就如同戴上眼镜,从一棵棵树木中看见整片森林:

img = gaussian_filter1d(img, sigma=0.5, axis=0)
img = gaussian_filter1d(img, sigma=0.5, axis=1)

模型的训练本身就是一段漫长的历程。我们使用了多种回调函数,用以防止过拟合、保存最优模型版本,以及自适应调整学习率。如果模型开始死记硬背数据,早停法(EarlyStopping) 会立即终止训练;当模型进展放缓时,自适应学习率(ReduceLROnPlateau) 会降低迭代步长。这就像教孩子骑自行车一样:在他们能独立骑行前,您一直扶着车后座保驾护航。

callbacks = [
    EarlyStopping(monitor='val_direction_accuracy', patience=15, restore_best_weights=True, verbose=1, mode='max'),
    ModelCheckpoint(filepath=os.path.join(checkpoint_dir, 'best_model.keras'), monitor='val_direction_accuracy', save_best_only=True, verbose=1),
    ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=7, min_lr=0.00001, verbose=1)
]

训练曲线的结果令人鼓舞:测试集准确率并未大幅下降,在少量训练轮次中始终稳定保持在53%以上。

我们优化后的模型架构已展现出良好的效果,但这仅仅是个开始。 

基本面数据融合

当前模型仅使用技术面数据。下一步的合理方向是融入基本面因素:经济指标、新闻事件、市场情绪。可通过多模态训练实现,将新闻文本转换为向量表示,并与技术数据融合。

市场的时间层级与分形结构

市场具有分形特性:不同时间周期的走势呈现出显著的自相似性。基于多时间周期(从分钟图到月图)分层处理的架构,能够挖掘复杂的多层级走势规律。

自适应训练与元学习

市场持续变化,要求模型不断适配。一个极具前景的方向是开发元学习系统,可根据市场环境变化自动调整模型结构与参数。

这些细节不只是代码。而是让模型比交易者更深刻理解市场的基础。


展望未来:全新视野

我们的模型只是起点,是宏大蓝图上的第一笔。试想加入新闻与经济数据。Transformer(一种人工智能模型)将彭博社(Bloomberg)头条、美联储报告转为向量,模型把这些信息与图表、指标融合。加息决议,或是马斯克的突发推文,都将成为算法感知的市场图景的一部分。像这样给交易者的不仅是图表,而是整个世界的市场背景。

市场是分形的,规律在分钟到月的不同时间尺度上重复。若让模型同时观测所有周期,就能发现连顶尖分析师都忽略的嵌套趋势。想象一下,模型在日线图识别出头肩顶,同时在5分钟图发现内部微观形态。如同一眼同时看见星系与星辰。

如果模型能自优化?那么元学习将让它自适应市场从平稳到剧烈波动的变化。市场波动加剧时,它会自动调整参数,如同船长在风暴中掌舵。这并非幻想,而是即将到来的下一步。

透明度是另一项目标。我们希望交易者不仅信任模型,更能从中学习。注意力与激活值的深度可视化,将揭示算法的思考逻辑,或许能教会我们用全新视角看待市场。试想模型发现从未有人注意的形态,交易者将以它命名为 “神经十字”。它将不只是工具,更是一种全新的思维方式。

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

附加的文件 |
CV_2_D.py (41.61 KB)
最近评论 | 前往讨论 (2)
Chacha Ian Maroa
Chacha Ian Maroa | 22 4月 2026 在 16:45
感谢您的工作。感谢您对社区的帮助。
Victor Golovkov
Victor Golovkov | 23 4月 2026 在 04:14

熟悉的表述风格🤣
如今,人类作者显然已经不再自己形成思想。

IvanIvanych,不仅可以用来 从手指中吸吮 "美丽 "的表述, 还可以用来分析语言模式:

"这篇文章展示了人工智能创建文本的特点,包括技术准确性高、结构严谨和出版期限紧迫。无序的表述风格和 "注意机制 "等复杂概念的使用表明,该材料是由神经网络 主动生成的"

祝你掌握预算🖖。

神经网络在交易中的应用:混合图序列模型(终篇) 神经网络在交易中的应用:混合图序列模型(终篇)
我们继续探索混合图序列模型(GSM++),该模型融合了不同架构的优点,既提供了高分析精度,又实现了计算资源的有效分配。这些模型能够有效识别隐藏的模式,降低市场噪声的影响,并提高预测质量。
在MQL5中实现盈亏平衡机制(第一部分):基类与固定点数的盈亏平衡模式 在MQL5中实现盈亏平衡机制(第一部分):基类与固定点数的盈亏平衡模式
本文将探讨如何使用MQL5语言,在自动化交易策略中应用盈亏平衡机制。我们会先简要介绍什么是盈亏平衡模式、其实现方式以及可能存在的不同类型。随后,该功能将被集成到我们在上一篇关于风险管理的文章中所构建的Order Blocks智能交易系统(EA)中。为评估盈亏平衡机制的效果,我们会在特定条件下进行两组回测:一组启用盈亏平衡机制,另一组则不启用。
基于马尔可夫链的矩阵预测模型 基于马尔可夫链的矩阵预测模型
我们将创建一个基于马尔可夫链的矩阵预测模型。什么是马尔可夫链?我们如何将马尔可夫链应用于外汇交易?
骆驼算法(CA) 骆驼算法(CA)
骆驼算法(CA)于 2016 年被提出,该算法模拟沙漠中骆驼的行为特征来求解优化问题,同时考量温度、供给储备和耐力三大因素。本文还提出了该算法的改进版本(CAm),核心改进包括:在解的生成过程中引入高斯分布,并对绿洲效应参数进行优化。