价格行为分析工具包开发(第五部分):波动率导航智能交易系统(Volatility Navigator EA)
概述
交易中的复杂情况远不止于识别潜在的市场方向,还要求精准的执行。许多交易者遭遇挫折,并非因为交易执行不力,而是因为入场点、止损设置或止盈目标不准确。
为应对这一挑战,我使用MQL5编程语言开发了一款名为波动率导航(Volatility Navigator)的新工具,该工具专为优化交易中的这些关键环节而设计。与我之前开发的那些主要聚焦于预测市场趋势的工具不同,波动率导航能够独立识别最优入场点、止损水平和止盈目标。
通过将先进的技术指标融入价格行为分析中,我们旨在提升交易体验,并改进策略制定。
请参阅以下章节。
技术指标
技术指标可分为多种类型,包括趋势指标、动量指标、波动率指标和成交量指标,每种指标在金融市场分析中都有其独特的作用。一些广泛使用的例子包括移动平均线(Moving Average)、相对强弱指数(Relative Strength Index,RSI)、布林带(Bollinger Bands)和移动平均线收敛发散指标(Moving Average Convergence Divergence,MACD)。
让我们来仔细看一下将与价格行为一起使用的三个指标:布林带、相对强弱指数(RSI)和平均真实波幅(ATR)。
- 布林带
布林带是约翰·布林(John Bollinger)在20世纪80年代初开发的一种技术分析工具,旨在帮助交易者识别市场趋势和潜在的价格反转点。这一概念源于布林希望提供一种比传统技术指标更动态的方式来衡量价格波动性。约翰·布林希望创造一种能够适应不断变化的市场条件的交易工具。
他想要一个能够根据市场波动性进行调整的指标,这促使他想到了结合移动平均线和价格变化度量指标的方法。布林带由三条线组成:
- 中轨通常是特定时间段(通常为20天)内收盘价的简单移动平均线(SMA)。
- 上轨是中轨加上特定数量的标准差(通常为两个)。
- 下轨是中轨减去相同数量的标准差。

图例1. 布林带
使用标准差是布林带的关键所在,因为它提供了衡量波动性的统计指标。通过纳入这一衡量标准,布林带能够有效地将价格波动限定在一个范围内,帮助交易者识别潜在的突破或反转行情。
交易者经常利用布林带来判断超买或超卖状况、潜在的趋势反转,并评估价格走势的强度。例如,价格触及上轨可能表明处于超买状态,而价格触及下轨则可能意味着处于超卖状态。
- 相对强弱指数(RSI)
相对强弱指数(RSI)由小J·韦尔斯·怀尔德(J. Welles Wilder Jr.)发明。在其1978年出版的《技术交易系统新概念》一书中首次提出。怀尔德旨在创造一种动量振荡指标,帮助交易者识别金融市场的超买和超卖状况。以下是RSI的计算公式。
图例2. RSI公式
RSI用于衡量价格变动的速度和幅度,有助于在特定时间段(通常为14天)内识别市场的超买或超卖状况。RSI的取值范围在0到100之间,RSI高于70通常表明资产可能处于超买状态,而RSI低于30则表明资产可能处于超卖状态。
交易者利用RSI来发出潜在反转信号或确认趋势。此外,RSI与价格走势之间的背离可能表明动量减弱,从而带来更多交易机会。

图例3. RSI图表
- 平均真实波幅(ATR)
平均真实波幅(ATR)指标由小J·韦尔斯·怀尔德(J. Welles Wilder Jr.)发明。在其1978年出版的《技术交易系统新概念》一书中首次提出。怀尔德设计ATR是为了通过计算真实波幅(TR)来衡量市场波动性,真实波幅会考虑特定时间段内价格波动的最大范围。
此后,ATR已成为技术分析中广泛使用的工具,帮助交易者评估各种金融市场的波动性并管理风险。ATR是一种波动性指标,用于衡量特定时间段内的价格波动幅度,提供市场波动性的洞察,而不指示价格波动的方向。
ATR值越高,表明波动性越大;ATR值越低,则表明波动性越小。交易者利用ATR来制定风险管理策略,例如根据市场状况设置止损水平和仓位规模。这有助于根据不同的市场波动性调整交易策略,从而在不同情境下实现更有效的交易。下面让我们来看一下ATR的计算公式。
图例4. ATR计算
在交易策略中使用平均真实波幅(ATR)的目的是根据当前市场波动性动态调整止损和止盈水平。ATR作为衡量价格波动的指标,使EA能够在市场波动性较高时设置更宽的止损止盈水平,而在市场较为平静时则设置更紧的水平。这种方法通过确保在波动条件下交易不会过早被止损,同时在市场波动较为平缓时抓住潜在利润,从而增强了风险管理效果。通过纳入ATR,EA能够适应不断变化的市场条件,实现更有效的交易执行,并提高成功的几率。
该EA的结构概览
波动率导航EA采用符合MQL5编程标准的结构化布局设计。了解此布局对于有效设置EA并根据市场条件变化进行调整至关重要。在MQL5中,指标句柄是简化EA内技术指标使用过程的关键工具。EA无需在每次价格变动时重新计算指标,而是可以快速引用这些句柄以获取最新值。
例如,每当OnTick()函数运行时,EA都可以高效地访问相关指标值,这在快速变化的市场条件下尤为有利。这种即时访问功能使得能够根据当前市场动态采取更好的行动。
EA的核心功能
MQL5 EA的主要组成部分包括三个关键函数:OnInit()、OnTick()和OnDeinit()。
- OnInit()函数
int OnInit() { // Initialize RSI rsiHandle = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); // Initialize Bollinger Bands bbHandle = iBands(NULL, 0, bbPeriod, 2, 0, PRICE_CLOSE); // Initialize ATR atrHandle = iATR(NULL, 0, atrPeriod); return INIT_SUCCEEDED; }
在上述代码段中,我们正在为相对强弱指数(RSI)、布林带(Bollinger Bands)和平均真实波幅(ATR)指标创建句柄,这些指标都将辅助EA做出交易决策。
- OnTick()函数:
OnTick()函数至关重要,因为每当市场价格发生波动时都会调用它。在该函数中,EA会评估当前指标值,并确定合适的交易操作。
void OnTick() { double rsiValue = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); double upperBand, middleBand, lowerBand; iBands(NULL, 0, bbPeriod, 2, 0, PRICE_CLOSE, upperBand, middleBand, lowerBand); double atrValue = iATR(NULL, 0, atrPeriod); // Trading logic if (rsiValue > 70 && Close[0] > upperBand) { // Logic to place a sell order } else if (rsiValue < 30 && Close[0] < lowerBand) { // Logic to place a buy order } }
在此,EA会检查RSI值、布林带和ATR,以便做出明智的交易决策。例如,当RSI显示超买状态且价格超过布林带上轨时,EA会执行卖出操作。
- OnDeinit()函数:
当EA从图表中移除时,会调用OnDeinit()函数。该函数通过释放指标句柄,在清理资源方面发挥着至关重要的作用。
void OnDeinit(const int reason) { // Release resources for indicators IndicatorRelease(rsiHandle); IndicatorRelease(bbHandle); IndicatorRelease(atrHandle); }
输入参数
波动率导航 EA的突出特点之一是其通过可自定义的输入参数所实现的灵活性。这些参数使交易者能够根据自身独特策略调整EA的行为。一些重要的输入参数包括:
- RSI周期:
input int rsiPeriod = 14; // Standard period for RSI calculation
- 布林带周期:
input int bbPeriod = 20; // Standard period for Bollinger Bands
- ATR周期:
input int atrPeriod = 14; // Period for ATR
该EA的主要逻辑
让我们先查看下图,该图展示了买入订单的信号是如何生成的,卖出订单的信号生成过程则与之相反。
图例5. 信号生成条件
- 信号计算流程
波动率导航EA的主要功能是分析市场状况以生成交易信号。作为该流程的一部分,EA会在OnTick函数中获取相关指标的当前值。以下代码片段展示了如何在EA中计算RSI、布林带和ATR。
// Declare indicator handles int rsiHandle; int bbHandle; int atrHandle; // OnInit function int OnInit() { // Create indicator handles rsiHandle = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); bbHandle = iBands(NULL, 0, bbPeriod, bbDevUp, bbDevDown, PRICE_CLOSE); atrHandle = iATR(NULL, 0, atrPeriod); return(INIT_SUCCEEDED); }
在此设置中,OnInit函数会初始化RSI、布林带和ATR的句柄,使EA能够访问这些指标的值以进行持续计算。
- 评估RSI条件
RSI指标通过指示超买和超卖状态,帮助识别潜在的入场和出场点。分析RSI值使EA能够做出战略性交易决策。以下代码段展示了如何检查RSI值。
double rsiValue = iCustom(NULL, 0, "RSI", rsiPeriod, 0); if (rsiValue > 70) { // Market is overbought - potentially signal to sell } else if (rsiValue < 30) { // Market is oversold - potentially signal to buy }
在此段代码中,EA会获取当前的RSI值,并将其与预设的70和30阈值进行比较,以确定潜在的交易信号。
- 分析布林带指标
double upperBand = iBands(NULL, 0, bbPeriod, bbDevUp, 0, PRICE_CLOSE); double lowerBand = iBands(NULL, 0, bbPeriod, -bbDevDown, 0, PRICE_CLOSE); double price = Close[0]; if (price < lowerBand) { // Price is touching the lower band - potential buy signal } else if (price > upperBand) { // Price is touching the upper band - potential sell signal }
这段代码展示了EA用来判断当前价格是否接近布林带上轨或下轨的逻辑,若接近则可能触发买入或卖出信号。
- 纳入ATR
ATR可洞察市场波动性,并通过止损和止盈设置辅助风险管理。以下代码用于获取ATR值:
double atrValue = iATR(NULL, 0, atrPeriod); if (atrValue > atrThreshold) { // High volatility - consider entering trades } else { // Low volatility - potentially stay out of the market }
在此示例中,EA会检查ATR值,以判断市场波动性是否足以支持入场交易。交易者通常更倾向于高ATR值,因为这表明预计会出现显著的价格波动。
- 生成交易信号
通过综合RSI、布林带和ATR的信息,EA能够生成更可靠的交易信号。以下代码段展示了EA如何制定这些信号:
if (rsiValue < 30 && price < lowerBand && atrValue > atrThreshold) { // Generate buy signal } else if (rsiValue > 70 && price > upperBand && atrValue > atrThreshold) { // Generate sell signal }在这套综合分析体系中,当RSI显示市场处于超卖状态、价格触及布林带下轨,且ATR表明波动性充足时,EA将触发买入信号。反之,若满足相反条件则会生成卖出信号。
- 图表上的可视化反馈
为提升用户体验,EA在生成信号时会提供可视化反馈。以下代码展示了如何通过图表的清晰标记从而实现这一功能:
void DrawTradeSignals() { if (buySignal) { // Draw buy signal on the chart ObjectCreate(0, "BuySignal" + IntegerToString(TimeCurrent()), OBJ_ARROW, 0, Time[0], price); } else if (sellSignal) { // Draw sell signal on the chart ObjectCreate(0, "SellSignal" + IntegerToString(TimeCurrent()), OBJ_ARROW, 0, Time[0], price); } }
综上所述,波动率导航EA的核心逻辑在于通过多指标系统化评估当前市场数据。通过综合RSI、布林带和ATR的信息,该EA能够生成稳健的交易信号,同时在图表上提供有价值的可视化反馈。这种多维度的分析方法有助于交易者更全面地评估市场状况,最终有效应对波动剧烈的市场环境。
在波动率导航EA中实现警报与通知功能
波动率导航EA配备了一套集成化的警报与通知系统,可显著提升交易者对市场动态的响应能力。该系统基于EA核心指标(RSI、布林带和ATR)生成的特定交易信号,为交易者提供实时分析与预警。
- EA中的警报类型
音频警报:当触发重要交易信号时,EA将自动播放音频提示。例如,当RSI上穿70(超买状态)或下破30(超卖状态)时,系统会立即发出声音警报。此类警报使交易者能够即时响应,基于明确的市场机会快速做出决策。
视觉警报:除音频提示外,EA还直接在交易图表上提供可视化警报。例如,当生成交易信号时,EA可通过改变价格线颜色或显示屏幕消息的方式,明确标注信号类型(买入或卖出)。此功能使交易者无需依赖音频提示,即可通过快速浏览图表评估当前市场状况。
- 警报功能与EA逻辑的集成
波动率导航EA的警报与通知功能与其核心交易逻辑无缝衔接:
在每次OnTick函数执行期间,EA持续监控各指标以识别潜在交易信号。当检测到特定阈值被触发(如RSI突破预设水平)时,系统将启动警报序列。一旦交易信号得到确认,EA将激活相应的警报机制。
该激活流程可能包括播放提示音或在图表上生成视觉标记。警报功能可即时反馈市场动态,帮助交易者快速做出明智决策。这种交互设计促进了交易过程的主动参与,显著提升了捕捉盈利市场机会的可能性。
// Example of defining thresholds double rsiValue = iRSI(NULL, 0, 14, PRICE_CLOSE); // Check for overbought and oversold conditions if (rsiValue > 70) { // Audio Alert PlaySound("alert.wav"); // Visual Alert on Chart ObjectCreate("OverboughtAlert", OBJ_TEXT, 0, Time[0], High[0]); ObjectSetText("OverboughtAlert", "Overbought Signal!", 12, "Arial", clrRed); // Additional actions like placing an order can be added here } else if (rsiValue < 30) { // Audio Alert PlaySound("alert.wav"); // Visual Alert on Chart ObjectCreate("OversoldAlert", OBJ_TEXT, 0, Time[0], Low[0]); ObjectSetText("OversoldAlert", "Oversold Signal!", 12, "Arial", clrGreen); // Additional actions like placing an order can be added here }
以下代码段旨在为波动率导航 EA实现基于RSI行为的音频与视觉警报功能。首先,代码通过iRSI函数计算当前RSI值,该函数以当前图表品种、时间周期、周期参数(14)和收盘价为输入。随后,代码检查RSI值是否超过70阈值,若超过则表明市场处于超买状态。若满足此条件,系统将调用PlaySound函数播放音频警报,以立即吸引交易者注意。

图例6. 视觉警报
此外,系统会在交易图表上创建视觉警报:在当前最高价位置放置一个文本对象,以红色字体标注超买信号,确保其醒目可见。反之,若RSI值跌破30阈值,表明市场处于超卖状态,系统将执行相同流程:播放音频警报,并在当前最低价位置生成一个文本对象,此次以绿色字体显示信号。
这种融合音频与视觉元素的双重警报系统,显著提升了交易者及时获取关键市场动态并快速响应的能力,从而全面优化交易效率。
波动率导航EA的音频与视觉警报系统旨在助力交易者对市场变化作出及时反应。通过实施这些警报功能,EA使交易者能够保持信息畅通并随时准备行动,最终提升整体交易效率与成功率。
以下是EA的完整代码。包含所有指导其交易操作的必要指令与逻辑。
//+------------------------------------------------------------------+ //| Volatility Navigator.mq5 | //| Copyright 2024, Christian Benjamin | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2024, MetaQuotes Software Corp." #property link "https://www.mql5.com/en/users/lynnchris" #property description "The EA analyzes market conditions using the Bollinger Bands, RSI and ATR indicators" #property version "1.1" #property strict // Input parameters for trading strategy input int rsiPeriod = 14; // Period for RSI calculation input double overboughtLevel = 70.0; // RSI level for overbought condition input double oversoldLevel = 30.0; // RSI level for oversold condition input int bbPeriod = 20; // Period for Bollinger Bands input double bbDeviation = 2.0; // Deviation for Bollinger Bands input int atrPeriod = 14; // ATR period for stop loss and take profit calculations input double atrMultiplier = 1.5; // Multiplier for ATR in calculating stop loss and take profit input string signalSound = "alert.wav"; // Sound file for alert notifications // Indicator handles for Bollinger Bands and ATR int bbHandle = 0; int atrHandle = 0; // Function to clear previous drawings from the chart void ClearPreviousDrawings() { // Delete any previously created trade lines and signal text if (ObjectFind(0, "EntryPoint") != -1) ObjectDelete(0, "EntryPoint"); if (ObjectFind(0, "StopLoss") != -1) ObjectDelete(0, "StopLoss"); if (ObjectFind(0, "TakeProfit") != -1) ObjectDelete(0, "TakeProfit"); if (ObjectFind(0, "SignalText") != -1) ObjectDelete(0, "SignalText"); if (ObjectFind(0, "BuyArrow") != -1) ObjectDelete(0, "BuyArrow"); if (ObjectFind(0, "SellArrow") != -1) ObjectDelete(0, "SellArrow"); } // Function to draw entry points, stop loss, and take profit on the chart void DrawTradeLines(double entryPoint, double stopLoss, double takeProfit, string signalText) { // Clear previous drawings before drawing new ones ClearPreviousDrawings(); // Draw the entry point line if (!ObjectCreate(0, "EntryPoint", OBJ_HLINE, 0, TimeCurrent(), entryPoint)) Print("Failed to create EntryPoint line. Error: ", GetLastError()); ObjectSetInteger(0, "EntryPoint", OBJPROP_COLOR, clrGreen); ObjectSetInteger(0, "EntryPoint", OBJPROP_WIDTH, 2); // Draw the stop loss line if (!ObjectCreate(0, "StopLoss", OBJ_HLINE, 0, TimeCurrent(), stopLoss)) Print("Failed to create StopLoss line. Error: ", GetLastError()); ObjectSetInteger(0, "StopLoss", OBJPROP_COLOR, clrRed); ObjectSetInteger(0, "StopLoss", OBJPROP_WIDTH, 2); // Draw the take profit line if (!ObjectCreate(0, "TakeProfit", OBJ_HLINE, 0, TimeCurrent(), takeProfit)) Print("Failed to create TakeProfit line. Error: ", GetLastError()); ObjectSetInteger(0, "TakeProfit", OBJPROP_COLOR, clrBlue); ObjectSetInteger(0, "TakeProfit", OBJPROP_WIDTH, 2); // Draw a label with the signal text to provide information at a glance if (!ObjectCreate(0, "SignalText", OBJ_LABEL, 0, TimeCurrent(), entryPoint + 10)) Print("Failed to create SignalText label. Error: ", GetLastError()); ObjectSetInteger(0, "SignalText", OBJPROP_XDISTANCE, 10); ObjectSetInteger(0, "SignalText", OBJPROP_YDISTANCE, 30); ObjectSetInteger(0, "SignalText", OBJPROP_COLOR, clrWhite); ObjectSetInteger(0, "SignalText", OBJPROP_FONTSIZE, 12); ObjectSetString(0, "SignalText", OBJPROP_TEXT, signalText); } // Function to draw arrows on the chart at entry points void DrawEntryArrow(double price, string label, color arrowColor) { if (!ObjectCreate(0, label, OBJ_ARROW, 0, TimeCurrent(), price)) { Print("Failed to create arrow object. Error: ", GetLastError()); return; } ObjectSetInteger(0, label, OBJPROP_ARROWCODE, 233); // Arrow code for upward direction ObjectSetInteger(0, label, OBJPROP_COLOR, arrowColor); ObjectSetInteger(0, label, OBJPROP_WIDTH, 2); // Set the width of the arrow } // Function to manage open positions for efficient trade execution void ManageOpenPositions(string symbol) { // Loop through all open positions for (int i = PositionsTotal() - 1; i >= 0; i--) { ulong ticket = PositionGetTicket(i); if (PositionSelectByTicket(ticket)) { // Check if the position is for the current symbol if (PositionGetString(POSITION_SYMBOL) == symbol) { double currentProfit = PositionGetDouble(POSITION_PROFIT); Print("Current Profit for position: ", currentProfit); // Additional management logic can be added here (e.g., close position, update SL/TP) } } } } // Function to calculate trade parameters such as entry point, stop loss, and take profit void CalculateTradeParameters() { // Get the current RSI value double rsiValue = iRSI(Symbol(), PERIOD_CURRENT, rsiPeriod, PRICE_CLOSE); Print("RSI Value: ", rsiValue); double bbUpper = 0.0; double bbLower = 0.0; double atrValue = 0.0; // Get the latest closing prices double closePrices[]; if (CopyClose(NULL, 0, 0, 1, closePrices) <= 0) { Print("Error copying close prices: ", GetLastError()); return; // Exit if there's an error } // Initialize and get values for Bollinger Bands if (bbHandle == 0) { bbHandle = iBands(NULL, 0, bbPeriod, 0, bbDeviation, PRICE_CLOSE); } if (bbHandle != INVALID_HANDLE) { double bbBuffer[]; // Get the upper and lower Bollinger Bands if (CopyBuffer(bbHandle, 1, 0, 1, bbBuffer) > 0) { bbUpper = bbBuffer[0]; // Upper band value Print("Bollinger Band Upper: ", bbUpper); } if (CopyBuffer(bbHandle, 2, 0, 1, bbBuffer) > 0) { bbLower = bbBuffer[0]; // Lower band value Print("Bollinger Band Lower: ", bbLower); } // Initialize and get the ATR value if (atrHandle == 0) { atrHandle = iATR(NULL, 0, atrPeriod); } if (atrHandle != INVALID_HANDLE) { double atrBuffer[]; if (CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0) { atrValue = atrBuffer[0]; // Current ATR value Print("ATR Value: ", atrValue); } } double entryPoint, stopLoss, takeProfit; // Generate buy or sell signals based on Bollinger Bands and RSI values if (closePrices[0] < bbLower && rsiValue < oversoldLevel) // Buy Condition { entryPoint = closePrices[0]; stopLoss = entryPoint - (atrValue * atrMultiplier); takeProfit = entryPoint + (atrValue * atrMultiplier * 2); DrawTradeLines(entryPoint, stopLoss, takeProfit, "Buy Signal"); DrawEntryArrow(entryPoint, "BuyArrow", clrGreen); // Draw Buy Arrow PlaySound(signalSound); // Notify with sound for new entry } else if (closePrices[0] > bbUpper && rsiValue > overboughtLevel) // Sell Condition { entryPoint = closePrices[0]; stopLoss = entryPoint + (atrValue * atrMultiplier); // Above entry for short position takeProfit = entryPoint - (atrValue * atrMultiplier * 2); // Below entry for short position DrawTradeLines(entryPoint, stopLoss, takeProfit, "Sell Signal"); DrawEntryArrow(entryPoint, "SellArrow", clrRed); // Draw Sell Arrow PlaySound(signalSound); // Notify with sound for new entry } } } // Expert initialization function int OnInit() { // Initialization tasks can be done here return INIT_SUCCEEDED; } // Expert deinitialization function void OnDeinit(const int reason) { // Release the indicator handles when the EA is removed if (bbHandle != 0) IndicatorRelease(bbHandle); if (atrHandle != 0) IndicatorRelease(atrHandle); ClearPreviousDrawings(); // Clear drawings on removal } // Expert tick function void OnTick() { ManageOpenPositions(Symbol()); // Manage open positions before calculating new parameters CalculateTradeParameters(); // Calculate trade parameters based on market data } //+------------------------------------------------------------------+
测试
在MetaTrader 5中添加波动率导航EA至图表进行测试。首先,确保您的EA文件已正确安装到MetaTrader 5平台。在左侧的“导航器”面板中,找到“EA”部分,并定位您的EA。若未显示,可通过右键单击并选择“刷新”来更新列表,或确认EA文件已放置在正确的目录中(具体为MetaTrader安装目录下的MQL5 > Experts文件夹)。
找到EA后,只需将其拖拽至目标图表,或双击以打开设置窗口。在此,您可根据策略配置参数,如手数大小和指标设置。配置完成后,务必通过点击工具栏中的“自动交易”按钮来启用自动化交易。最后,点击“确定”应用EA,它将根据预设策略开始执行交易。测试期间,请始终查看“交易”选项卡以监控其活动。在我开发的此项目中,我已在模拟账户上对EA进行了测试。不过,您也可以在使用真实资金前,利用历史数据进行回测。
将EA拖拽至图表后,需耐心等待指标满足特定条件以生成信号,如前所述。当这些条件满足时,EA将在图表上显示三条线:止损线、止盈线和入场点。同时,将发出声音警报以提醒交易者,该警报将持续至最精确的入场点到达。
以下是我们测试结果的展示,以供您参考

图例7. 测试结果
在上图中,我们可以看到我根据收到的信号执行的所有订单,目前这些订单均处于盈利状态。图中还以水平线的形式标示了信号所指示的各个价位:蓝色线代表止盈位,绿色线代表入场点,红色线代表止损位。此外,我们还可以通过下方GIF图获取更全面的信息。

图例8. 测试结果
结论
该工具主要致力于提供具有盈利潜力的入场点、止盈位以及止损位设置。它可应用于不同图表,并支持所有的时间周期。对于超短线(剥头皮)交易入场,建议使用较短时间周期;而较长线交易则可从更长时间周期中受益。此外,将此工具与您自身的交易策略结合使用,有助于提升交易效果。
在使用真实资金前,请务必对该工具进行测试和试验。请注意,本工具不会自动开仓;我在本系列中的唯一目标是开发市场分析工具。
| 日期 | 工具名 | 描述 | 版本 | 更新 | 备注 |
|---|---|---|---|---|---|
| 01/10/24 | 图表展示器 | 以重影效果覆盖前一日价格走势的脚本 | 1.0 | 初始版本 | Lynnchris工具箱的第一个工具 |
| 18/11/24 | 分析评论 | 以表格形式提供前一日的信息,并预测市场的未来方向 | 1.0 | 初始版本 | Lynnchris工具箱的第二个工具 |
| 27/11/24 | 分析大师 | 每两小时定期更新市场指标 | 1.01 | 第二个版本 | Lynnchris工具箱的第三个工具 |
| 02/12/2024 | 分析预测 | 集成Telegram通知功能,每两小时定时更新市场指标 | 1.1 | 第三个版本 | 工具数5 |
| 09/12/24 | 波动率导航仪 | 该EA通过布林带、RSI和ATR三大指标综合分析市场状况 | 1.0 | 初始版本 | 工具数6 |
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/16560
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
您应当知道的 MQL5 向导技术(第 49 部分):搭配近端政策优化的强化学习
开发多币种 EA 交易(第 19 部分):创建用 Python 实现的阶段
数据科学和机器学习(第 32 部分):保持您的 AI 模型更新,在线学习
只需进入作者简介,然后点击 "出版物"...克里斯蒂安-本杰明(出版物)
本杰明先生或任何读到这篇文章的人能否告诉我在哪里可以找到这篇文章的第 1-3 部分?
先生您好,请点击下面提供的链接。
https://www.mql5.com/zh/articles/16434
https://www.mql5.com/zh/articles/15927
https://www.mql5.com/zh/articles/16014
只需进入作者简介,然后点击 "出版物"...克里斯蒂安-本杰明(出版物)
谢谢您,先生!
请问这个 EA 在交易什么?我没看到。
(C.Benjamin) 作者在标题 "测试 "中说
"将 EA 拖到图表上后,必须耐心等待指标满足特定条件后产生信号,如上所述。满足这些条件后,EA 将在图表上显示三条线:止损线、获利线和进入点。此外,还会发出声音警报,向交易者发出信号,该警报将一直持续到达到最精确的入市点为止"。
EA 代码仅以图形方式显示建议交易,同时发出警报