系统交易 게시글

自我优化RSI和MFI交易机器人 - MetaTrader 4专家

첨부파일
19392.zip (4.86 KB, 다운로드 0회)

拥有一个能够自我优化的交易机器人一直是我的梦想,这样我就能确保它始终使用最佳参数进行交易。这是我的一次谦逊尝试,希望能把这个梦想变成现实。附带的交易专家顾问(EA)可以优化用于交易的超买和超卖水平。我希望其他人能够在这个基础上进行扩展,创造出更优秀的产品,如果你有这样的想法,请告诉我。同时,不要忘了给我的机器人打个分哦!这个策略适用于任何货币对,任何时间框架,只需确保设置正确即可。

这个机器人有不少参数可供调整。我也添加了一些额外的功能,供大家玩耍,尽情享受吧!

参数设置

  • magic = 4376 - 这个EA的唯一标识号码。
  • optomizingPeriods = 144 - 优化周期(条数)。这是您希望优化运行的条数。例如,如果您使用的是小时图,并选择144,那么机器人将回溯144小时,相当于六天。
  • inAggressive = false - 使专家顾问更具攻击性?风险较高。激进模式将使专家顾问以更激进的方式进行交易。在激进模式下,机器人不会等到超买或超卖水平交叉,只要近期买入比卖出更有利,就会发出买入信号,反之亦然。
  • inTradeReverse = false - 反向交易。反向交易将切换交易方向。
  • inOneOrderAtATime = true - 是否一次只开一个订单?如果为真,机器人将一次只开一个订单;如果为假,将根据入场条件无限制地开单。
  • Lot_sizing_dynamic_invalidates_static - 用于分隔订单手数机制与其他参数的占位符。
  • Lots = 0.01 - 静态订单手数。指定订单的手数,使用静态数字。
  • inUseDynamicLotSize = true - 使用动态手数。启用动态手数,这将取代静态手数。然而,如果动态手数被证明无效,机器人将默认为静态手数。
  • inPercentageOfRisk = 2 - 每笔交易的风险百分比(2 = 2%)。使用动态手数时,您可以将手数指定为余额的百分比。2表示2%。无需输入0.02,如果您这么输入,使用的百分比将非常小。最大可用百分比为10%。
  • Index_Indicator_Values - 用于分隔指标参数的占位符。
  • indicator index = _RSI_ - 选择使用的指标。允许您选择要使用的指标,当前选项为相对强弱指数(RSI)或资金流动指数(MFI)。
  • IndicatorTopValue = 100 - 您希望交易的最高值。这是您希望使用指标下单的最高值。保留在100以考虑所有指标值。
  • IndicatorBottomValue = 0 - 您希望交易的最低值。这是您希望使用指标下单的最低值。保留在0以考虑所有指标值。
  • IndyTimeframe = PERIOD_CURRENT - 指标的时间框架。选择您希望在优化和交易时使用的指标时间框架。PERIOD_CURRENT表示将使用您附加EA的图表的时间框架。如果您希望使用与附加机器人不同的时间框架进行计算,您可以在此更改该设置。
  • inIndyPeriods = 14 - 指标及ATR计算的平均周期。平均真实波幅(ATR)用于设定动态止损或止盈,具体选项见下文。
  • IndyAppPrice = PRICE_CLOSE - 指标的应用价格(如有需要)。
  • SL_TP_Dynamic_invalidates_static_values - 用于分隔止损和止盈参数的占位符。
  • iStoploss = 1000 - 静态止损值(点数)。止损值以点数表示,这是您终端中最小的移动单位。
  • iTakeprofit = 2000 - 静态止盈值(点数)。止盈值以点数表示,这是您终端中最小的移动单位。
  • input inDynamic = true - 基于ATR倍数使用动态止损和止盈?如果启用动态止损和止盈,将使用动态设置而非静态设置。动态设置具有根据市场行为调整的能力,因为在市场波动较大时,ATR会增大,从而在市场快速移动时导致更大的止损和止盈设置。
  • inStoplossMultiple = 2 - 动态止损 = X * ATR(平均周期)。止损将是您在这里输入的值乘以使用在inIndyPeriods输入设置中指定的平均真实波幅(ATR)。
  • inTakeProfitMultiple = 7 - 动态止盈 = X * ATR(平均周期)。止盈将是您在这里输入的值乘以使用在inIndyPeriods输入设置中指定的平均真实波幅(ATR)。
  • Break_Even_Settings - 填充必须低于触发器。用于止盈设置的分隔符。当盈利点数超过触发器时,止损将移动到保本点。如果您有填充设置,则止损将移动到保本点+填充,以锁定填充的利润。
  • bUseBreakEven = true - 使用保本。开启或关闭保本功能。
  • inTrigger = 200 - 如果保本 = [true],设置盈利点数触发器。如果交易达到这些点数的盈利,止损将移动到保本点。
  • inPadding = 100 - 移动到保本时锁定的点数,必须低于触发器。这是您希望在移动到保本时锁定的利润点数,此值必须小于触发器。

这款机器人是如何自我优化的呢?秘密在于,机器人对指标中的每个变量进行两次测试,因此如果某个指标有一百个可能值,它将对每个值进行测试,尝试在该值下进行交易,回溯一定数量的条数(optomizingPeriods)。然后根据在该值下的盈利或亏损情况对其进行评分。虽然这比想象中复杂一些,但您阅读这段文字就是想了解更多细节,所以我在这里详细说明。

设定的规则是,当指标从顶部穿越超买值时,会发出卖出信号;当指标从下方穿越超卖值时,会发出买入信号。例如,如果超买设置为80,而您指标的前一条值为85,最后一条值为79,那么就会发出卖出信号。85 → 79向下穿越80,发出卖出信号。如果超卖为23,那么19 → 27向上则会生成一个买入信号。

因此,这个机器人会对指标的每个值从IndicatorTopValueIndicatorBottomValue进行测试,并进行两次测试。它对每个值进行买入和卖出测试。例如,如果最高值为100,它将取最高值并在optomizingPeriods上进行回测,假设为144个周期。它将查看在过去144个周期内,以100的价格买入和卖出是否获利。如果盈利,它将保留该金额。

考虑到您回测的周期数量,它可能在回测期间多次买入。如果在达到止盈之前先触及止损,则将会产生负收益;如果在先达到止损之前触及止盈,则将会产生正收益。在测试完所有optomizingPeriods中的周期后,它将所有盈利结果与所有亏损结果相加,以保留一个货币值。然后指标将继续测试下一个较低的指标值以检测盈利能力。

当测试完所有值后,它选择最高的盈利金额作为最佳买入值。接下来,对卖出值进行类似的检查。当这一切完成后,它将比较最佳买入值与最佳卖出值,并寻找最佳交易。例如,在进行完优化后,确定最佳买入值为65,因为在65的买入中产生了329美元的最大盈利;与此同时,最佳卖出值是32,利润为530美元,那么机器人将寻找在32水平上穿越的卖出交易,因为根据回测生成的利润来看,卖出是更优于买入的选择。


未来扩展想法

  • 同时交易多个货币对,可能根据点差大小进行过滤。
  • 自我学习,根据自身交易经验来优化操作。
  • 回测也可以包含前向测试的组件。
  • 增加可选择的指标数量。

请留下您的建议和评论,别忘了给我打分哦!

现在可以在MetaTrader市场中找到:https://www.mql5.com/en/market/product/26332


更新了第137-142行缺少的括号,以解决评论中识别的错误。

연관 포스트

댓글 (0)