自适应算法(第三部分): 放弃优化

19 三月 2021, 10:11
Maxim Romanov
0
1 060

介绍

在阅读本文之前,我建议您学习“开发自适应算法(第二部分):提高效率”系列的第二篇文章本文采用的方法与前面讨论的方法有很大不同,但阅读前面的文章对了解主题将非常有用。

分析缺点

与上一篇文章一样,我将从分析上一个成功版本的缺点开始。在分析过程中发现了以下缺陷:

  • 根据烛形分析生成仓位打开/关平信号,烛形的大小不稳定,它们有的大,有的小。基于下跌或上涨烛形的过度开仓并不少见。之后,下跌烛形和上涨烛形的数量变得相等,而未平仓的利润仍然是负数。那么,我们应该平仓还是等待获利?在前一种情况下,整个交易要点变得失去意义,算法开始接收损失。在后一种情况下,我们迟早会面临大幅回撤。
  • 不管烛形的种类如何,价格都会变动。市场可能由下跌蜡烛主导,而价格上涨是因为上涨蜡烛比下跌蜡烛大。如果你有未平的仓位,这是特别不愉快的。
  • 预测烛形未来大小的任务仍然没有解决。
  • 有时,在开仓后,一种烛形的超额量在很长一段时间内不会减少,因此价格可能会继续逆着仓位方向波动,这会引起大幅回撤。最重要的是,目前还不清楚价格何时会反转,是否会完全反转。
  • 仓位是按照时间开启的,有时,价格会在很长一段时间内保持不变,而随着新烛形的到来,仓位会继续打开。这样的时刻在节假日尤其危险,比如圣诞节,此时交易活跃度较低,算法只是因为时间而开仓。
  • 算法设置应针对每个交易工具分别进行优化。设置这些参数的唯一原因是它们在历史上工作得更好。该算法通过了21年的回溯测试,但不是所有工具都通过。根据历史调整参数不是最好的解决方案。
  • 目前还不清楚为什么它对某些交易工具的效果更好、更稳定,而对其他交易工具的效果更差。
  • 当交易工具的行为发生变化导致算法遭受损失时,这也是未知的。事实上,不知道风险情况何时发生。我可以计算出这样一个时刻的概率,但这将是一个非常粗略的结果。
  • 没有任何理论能够解释工具在未来将如何变化,以及为什么有必要使用明显次优的参数,以便价格序列的统计参数有波动的余地。这大大降低了盈利能力。

我认为以上所有的缺点都很严重。我们可以继续修改算法,一个接一个地改进特性,但最好是从中吸取一切精华,几乎从头开始开发。我将从修正理论基础开始。

该算法应该是完全自适应的,因此它将被开发用于货币和交易所市场,任何工具都能用。这一点很重要,因为人们应该清楚地了解一个市场与另一个市场的区别。如果有这样的理解,那么把它变成一个算法是有意义的。这一次,我切换到 MetaTrader 5 平台,因为它有一个功能更强大的策略测试器,不仅可以用于外汇交易工具,也可以用于交易所工具。

在开发过程中,您需要不断地回答这样一个问题:为什么某个参数具有某个值。在理想的情况下,在参数中设置任何值的原因都应该是合理的。

将蜡烛图转换为方块图

在新版本中,我决定不使用蜡烛图,因为它们的参数不稳定。更准确地说,只使用M1蜡烛,因为继续处理分时(tick)会导致资源消耗的显著增加。理想情况下,处理分时比较好。

我将分析N个点的块,这些块与 renko 类似,但它们基于稍微不同的算法。我已经在文章“什么是趋势,市场结构是基于趋势还是基于横盘”中提到了方块图及其在分析中的优势。

方块

图 1. 方块图表

图1显示了一个方块图表,方块图的一般视图显示在图的底部,而上图显示了方块在价格图上的外观。方块是从一个固定的时间构建到过去和未来的。在图中,固定时间显示为黄色垂直线。这是一个零点,从这个零点,方块被构建成过去和未来。构造算法是镜像的,事实上,这些方块是建立在过去和未来在进一步的开发中将是重要的。

之所以需要区块,是因为它们的主要参数是稳定的、可控的,最重要的是,利润/亏损主要取决于价格在各点上的变动。

市场模型

基本模式类似于我在前面的算法中使用的模式:下跌方块的数量与上涨方块的数量之间的局部偏差,以及随后回归到某种均衡状态。这种模式是统计的,所以我们需要从分析方块图的统计特征开始。为此,我开发了一个特殊的指标 Max_distribution,如文章什么是趋势,市场结构是基于趋势还是平缓的”所述。

该指标衡量分块价格序列的统计参数。它能够同时显示多个块大小的数据。例如,我们想知道块大小在10到1000点之间的图表有什么统计特征。在指标设置中设置最小块大小,并通过乘法因子获得所有其他大小的块。

主要的指标操作模式是衡量方块的数量价格垂直移动的N步。

垂直方块

图 2. 以24个步骤更改垂直块数

图2显示了一个示例。测量 N 步价格传递的块数。收集所需的样本数(例如,100),并定义平均值。这种分析是针对不同大小的区块进行的。

分布

图 3. 不同方块大小的平均振幅

图3显示了24个方块分步中垂直平均振幅分布的示例。每个直方图列是其块大小的平均振幅值。样本数量为1000个。最小块的测量值在左边,而最大块的测量值在右边。对于大小为0.00015的方块,价格分24步在1000个样本中垂直移动5.9个区块。对于大小为0.00967的方块,价格分24步在1000个样本中垂直移动4.2个块。

红线表示参考值,如果价格序列是随机游走,则会出现参考值。对于24步,这是垂直方向上3.868块的值。参考值是通过组合方法计算出来的,可以用图4中的表格清楚地表示出来。

概率表格

图 4. 计算24步的参考值

图4显示了在随机游走的情况下,价格平均分24步移动的区块的参考垂直值的计算。在最后一列中,此值转换为幂,随机游动的平均振幅趋于24^0.4526。可以为每个步骤数重新计算参考值。表格以.xlsx格式附在文章后面。

我对各种交易工具进行了研究:大约35种货币对、100多种股票、10种加密货币和大约10种商品,没有严重的偏差。一般来说,所有工具的图像都大致相似,平均幅度从快速增长的加密货币的7到货币对的3.8不等,一些低流动性股票甚至可能跌破3.8点。

平均振幅是在24步或其他一些步数中获得的,但这意味着什么?让我们用正弦波转换成块形式来表示图表,如图5所示。

弯曲轨道

图 5. 方块状正弦波

设块的大小为正弦波周期的一半,是24步,则周期数为48步。如果我们测量24步25个样本的平均振幅,我们得到24步10.33块的平均振幅。随着样本数的增加,平均振幅趋于12或步数除以2。价格序列不是正弦波,但正弦波便于交易。现在,如果我们在测量平均振幅时得到的值超过12,则块大小不够大,并且24个块不适合作为一半的周期。但小于12表示两个原因:方块太大,或者价格序列的趋势变化不像正弦波那样线性。我目前没有考虑趋势斜率,我稍后再做。

根据已开发的 Max_distribution 指标的读数,我们可以粗略估计价格序列与正弦波的相似程度。为了实现这一点,让我们看看正弦波的指标直方图是什么样子的。

分布2

图 6. 正弦波平均振幅与块大小的关系

在图6中,我们可以看到,在小区块的情况下,价格以24个步骤垂直移动24个区块。但随着区块大小的增加,价格以24个步骤移动区块的数量变小了。当块大小与波动幅度相当时,垂直方向上的块数降为零。在图3中,最大值为5.9,趋向于参考值3.868。因此,价格序列可以表示为“噪声”正弦波,在某些尺度上总是具有某种趋势分量。也就是说,市场应该总是有一个当前表现为横盘的标度(反转概率高于趋势延续的标度)和一个当前表现为趋势的标度(延续概率高于反转的标度)。

我以前的一篇文章什么是趋势?市场结构是基于趋势还是横盘解释了采用趋势和横盘定义的原因。

使用 Max_distribution 指标,我测量了不同交易工具的平均垂直区块数,不仅是24个,而且还测量了其他步数。示例如图7所示。

多样本

图 7. 平均振幅与样本步数的关系

图7中的白色列显示了从10到120的步数的测量运动幅度,每个测量的步数为2和1000个样本。红线表示给定步数的参考值。如我们所见,随着步数的增加,未观察到与主要趋势的显著偏差。测量值曲线的整体形状与参考曲线相似。测量值是使用 GBPUSD,但我也为其他工具做了研究。有许多交易工具的直方图值超过了参考值,但总的趋势仍然存在,可以用一个非线性方程来描述。

众所周知,市场不可能有稳定的简单规律。这意味着当前的趋势尺度在不断变化,同时,横盘尺度也会变得有趋势。

我将使用图7中24步的平均振幅,即 3.86。我假设运动是由趋势和类似正弦波的横盘部分组成。在这种情况下,可以计算平均振幅的趋势部分。为了实现这一点,24步的3.86*2=7.72个垂直块要四舍五入到8,因为这些块只能是整数值。如果我们到达趋势区域,那么价格在24步中垂直移动8个方块。当然,价格可以在24步中垂直移动24个方块大小,但这并不重要。我稍后再解释原因。

结果表明,价格在趋势区24步内垂直移动8个区块。这意味着在一个方向上有16个块,在另一个方向上有8个块。众所周知,趋势部分应紧跟在横盘部分之后,以便平均振幅保持稳定(在大量样本上相当稳定)。但市场不是正弦波。如图7所示,垂直块的数量随着步数的增加而增加。因此,我将假设在较少的步数中出现的与平均值的偏差返回到在较多的步数中的平均值。

图7中的图表允许我们定义价格在26、28、30、32和34个步数中的平均通过量:

26 步 = 3.98; 28 步 = 4.11; 30 步 = 4.2; 32 步 = 4.36.

在24步中,价格已经垂直移动了8个区块,但在28步中,它应该平均垂直移动4.1个区块,如果向下舍入到整数值,则为4个区块。这意味着,在接下来的4步中,可能从之前的4个块的移动中回滚(rollback)。市场并非如此可预测,事件不太可能按照这种情况发展。图7中的同一个图表允许我们定义价格在116步中垂直通过8个区块。

回滚 1

回滚 2

图 8. 可能的场景

图8显示了两种可能的场景,这是两个极端的选择。它们不太可能出现,而且是为了形象化。最有可能的是,这些事件将遵循中间场景之一。现在最重要的是,我们知道平均每个步的价格应该通过多少。如我们所见,回滚越尖锐,回滚越深,反之亦然。

从长远来看,振幅趋于其平均值。对于24步,这是3.8个垂直块,而对于116步,这是8个垂直块。

这是模型的结构,它允许根据趋势移动参数和进一步的价格行为计算每个交易工具的回滚特性。趋势变动越剧烈,回退越快,它变得越深。趋势越平坦,回退越大,深度越浅。现在所有这些都可以用数字表示,以工具的统计参数为基础。

回滚

图 9. 趋势运动与回滚深度

图9显示了它在真实图表上的外观。我们可以看到剧烈的波动和向左侧的剧烈的回滚,回滚深度超过60%。在右侧,有一个更平滑的波动和更长的回滚导致30%的回滚。这是因为价格在右图中经历了更多的步数,并且在运动形成过程中其幅度增加。

这种行为的原因不仅可以解释为价格序列具有它所遵循的平均振幅,而且还可以解释为资本的急剧流入/流出导致了剧烈的波动,其金额大大超过了当前的流动性。大量头寸开仓后,它也应当会平仓。谁拥有多少资金并不重要 —— 一个参与者还是几个参与者也是。如果我们立即全部平仓,价格会回到原来的水平,即回退100%。但如果考虑到流入的流动性,仓位逐渐平仓,那么较大的数量只会引起小的波动。交易者退出头寸的速度越快,他/她的资本产生的波动的回滚就越强烈。

重要的是,定价的基本特征证实了这种模式。 

整个理论不在本节中描述,但足以据此开始开发算法。其余部分将在整个过程中进行描述。

跟踪趋势

与前面的算法一样,机器人要进行逆势交易,仓位由一系列订单组成。该算法的任务是尽可能精确地确定入口点,以生成序列开仓信号。理想情况下,信号在序列开始时产生的频率越高,单位时间内获得的利润就越多。这意味着信号应该是频繁的和高质量的。

机器人将分析下跌和上涨方块的数量,如果它发现上涨方块的数量与正常值有显著偏差,那么它就会为一系列卖出头寸生成一个信号。下跌方块也是如此,它们的偏离导致产生买入序列信号。

现在我要开发一个基本的算法,这个算法以后会修改,所以它的模块应该是灵活的。系列开始信号基于下跌/上涨方块超额百分比阈值。与前面的算法一样,要将分析的块数设置在从最小值到最大值的范围内。但是,这里这样做是为了其他目的。

开始和完成系列的阈值百分比

由于方块范围用于分析(例如,24-34),因此对每个块数使用固定的阈值百分比是不正确的。由24个区块和75%的主要区块组成的组合的概率不等于34个区块出现这种组合的概率。组合的概率是相同的,这意味着应用的阈值百分比应该是动态的,并且取决于这种组合的概率。

在设置中,阈值百分比是根据落入该范围的概率来设置的。然后应重新计算所需的块数。落入该范围的概率是用组合数学的规则来计算的。我创建了一个表,允许将概率转换为每个块数的阈值百分比。 

概率表格

图 10. 概率表格

图10显示了重新计算落入开仓百分比范围的概率的表格。该表格假设100%的移动在0-16垂直块的范围内,持续16步。落入2.1%范围的概率(对于图10中的表格)意味着只有2.1%的移动通过10-16以16个步骤垂直分块。在设置中,设置落入该范围的概率,例如2.2,同时算法使用表格搜索小于或等于2.2的最接近值,并取该值对应的百分比。现在,它是 81.25%. 因此,每个块数都有其自己的阈值百分比。表格以.xlsx格式附在文章后面。

在以前的版本中,当未平仓的总利润低于阈值时,仓位关闭。这不是最好的解决方案,因为它会导致多个问题。因为我在这个版本中使用固定大小的块,所以当超额的百分比下降到必要的值时,可以关闭仓位。如果在固定数量的块上打开仓位,则在操作过程中样本中的块数会增加。 

平仓阈值百分比也通过落在该范围内的概率来计算。但落入范围的概率是相反的,不过,这没有什么关系。该表有一个单独的列用于计算平仓百分比。假设我想在值大于或等于75时平仓,就要找到大于75的最接近值。对于16个区块,这是78.9,对应于平仓百分比阈值=62.5%。 

在操作期间,由于新的块被关闭,因此样本中的块数增加。因此,只要有仓位打开,每个新块上的更多块的关闭百分比就会重新计算。

系列中所有头寸的获利都设置为预期的平仓点。这就是根据当前市场状态控制回滚的算法的实现方式。样本中在序列开始(趋势运动)后形成的块越多,产生的回滚越少。

目前阈值百分比的实现并不完美。它是在算法开发的一开始就开发出来的,稍后,我将修改这个方法。所有打开/关闭百分比应根据测量当前块数的平均振幅进行调整。在当前的版本中,我没有考虑到价格序列参数对于上涨和下跌的市场是不对称的。这在外汇市场可能并不重要,但对股市来说却很重要。我将在算法的未来版本中考虑这一点。

阈值百分比的计算方法已经被开发出来,所以现在我们可以不经过优化就回答关于所需阈值百分比的问题。为此建立了以下公式:

%open

  • Nb - 用于分析的方块数目;
  • aa - 根据给定块数的指标读数的平均振幅;
  • Ka - 平均振幅乘数比率. 对于正弦波,比率为 2. 但是,这个值应该为市场定制,这样我们就可以增加一点;
  • Kc - 计算平仓百分比的平均振幅乘数比率;
  • %open - 开启序列的百分比阈值.

我们只能对单个数量的块执行此过程,而其余的块则使用概率表重新计算。

也可以根据指标读数预先计算平仓百分比。

%close;

计算平仓百分比的公式看起来是一样的,只使用不同的乘数因子 Kc。它应该等于1,并且可以自定义它。

基于平均振幅等于3.8的分析,您可以将24个区块的开启阈值百分比设置为66.67%。使用概率表重新计算其他值。

跟踪趋势

正如我之前提到的,市场没有稳定的模式和稳定的波动幅度。在一定数量的具有固定大小的块上分析趋势度是一个值得怀疑的解决方案。分析窗口应该是动态的,并且可以实时调整。将块数设置为24-28。 

我为什么选择这样一个分析窗口?我是根据平均振幅=3.8选择这些值的。它们取决于阈值打开/关闭百分比。在一个信号之后有这个数量的块,我们在序列的开始处获得4个利润块。分析窗口中的块越多,算法就越精确。如果区块大小按比例改变,那么获得多少利润区块没有根本区别:4个或10个。然而,由于在每个新块处打开仓位,因此它们的数量随着操作精度的增加而增加。这将对结果产生负面影响。 

接下来,我们需要定义最小块大小,以便进行分析。这些方块是根据形成的M1烛形构建的,最小离散化速率为1分钟。这些块不能做得太小,因为它们最终将在蜡烛内部构建,使得这样的分析毫无意义。因此,最小块大小将根据蜡烛的大小来确定。为了实现这一点,我们可以在一个大的时间段内使用ATR,比如1440分钟(一天)或更长的时间,并将其值乘以比率。2-5的比率应该是可以接受的,尽管这取决于交易工具的特点。

如果蜡烛的大小很不均匀,那么最好使用较大的比例。第二个标准是佣金和差价。4个方块的利润应该大大高于我们将支付的佣金。方块的大小越小,序列启动信号出现的频率就越高,我们可以赚取的利润也就越多。在这里我们需要找到一个平衡点。最后,最小块大小取决于烛形大小和佣金。选择最小块大小有明确的标准,

文中提出的块尺寸选择方法在理论和实践上都是很好的。不过,我已经有了一个基于改进市场模式的改进机制。解释新机制需要一篇单独的文章,因此我将仅限于上面描述的方法。

如果机器人分析一定数量的具有固定大小的块,由于市场参数总是变化的,市场趋势和回退的大小是不同的,因此需要一种自适应机制。

机器人分析具有最小尺寸的块。当它发现一个小的趋势区域,其超出的百分比超过阈值1时,它应该定义一个趋势存在的最大尺度。为此,应扫描更大的区域。由于用于分析的块的数量是固定的,因此我们需要增加块的大小,并查看在较大的块大小上发生了什么。我将最小块大小命名为TF1,类似于时间框架。这是一个合成块时间框架。较大的块将使用乘法比率KTF获得,例如,它将等于1.1。

1. 序列启动信号

有必要引入基本时间框架的概念(在这里和下面讨论时间框架时,时间框架是指块时间框架)。基本时间范围是检测序列开始信号的时间范围。

算法应该创建几个额外的块时间段,并在更高的时间段上检查序列开始信号。 

在KTF=1.1的情况下,看下5个时间段就足够了。因此,最大的时间段块将比最小的时间段块大1.6倍。如果其中一个较高的时间段具有信号开始序列,则算法将切换到该时间段并使其成为基本的时间框架。在找到基本的时间框架后,我们需要再次创建5个更大的时间框架并重复扫描。这允许我们找到超过阈值的最大时间范围。


工作

动画 1

在这个阶段,任务是找到一个最长的时间框架,在这个框架上有一个系列开始的信号,并使之成为基本的时间框架。动画1显示了这是如何工作的。我们可以看到算法扫描的是小块,一旦找到信号,它就增加块大小并选择具有最大块大小的基本时间框架。它计算出它所能确定的最大趋势的收盘位置的回退。

此时,使用块编号范围而不是固定值变得非常重要。在该示例中,在信号中搜索24-28个块的范围。具有更多块的样本被视为有更高优先级,如果在24和28块上都检测到信号,则28块成为基本样本。附加时间段的情况也是如此:在24-28个块的范围内搜索信号。具有更大数据块大小的时间段被视为更高优先级。在此时间范围内,优先考虑具有大量块的样本。

这种机制是必要的,因为在建造方块时存在一些不精确之处。大数据块大小的时间段并不总是覆盖更大的数据范围。

大小偏差

图 11. 构造方块的不精确性

图11演示了10个较大的块可能比10个较小的块覆盖更少的数据。使用24-28的分析块的数量范围来最小化这种影响。机器人可能会移动到更大的基本时间范围,并增加样本中的块数。在那之后,它将更容易移动到一个更大的时间段,而样本中的块更少。

所以,为什么 KTF = 1.1?乘法因子越低,算法越精确,但我们需要同时查看的时间段就越多。为了使块大小相对于基本时间段增加1.6倍,我们只需要查看5个时间段。如果 KTF = 1.05, 我们将必须考虑10个时间框架,它们带来了额外的计算负载。但乘法比越小,它就越精确。

2. 开启仓位的延迟

序列启动信号已经找到,但如果我们现在打开位置,由于自适应能力弱,结果将是可疑的。价格可能会继续向同一方向移动,而且很可能会这样。我们需要确保找到最大规模,趋势结束。为了实现这一点,序列开始信号应该在下一个时间段不存在,并且算法应该不能增加基本时间段。高时间段上的序列开始信号现在不存在,但是高时间段块覆盖了更大的数据范围,并且相对于趋势开始移到过去。

在定义了基本的时间框架之后,我们需要给价格时间,以便在更高的时间框架上生成一个信号。价格应该有足够的变动幅度,以便我们能够在更大的时间范围内变动。只有经过足够的时间在更高的时间范围内形成信号,但信号尚未形成,我们才能开仓。首先,我解决了(a)中描述的问题。然后我对这个机制进行了显著的修改,结果得到了极大的改善。我将在(b)点中描述它。

a) 在趋势阶段延迟

一般来说,高时间段的区块比基本时间段的区块更深入历史。这意味着我们应该等到24-28个更高的时间段块与基本时间段的24-28个块符合相同的历史范围。检查应在任何烛形上进行。

延迟 a

图 12. 延迟开仓,以便向更高的时间段移动

图12显示,我们需要等待2分钟,以便较大的块适应较小的块占用的时间范围。如果在延迟期间在其中一个较高的时间段(我们可以看到其中几个)上检测到序列开始信号,则基本时间段将增加,并且延迟将重复。如果算法在延迟后无法移动到更高的时间段,则已找到最大趋势标度,是时候打开一个仓位了。

这种方法是可行的,但还远远不够完美。它是在早期的算法版本中实现的,我将展示它的测试。因此,我介绍了它是怎样工作的。(b)中描述的改进延迟算法已在修改过程中开发。

b) 基于工具统计参数的延迟

方法目标与(a)中的目标类似。较高的时间段应涵盖与基本时间段相同的趋势部分。

在这种方法中,我将使用交易工具的统计参数来定义延迟完成时刻。在延迟期间,算法必须定义趋势结束,或移到更高的时间范围,或打开一个仓位。因此,最好的解决方案是使用较高的时间段块来计算延迟时间。由于一个交易工具的主要统计特征已经在 %open 阈值百分比中考虑在内,我将用它来定义延迟持续时间。

首先,定义接收序列开始信号(Vb)时价格垂直传递的块数。然后使用基本和下一个时间帧块大小来定义应该垂直传递以形成更高时间帧(Nd)的所有Vb块的更高时间帧块的数量。之后,知道价格通常不会严格垂直移动,并且知道移动的性质,我们需要计算较高时间帧(Nbd)的延迟块的数量。

公式延迟;

  • Vb — 序列起始的主要块数;
  • mnb  — 分析范围的最小块数。如果范围为24-28,则为24个块;
  • Nd  — 延迟编号;
  • Bsd  — 更高时间框架的方块大小;
  • BSB  — 基本时间框架的方块大小;
  • kfd  — 用于调整延迟块的数目的乘法因子;
  • addkfd  — 用于调整延迟块数量的加法系数。

例子: 如果 mbn=24; %open=75; BSB=0.00064; Bsd= 0.0007. 则 Vb=18. 这意味着24个方块中的18个方块应该是同一个方向。计算价格在基本时间框架内18个区块内移动的点数。18*BSB = 0.01152. 计算价格应该在较高时间段的18个区块内通过多少。18*Bsd = 0.0126. 定义缺少多少点以形成所有更高的时间段块。0.0126-0.01152=0.00108. 将获得的值除以更高的时间框架方块大小。Nd=0.00108/0.0007=1.54. 结果是1.54个块丢失,无法进入更高的时间范围。

如果价格严格垂直移动,则获得的值是有效的,事实并非如此。在24个方块中,只有18个在一个方向,6个在另一个方向。因此,1.5个区块应重新计算为交易工具的正确区块数。这就是我们如何得到 Nbd = 3. 因此,在现实中,鉴于这一交易工具的趋势走势特点,我们需要等待三个更高时间段的形成。

然而,仅仅等待所需数量的延迟块(示例中为3个块)通过并不是最有效的解决方案。只有当价格沿着检测到的趋势移动,并且有可能过渡到更高的时间范围时,等待才有意义。我们需要将Nd区块的最小数量乘以Bsd区块大小,并从基本时间段区块关闭价格中挑选出走向趋势的必要点数。这将是参考点的价格应达到,使移动到更高的时间框架。现在,在关闭每个新的更高时间段块之后,我们需要检查剩余的块是否足以使价格达到参考点。 

例如:Nbd=3个区块,趋势为看跌。参考点位于基本时间段区块关闭价格下方1.54个区块。在较高的时间范围内形成下降块,然后形成增长块。仍保留一个延迟块。没有必要再等下去了,如果形成了另一个延迟块,它将不能穿过参考点。继续延迟是没有意义的。过渡到一个更高的时间框架不会发生,我们可以打开一个仓位了。 

所有这些都显示在动画2中。

工作 2

动画 2

我以正弦波为例,当前版本无法定义交易工具的统计特征。所以我手动设置开启和关闭的百分比。这个功能将在未来的版本中实现。算法是自行定义交易工具。它定义了块大小和开启仓位的时刻。

我们可以看到测试是从小块开始的。接下来,该算法在跟踪趋势的同时增加块的大小。在定义最大趋势大小后打开一个仓位,然后计算趋势的回滚。对于正弦波,回滚为100%,因此计算结束点并设置获利。我选择正弦波进行可视化,简化了对操作过程的理解。该算法利用几乎整个正弦波的振幅来盈利,除了在新的趋势段开始的第二个块的一小部分。

3. 跟踪序列

在打开序列中的第一个仓位后,算法继续寻找机会移动到更高的时间段,以便调整其工作,并在趋势继续的情况下移动到更高的时间段。当然,有些仓位是在较小的时间框架内开仓的,而有些仓位是在较高的时间框架内开仓的。回滚大小总是根据机器人发现的最大趋势来计算的。

由此产生的算法忽略了两个极端的市场条件。如果市场横盘,没有任何规模的趋势(这不是典型的交易工具),机器人永远不会开始这个序列。但是,如果市场处于稳定的趋势中,比如在大盘暴涨或暴跌期间,该算法就无法打开头寸,因为它会不断地增加时间范围,直到趋势结束。在这种情况下,要根据趋势本身的规模和交易工具统计特征的变化,调整趋势完成的标准。

结论

主要目标是开发能够处理任何数据的算法。如果输入数据不符合其稳定性标准,它将不会进行交易。换言之,我们的任务不是为特定的市场开发一个盈利的算法,并且试图预测价格走向。本文的任务是使算法在一定的条件下和价格序列的统计特性下都能盈利。只有在满足这些条件时,它才应该进行交易。如果我们知道算法交易利润的条件,当这些条件不满足时就不需要交易。在建立这样一个算法之后,它应该具备关于市场价格形成的细微差别的知识,以提高算法的效率。

所描述的功能仍然不足以实现稳定的自动操作,但是已经建立了基本的理论模型和算法操作的基础。完成的工作量已经相当大。把每件事都写进一篇文章是困难的,因此,我将在接下来的文章中描述其余的函数和测试。 

已开发功能的参数已移动到设置,以便进行调整。在算法操作设置中设置某个值的原因有非常具体的解释,甚至有用来计算它们的公式。最终的算法将有许多设置。他们需要配置算法本身,因为它是相当复杂的,它的各个模块应该有效地相互作用。此算法中的设置不是为了根据历史调整性能参数,它们旨在优化模块的操作和交互。

在图表和指标窗口中构建方块的指标代码附在文章后面。这些都是相同的指标,但在可视化方面有所不同。这些指标的需求规范和先前算法版本的完整需求规范附在下面。

相关这个主题的之前文章

开发自适应算法(第一部分):寻找基本模式
开发自适应算法 (第二部分): 提高效率 



本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/8807

附加的文件 |
TZ-50cV3.zip (694.09 KB)
DoEasy 函数库中的时间序列(第六十部分):品种即时报价数据的序列列表 DoEasy 函数库中的时间序列(第六十部分):品种即时报价数据的序列列表
在本文中,我将创建存储单一品种即时报价数据的列表,并在 EA 中检查其创建状态,以及检索所需数据。 每个所用品种各自的即时报价数据列表将来会构成即时报价数据集合。
神经网络变得轻松(第十部分):多目击者关注 神经网络变得轻松(第十部分):多目击者关注
我们以前曾研究过神经网络中的自关注机制。 在实践中,现代神经网络体系结构会采用多个并行的自关注线程来查找序列元素之间的各种依存关系。 我们来研究这种方法的实现,并评估其对整体网络性能的影响。
多层感知机与反向传播算法 多层感知机与反向传播算法
这两种方法的普及性日益增加,因此在 Matlab、R、Python、C++ 等领域开发了大量的库,它们接收到一个训练集作为输入,并自动为问题创建合适的网络。让我们试着理解基本的神经网络类型是如何工作的(包括单神经元感知机和多层感知机)。我们将探讨一个令人兴奋的算法,它负责网络训练 - 梯度下降和反向传播。现有的复杂模型往往基于这样简单的网络模型。
神经网络在交易中的实际应用 (第二部分). 计算机视觉 神经网络在交易中的实际应用 (第二部分). 计算机视觉
利用计算机视觉可以训练神经网络对价格图表和指标的直观表示。这种方法可以对整个复杂的技术指标进行更广泛的操作,因为不需要将它们以数字形式输入神经网络。