请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化策略 帖子:3364712 新帖:0

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

不做外汇索罗斯发表于:4 月 17 日 18:19回复(1)

本文旨在创建最简单的交易策略,实施“要么赢得全部,要么输个精光”的游戏原则。这个 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 语言知识。但是,凭借开发人员的努力,实施仍然是可能的。

全部回复

0/140

量化课程

    移动端课程