English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
要么赢走全部,要么输个精光的 ForEx 策略

要么赢走全部,要么输个精光的 ForEx 策略

MetaTrader 5交易系统 | 18 三月 2014, 08:13
9 551 4
Гребенев Вячеслав
Гребенев Вячеслав

本文旨在创建最简单的交易策略,实施“要么赢得全部,要么输个精光”的游戏原则。这个 EA 交易是实施 ForEx 市场彩票的一个例子。彩票 EA 交易的主要目标是通过最大可能概率让初始存款增加几倍。盈利能力,即增加平均存款的能力,在彩票 EA 交易中并不是必不可少的。与卖出成千上万张彩票的传统彩票相比,彩票 EA 交易使用 ForEx 彩票,在中奖时使用 ForEx 作为资金来源。

 

简介

ForEx 交易的目标可以分为三组:赚钱保本倍增。让我们一组组分析。

  1. 赚钱。这是 ForEx 市场中的一个标准目标。可以这么说:“我有一点资本,想在市场中通过交易来增加资本。给我一个 EA 交易,使我肯定能在一天内让 100 美元变成 101 美元。”在此类目标中,要求保证资本平均增量。大量的竞争者都在解决“赚钱”的问题。他们拥有丰富的信息和技术方法。因此,尽管不是毫无希望,这项任务也非常艰巨。研究表明汇率并不仅仅是随机变化的。寻找您自己的交易策略如同淘金热中的淘金。

  2. 保本。可以这么说:“我有 1000 美元,想在明年度假的时候用。如果我将它们存入银行,则由于通货膨胀,我将损失 10%。给我一个能够让我保本的 EA 交易。我不想赚钱,也不想亏钱。”事实上,这个问题是将一种货币兑换为另一种货币,然后在适当的时候又兑换回来。在“保本”类型的目标中,要求保证资本平均保值率。我们绝大多数的市民解决资本“保值”问题。街上的大量货币兑换中心和多币种银行存款反映了这一点。“保本”任务在数学上并不复杂。即使您意外地选择市场进入点和离开点,也能够非常成功地跑赢平均通货膨胀率。

  3. 倍增。用以下语句来描述此类目标:“彩票。我有 100 美元。要买一辆汽车,我还需要一百万美元。给我一个 EA 交易,能让 100 美元变成 1,000,000 美元。我理解通常来说,我会损失这笔钱。赢得一百万美元的概率小于 100/1,000,000。但是它适合我。”

    没那么激进的表述如下:“我有 1,000 美元。为了开一个派对,我需要 10,000 美元。给我一个 EA 交易,能让 1000 美元变成 10000 美元。我理解略超 0.9 的概率我会损失 1000 美元,但是我有稍微小于 0.1 的概率开派对。”

    需要的另一项任务:“我的电子钱包中有几分钱。这些钱既不能买任何东西,也不能提现。给我一个 EA 交易,即使概率较小,也能将它们变为有意义的金额。”

    在此类目标中,实现了保证平均资本损失率。但是这些都是大家可接受的。当然,中奖的概率应尽可能的大。在 ForEx 市场中,有意识地迎接这一挑战的情况非常少。然而,按不同办公室中的彩票数进行判断,社会上需要这个问题。在数学上,一直都在解决“倍增”目标。在本文中,我们将考虑用 MQL5 实施此类 EA 交易。

我们的分类不包括诸如“靠运气取胜的游戏 - 我需要刺激”、“非常聪明的玩具 - 我想在闲暇时玩”以及很多其他有趣的任务。

因此,问题的定义如下:我们需要在 ForEx 市场上发行彩票。这样会在一定的概率上将资本增加几倍,或者破产。不需要资本的平均增长。中奖概率应尽可能的大。需要 ForEx 作为中奖时的资金来源。在这里,ForEx 也作为人人都能免费访问的随机号码生成器。

 

1. 算法

提议的是以下用于解决问题的琐碎算法。

  1. 以随机方向进入市场。
  2. 等待指定时间 T。
  3. 退出市场。
  4. 检查您的帐户。如果我们中奖或者破产,则完成交易,否则返回到步骤 1。

此算法假定汇率是纯粹的随机游走状态(请参阅《随机游走和趋势指标》一文)。显然这个市场模型是错误的,但是足以创建一种彩票。当然,市场模型越充分,算法就越有效。

在用 MQL5 编程语言编写 EA 交易之前,我们必须详细介绍算法。我们需要解决以下问题:

  1. 杠杆率
  2. 下注大小
  3. 获利和止损位
  4. 等待时间 T
  5. 选择一个货币对

 

2. 下注和杠杆率

因为我们用 50/50 的概率进行猜测,并且需要为点差买单,因此交易次数应尽可能少。每次交易我们将损失一个点差。因此,杠杆率和下注大小应最大化,从而以最少的交易次数获得结果(中奖或破产)。

一般而言,一个货币对上的最大交易量受经纪公司的限制。这将限制彩票的中奖额和最短时间。

计算彩票时间要拉伸多久。让我们假定最大交易量为 5 手。这意味着我们用 500,000 美元进行交易。当交易“足够”幸运,我们可以赚得 500,000 美元 x 0.02 = 10,000 美元。

系数 0.02 是“一天中的盈利额与资本之比”。对于 ForEx 市场来说,此系数是一个经验常量。它不依赖于我们进行交易的时间框架(不包括点差和掉期)与货币对。可以依据柱的相对平均大小来和所谓的醉酒水手理论来衡量(请参阅下面的“选择货币对”一节和“最大产量指标”图)。此系数的数值是近似值(可能相差 2-3 倍)。

如果我们交易 100 天,每天 10,000 美元的盈利不应乘以 100,而应乘以 100 的平方根,即 10,因此我们正在按随机游走方式进行交易。在 100 天“非常幸运”的交易中,我们将赢得 100,000 美元。在 400 天“非常幸运”的交易中,我们将赢得 200,000 美元。如果杠杆率为 1:100,这意味着初始存款不低于 5,000 美元(500,000/100 美元)。

总而言之,在 100 天内,我们将初始存款增加了 20 倍,在 400 天内增加了 40 倍。很不幸,按此最大交易量和初始存款,我们不能以更快的速度增加我们的存款。

如果初始存款较小,并且不够用于最大下注量,则增长速度能够快得多,甚至达到指数级增长。但是我们仍然必须找到接受小额存款的经纪公司并查看其交易条件。

为了突破最大交易量的限制,您可以尝试在几个货币对上交易。如果货币对是独立的,我们可以获得平均值,并且增长速度将小于在一个货币对上进行交易的速度。如果货币对是相关的,例如 EURUSD 和 EURCHF,则有可能突破此限制。然而,并不是始终都能观察到汇率的相关性。

因此,我们仍然能够创造一种彩票,将足够多的初始资本增加 10 倍。我们不能解决有关电子钱包的任务和用 100 美元购买汽车的任务。至少,MetaTrader 5 策略测试程序不允许我们那样做。

 

3. 选择获利和止损

依据随机游走进行的获利和止损仅增大交易的频率。获利和止损越接近建仓价,则触发的频率越高,交易频率也越高。获利和止损不直接影响使用随机游走的盈利概率。因为我们希望尽可能少地交易,我们不挂这些订单。

实际上,止损仍然存在 - 这就是止损离场。通常它在 50% 触发,交易被强行完成。因为在止损离场之后仍然有一些存款,这意味着我们并没有使用全部机会,并且能够继续交易。因此,EA 交易必须注意止损离场情形。存款必须完全耗尽到最低下注额,理想情况下完全为零。

设置获利水平是合理的。其思想是——实际汇率并不是随机游走。有时它有异常巨大的波动,例如在新闻报道之后。异常波动更可能具备尖峰形,而不是阶梯形。您可以继续操作。

图 1. EURUSD (M1) 上的尖峰

图 1. EURUSD (M1) 上的尖峰

我们的算法可以直接忽略这此类波动。如果在我们的最后一笔交易的方向上没有出现尖峰,并且我们忽略了它,这很好。尽管止损离场可能触发。但是如果在我们的方向上出现尖峰,则不愿意失去它。为了发现它,我们设置了获利位。

可以用多种方法设置获利位:直接方式、第二种方式和第三种方式

直接方式 - 密切注意当前价格并将其与历史价格进行比较。这是非常困难的方式,即使在算法层面也是如此。事实上,必须识别并去除价格变化分布的平坦尾部。

第二种方式 - 密切注意您的当前盈利并将其与以前交易的盈利进行比较。一旦盈利比以前交易的平均盈利多很多,则立即兑现您的盈利。这种方式更加简单,但是在 EA 交易启动时,根本没有交易的历史记录。此外,我们希望尽可能少地交易,这意味着历史记录也比较少。

第二种方式(另一种情形) - 密切注意您的当前盈利并将其与预期的计算盈利进行比较。一旦盈利比预期的计算盈利多,则立即兑现您的盈利。可以依据价格历史记录计算预期盈利,但是这与直接方式一样困难。

第三种方式 - 密切注意余额/市值比并将其与常量进行比较。在 EA 交易优化期间提前确定了常量。当然,这些常量取决于交易条件 - 杠杆率、最大交易量等。并且会针对某些具体交易条件对 EA 交易进行优化,而所有经纪公司的这些条件都是差不多的。让我们选择典型的条件。最重要的是,这种方式已经尽可能的简单:

  • 如果市值大于余额 2(或 3)倍,则立即兑现您的盈利。
  • 如果市值比余额多 10,000(或 30,000)美元,则立即兑现您的盈利。

具体的数字 2、3、10000、30000 ... 将在优化之后确定。

 

4. 等待时间 T

如果我们频繁地进入和退出市场(例如每分钟一次),则汇率的改变很小并且我们获得的盈利也非常少,但是我们仍然必须支付固定点差。即使我们猜测得非常准确,总点差也会吞食掉所有盈利。

换言之,如果您很少进行交易(例如,一年一次或一月一次),则相对于每笔交易的盈利,点差可以忽略不计。但是您将不得不交易很长时间。同样的,因为掉期,长时间持有仓位也是无利可图的。

因此,存在某些最佳交易频率。它取决于汇率的波动性和交易条件,例如浮动点差。因此,不可能提前精确地计算最佳交易频率。

然而可以估计。在未经过数学解释和调查的情况下,我将提供下图:

图 2. 在不同的时间 T 下一天交易的市值概率分布函数的边界和中心

图 2. 在不同的时间 T 下一天交易的市值概率分布函数的边界和中心

在图 2 中,横轴表示时间 T - 我们的琐碎算法的一次交易时间。纵轴表示在没有杠杆率和盈利资本化的情况下,在 EURUSD 货币对上每 T 分钟交易一次时一天内我们会从一美元实现多少美元的盈利。在数学上来讲,这些是我们的琐碎策略对于不同时间 T 的概率分布的边界。蓝色曲线表示绝对猜测,红色曲线表示绝对不是猜测,橙色和凫蓝表示“相当成功/相当不成功的猜测”。

例如,每分钟 (M1) 进入和退出市场一次,使用每天 1 美元的资本,我们最多能够赢得 0.5 美元,损失 1.3 美元。我们很有可能损失 0.3 美元。在这一天中,我们进行 1440 次交易,每次交易支付 0.0002 美元的点差。一天内所有交易的总点差为 0.288 美元。EURUSD M1 柱的平均大小为 0.00056 美元。绝对猜测下的盈利为 0.00056 x 1440 = 0.8064 美元。从盈利中减去点差:0.8064 - 0.288 = 0.51 美元(每天一美元产生的盈利)。将点 (М1, 0.51) 放在图上。

我们对“非常幸运”的猜测感兴趣 - 橙色曲线。让我们以更大的比例尺来绘制:

图 3. 在不同时间 T 具有足够成功猜测的琐碎交易策略的盈利

图 3. 在不同时间 T 具有足够成功猜测的琐碎交易策略的盈利

请看一看图 3,我们可以看到,如果交易频率快过每 30 分钟一次,则不能盈利 - 点差吞食了所有盈利。对我们而言,交易的最佳时间 T 在 1 小时至 1 周的范围内。现在,我们该停止讨论这个问题了。以后,当我们的 EA 快要完成时,我们将通过优化指定最佳时间。如果某人的交易方法使用的汇率预测概率优于 50/50,则可以改善琐碎算法。最佳时间和最佳下注也会减小。

通过选择时间 T,我们实际上选择了我们将要处理的图表的时间框架。严格地讲,当指定了时间 T 时,您可以选择任何时间框架 - EA 将以相同的方式运行,但是在错误的时间框架绘图会让人感到不舒服。

 

5. 选择货币对

因为我们将所有货币对的汇率视为随机游走,我们需要从所有汇率中选择一个具有最大平均相对柱大小的汇率。然后,通过较小的交易次数,我们将获得该结果(中奖或破产)。

为此,我们需要遍历所有可用货币对的汇率,并且对于每个汇率,计算柱的平均相对大小。为了不手动进行此计算,我们将编写最大收益指标 - YieldClose.mq5。

图 4. 最大收益指标

图 4. 最大收益指标 - YieldClose.mq5(EURUSD,D1,取 10 根柱的平均值。指标在 2 至 3 倍的范围内振荡)

在撰写本文之后,我意外发现波动指标(Perry Kaufman 在其《Smarter Trading:Improving Performance in Changing Markets》(更明智的交易:在不断变化的市场中改善业绩)一书中提出的 Kaufman 波动),包含在 MetaTrader 5 客户端的标准版中,几乎与最大收益指标是一样的。如果领悟力不够,则您必须重新做一遍:是的,从标准版难以理解数百个指标和 EA 交易!很不幸,此时没有一般性的教科书。

原来,对于一个货币对而言,柱的平均相对大小在 2 至 3 倍的范围内振荡。在这些 2 至 3 倍的范围内,对所有货币而言,柱的平均相对大小都是一样的。事实上,最大收益指标显示了交易活跃度。

在进入市场时,我们需要从所有货币对中选择一个具有最高交易活跃度的货币对,即指标显示的具有最大值的货币对。此外,最好在白天交易,此时活跃度较高,而在夜晚则等待。纯粹的白天交易将增大您中奖的机会,但是将会令 EA 交易的运行时间延长几乎两倍。哪一个更好 - 更大的中奖机会或更短的时间 - 这由用户决定。

如以上所讨论,您几乎可以每分钟都交易,但是这样做会让中奖的机会变得非常小。另一方面,我们也不能为了使中奖概率最大化而几年才交易一次。“交易数次/中奖概率”比必须在定义问题时就要详细说明,但是谁知道会这么难呢?

这是为编写一个 EA 交易而撰写要求规范有多难的典型例子。到目前为止,为了不让我们的 EA 复杂化,让我们专注于在著名的 EURUSD 货币对上进行连续的单一货币交易。

同时注意指标的两个有趣的特性。

  1. 在 H1 时间框架上,指标显示交易活跃度(波动)的每日振荡(参见图 5)。
  2. 指标最大值对应于趋势或横盘的结束/开始(参见图 6)。

图 5. 活跃度的每日振荡

图 5. 最大收益指标显示交易活跃度的每日振荡(EURCHF,H1,取 10 根柱的平均值)

最大收益指标的最大值对应于趋势/横盘的开始/结束

图 6. 最大收益指标的最大值对应于趋势/横盘的开始/结束(USDCAD,M5,取 10 根柱的平均值)

一个供将来运用的想法:如果指标(市场活跃度)开始增大到其平均值以上,则平掉盈利的仓位并放手不盈利的仓位 - 市场正在变化。如果指标落到其平均值以下,则放手盈利的仓位并平掉不盈利的仓位 - 在短期内市场不会变化。但是这种想法需要单独研究。

用 MQL5 语言实施成熟的算法需要技术。您可以在本文的附件 (lottery.mq5) 中找到含有注释的 EA 代码。

 

6. EA 交易优化

EA 必须在策略测试程序中针对可用的具体交易条件进行优化:初始存款 - 5,000 美元,杠杆率 - 1:100,时间 - 1 年,奖金 - 100,000 美元,最大注数 - 5 注,货币对 - EURUSD,止损离场位 - 50%。

在 MetaTrader 5 客户端中提议的 EA 交易的优化并不适合我们。事实上,在优化期间,我们需要让中奖概率最大化。为此,我们必须在 1000 个不同的历史记录上运行 EA 并计算盈利/亏损比。在一个历史记录上运行 EA 没有意义:它将让我们要么赢,要么输,余额的状态也是事先知道的 - 要么 0 美元,要么 100,000 美元。

在 1000 个历史记录上手动运行 EA 是非常令人厌烦的,因此我们将以另外的方式进行。为了确定进入市场的方向,我们的 EA 使用创建随机买入/卖出序列的随机号码生成器。让我们在一个历史记录上使用 1000 个不同的买入/卖出序列运行 EA。当然,这与 1000 个不同的历史记录不一样,但非常类似。

为了优化某些参数,例如时间 T,对于 T 的每个值,我们运行 1000 个不同的买入/卖出序列并确定中奖概率。为此,选择优化的慢速完整算法,使用以下两个参数:时间 T 和幸运彩票的数量,即随机序列的数量。

将优化结果导出到 Excel 并绘图:

图 7. 取决于时间 T 的中奖概率。横轴 - 琐碎策略等待时间,即一次交易的时间。纵轴 - 在该时间 T 下的中奖概率。

图 7. 取决于时间 T 的中奖概率。横轴 - 琐碎策略等待时间,即一次交易的时间。纵轴 - 在该时间 T 下的中奖概率。

看一看图 7,我们决定最佳时间 T。最大中奖概率对应于近似时间 T = 350 000 秒。该图与前文图 3 中的理论估计类似 - T 值较小时,中奖概率几乎为零。图的形态取决于历史周期和长度。图形始终位于大约 500 000 秒的大时间值下方。

为了确定获利的最佳值,我们观察余额和市值图,尝试在市值出现巨大增长时才触发获利。按最大余额优化获利常量并不合理:巨大增长很少发生,可能在 EA 运行期间仅发生一次,甚至更加罕见。如果我们按最大余额进行优化,则它仅仅调整为指定的历史记录。

 

7. 检查 EA 交易

要确定 EA 市值,我们需要用 10 000 个不同的买入/卖出序列运行 EA。在 Excel 中打开含有优化结果的表,然后计算和绘制盈利/亏损比。

从测量结果看,我们的 EA 交易中奖(收益超过 100000 美元)的概率为 0.045,理论极限为 0.05。EA 交易不中奖(收益低于 150 美元)的概率为 0.88。余下的概率 0.075 对应于 150 美元到 100,000 美元之间的余额。EA 交易有 0.1 的概率获得比初始存款 5000 美元多的市值。

图 8. 取决于交易次数的中奖概率

图 8. 彩票时间。横轴 - 交易次数。纵轴 - 指定交易次数的中奖概率。

图 8 显示的是取决于交易次数的赢钱和输钱概率曲线。蓝色曲线 - 一般情形中的交易次数,红色曲线 - 盈利时的中奖次数。一般而言,在输掉 20 次交易后彩票结束( 2 个月,1 次交易 = 350 000 秒)。彩票可能持续六个月或更长时间(60-70 次交易)。中奖极有可能发生在 3-5 个月的彩票时间内(30-50 交易,红色曲线)。

 

总结

我们创建了专为具体交易条件而优化的彩票 EA 交易。在所有可能的方式中,以最简单的方式来编写 EA。彩票 EA 交易的优点和缺点是显而易见的。

优点:

  • 您可以只玩彩票。无需销售数百万注彩票。
  • 您可以选择彩票价款(初始存款)和奖金的比例。
  • 中奖概率是事先知道的,并且接近理论极限。
  • 可以查看中奖结果,免费使用 ForEx 历史记录检查其完整性。

缺点:

  • 彩票的时间很长 - 几个月。时间受交易条件限制。
  • 可能的“彩票价款”/“奖金”比很小 - 约为 1:10。
  • 需要较大的初始存款。

尽管开发人员付出最大努力,但即使是琐碎算法,其实施也需要不琐碎的聪明才智、丰富的数学和 MQL5 语言知识。但是,凭借开发人员的努力,实施仍然是可能的。

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

附加的文件 |
lottery.mq5 (8.99 KB)
yieldclose.mq5 (3.01 KB)
最近评论 | 前往讨论 (4)
fuguilin
fuguilin | 16 5月 2014 在 10:48

测试了一天。从昨天下午到现在做欧美货币对,老实说结果很吃惊。本金1万的账户,到现在已经变成了4.7万。注意到交易的时候只要方向对了并且在不断盈利,策略就会不断加仓,直到满仓为止。而当行情没有波动的时候,仓位就很小。亏损的时候有减仓。

 我自己不会加仓,所以盈利的时候总是不知道怎么最大化自己的收益,亏损的时候也是抗着不知道减仓。这个策略给了我一个很好的启示。

 唯一的问题,策略是MT5的,请问有什么办法把策略用在MT4上?好像没什么技术含量的问题。我接触MT4才没几天,而且开户的平台没有MT5。所以有知道的请帮帮忙。 

 最后谢谢楼主提供的好策略。PS 同事用另一个模拟账户测试,一晚上本金赔了90%。 

hongbin cao
hongbin cao | 30 7月 2014 在 06:34
这个问题交给我 吧 我可以写成MT4  我正在研究中
Shengjie Lv
Shengjie Lv | 18 2月 2017 在 11:09
回测怎么不开单呢?
qianxun002
qianxun002 | 11 4月 2019 在 17:46
这样适合不少人
使用 EA Tree 在几分钟内创建 MQL5 EA 交易:第一部分 使用 EA Tree 在几分钟内创建 MQL5 EA 交易:第一部分
EA Tree 是第一款拖放 MetaTrader MQL5 EA 交易生成器。您可以使用非常易用的图形用户界面创建复杂的 MQL5。在 EA Tree 中,通过将盒子连接在一起创建 EA 交易。盒子可以包含 MQL5 函数、技术指标、自定义指标或值。使用盒子树,EA Tree 生成 EA 交易的 MQL5 代码。
升级至MetaTrader 4 Build 600及更高版本 升级至MetaTrader 4 Build 600及更高版本
新版MetaTrader 4客户端的新版本拥有用户数据存储的更新结构。在早期版本中所有程序,模板,配置文件等都被直接存储在程序端的安装文件夹。现在,特定用户所需的所有必要的数据都存储在一个单独的称为数据文件夹的目录中。阅读文章来寻找常见问题的答案。
多元回归分析。策略生成程序和策略分析程序二合一 多元回归分析。策略生成程序和策略分析程序二合一
本文介绍针对交易系统开发的多元回归分析的运用方法。它说明策略搜索自动化的回归分析的运用。生成了一个回归等式,并作为一个例子集成在一个不需要精通编程的 EA 中。
在Linux上运行MetaTrader 5 在Linux上运行MetaTrader 5
在本文中,我们演示了一种在流行的Linux版本(Ubuntu和Debian)上安装MetaTrader 5的简单方法。这些系统广泛用于服务器硬件以及交易者的个人计算机上。