股票量化交易软件_如何降低交易者的风险
简介
首先,这篇文章将对交易和分析新手在开发他们自己的交易策略时会有所帮助。然而,就算经验丰富的市场参与者也可能会找到有用的内容,例如风险的分类,把烛形分析应用到定义超买/超卖区域中去,基本分析和技术分析的关系,选择移动平均计算的周期数,以及降低与可能的价格剧变有关的风险。
本文处理了下面的问题:
- 在金融和股票市场中交易过程动态的本质;
- 交易中的获利概率;
- 当开发交易系统时降低交易者风险的方法。
我并不是承诺这是在金融市场上进行交易的完整可靠的风险分析和分类,我们将会注重于和金融资产价格变化动态相关的主要市场风险。此外,赫兹量化交易软件将对与市场动态不直接相关但对交易效率仍然很重要的风险有所了解。写这篇文章时,我利用了我在分析和开发交易系统过程中积累的经验。
什么是金融市场的过程动态?
当开发交易策略时(包括人工交易和自动化交易), 我们应当了解我们所处理的过程。金融市场的价格变化是一个不稳定的过程,它会被多种因素所影响,并且常常无法确定哪一个是决定因素。
这个过程不稳定的特点是由市场参与者的行为决定的,他们的反应是多方面的。因此,市场的振幅和频率的变化不能由确定性的行为法则来决定。一般来说,这种过程可以被认为是随机的。
尽管在有些区域之内您还可以正确预测变化的方向。让我们列出可能使这些区域出现的因素。
- 波浪式的价格变化。我们可以定义波浪的开始:例如,烛形穿过一组移动平均线或来自常规指标的信号。我们现在还是不讨论这种定义的准确度,在此我们只是注意这是可能的。
- 狭窄的盘整区 (价格总是会离开它们的)。
- 一些用于反应某些基础、基本分析和技术分析的规则。
在金融市场上获利的概率是多少?
这是主要的问题,因为任何交易者实际也是投资者,金融市场交易中获利的概率直接关系到趋势延续预测的正确性,因为主运动范围正好位于趋势区域。
有很多方法用来计算趋势的延续或是反转,它们都有一个共同的缺点,因为任何交易系统都是市场状态模型。评估这样一个模型的准确性总是有问题的。首先,这个过程本身从动态的角度上是非常复杂的,因为它有非稳定(随机)的特点。其次,“随机过程”内部的所有精度评估方法也是复杂的,其效果是不明确的。
因此,为了评估获利的可能性,赫兹量化软件将以另一种方式使用实际的(而不是计算的)数据。要做到这一点,我们需要分析投资和经纪公司提供的外汇和股票市场交易效率的统计数据。
根据在文章 “在俄罗斯和美国个人交易外汇的成果 " (俄语) 中提供的数据, 在2015年,在俄罗斯获利的个人交易者占 28%, 而在美国是占 33%。当然,这些数据不能被认为是详尽无遗的,因为这项研究只包含了有限数量的公司,研究期只有六个月。不管怎样,这些数字给我们提供了一些启示。可能的结论是什么呢?
大多数市场参与者使用的常规分析方法不允许我们有效地预测金融市场价格波动的过程。其他措施,包括资金管理方法,也效率低下。究其原因,主要是利用技术和基本分析对市场动态基本预测的初始效率低下。因此,只有不到三分之一的金融市场参与者获得利润。
而对于股票市场,统计结果是不一样的,我将引用相对“温和”的数据。根据法国金融市场局的研究,十个人中有八个人最终亏掉了他们的钱。这表明,在股票市场上交易的成果是 20%. 这比外汇市场更加糟糕,尽管其价值不好比较。.
正如我们所看到的,全面的风险核算对任何投资者来说都是至关重要的。
让我们重点关注两组主要的风险:
- 与价格变化动态相关的风险;
- 与市场动态无关的风险。
赫兹量化软件将会仔细研究这些风险,以及减少这些风险的方法。
我们将从第一组风险开始,它们的列表是由金融资产图表分析来决定的。我们需要分析图表的元素和它们的参数,包括单个烛形和它们的组的特性,以及移动平均线。我们不会使用其他常规指标,因为它们的数学模型不符合价格运动的概念,使它们效率低下。
与价格变动动态相关的市场风险
从技术上讲,主要的交易者风险是趋势的反转。金融资产的价格可能改变方向而走向开启仓位的相反方向,如果还没有开启仓位,风险就是预测这样的反转。
每个交易者都有他们自己对趋势的定义,虽然看起来很奇怪,但在技术分析中没有“官方”这个概念的定义,这意味着对趋势反转概率的评估也是主观的。每个交易者定义的临界振幅(趋势反转)取决于可接受风险(风险极限)。反过来,这个值是由每个交易者帐户上的资金金额来定义的。换句话说,一切都取决于最大可能的回撤。对银行好的因素对普通交易者可能就是坏的,
让我们看看风险的类型,再寻找方案来减少它们。
与市场动态相关的风险分类
传统的分析根据时间重点提出了三种类型的趋势:短期、中期和长期。
还经常提到局部和全局的趋势。通常情况下,局部的趋势是由短期或者中期趋势构成的,而全局趋势是由长期趋势构成的。没有明确定义的值来确定这些概念的时间和幅度边界,一切都是相对的。因此,让我们简化分析:反向变化的振幅将被用作趋势反转相关风险的标准。我们将根据重要的技术水平或取决于投资者存款的规模对其进行评估,并考虑到给定的风险限额。
为了将风险与趋势反转的可能性进行分类,还必须考虑到市场价格动态的因素。让我们简要地来检验它们。
- 入场交易时高波动性相关的风险。
- 入场交易时存在支撑水平相关的风险。
- 入场交易时在超买/超卖区域结束的风险。
- 入场交易时缺乏明确趋势相关的风险。
- 错误选择指标计算周期数相关的风险。
- 入场交易时使用挂单相关的风险。
- 在入场交易之后价格变化浮动不确定性相关的风险。
- 在入场交易之后价格剧变相关的风险。
- 只使用一个时段相关的风险。
- 只使用一种类型的分析(技术或基本分析)相关的风险。
入场交易时高波动性相关的风险
很多交易者完全没有考虑这类风险,这是一个很大的错误,因为在动荡加剧时,价格变化的幅度 (包括与主要趋势相反的方向) 都会增加,这就是风险因素。
使用传统的指标来评估波动性过于主观,首先,指标的设置本身是主观的,其次,他们的数学模型并不总是为这样的评估而设计的。因此,将盘整区域作为一种模型来定义市场进入时所需的波动程度是更为可靠的。
入场交易时存在阻力水平相关的风险
市场参与者对图表上的阻力水平有不同的反应。对一些人来说,这是利润目标,对其他人来说,是亏损限制器,对第三个部分来说,是水平突破的最初目标。就是为什么,分形级别经常被价格波动幅度不同的区域所包围。在这些区域的开放风险增加,而根据各种交易系统测试结果,它们内部的预测是无效的。所以,看起来把入场点放到趋势方向上的阻力水平之外是合理的。
我们应当怎样考虑这种交易风险呢?
如果仓位已经在阻力水平的方向上开启而价格正在接近它,就最好提前关闭这个仓位,因为有很高概率会出现强的回撤。
如果您准备根据您的算法来在价格突破了阻力水平之后来开启仓位,就应该等到在所选方向上出现可靠的突破。
实际上,这是一个真假突破的问题。一个可能的方案如下。等待直到在分形水平之后出现新的阻力水平,然后等待直到价格突破它。确保在较低的时段中使用,但是,这还是不够。当前的动态应当显示出明确信号,方向是突破的方向并且超过了新的分形水平。
这种方法的缺点是时段不确定。这是主观选择,因为不可能预先预测水平突破的幅度。因此,我们通过指定在入场时间之后通过水平的条件来简化这个问题,
当开发交易系统时,我们可以在入场条件中使用多个选项来减少出现阻力水平相关的风险。
- 选项 1. 在搜索最近的阻力分形之后 (在代码中,它是使用循环来实现的)。这种方法的优点是: 我们将会找到在这个时段中阻力的真实水平。但是,也有两个缺点,首先,对编程新手来说,开发循环可能有点困难,第二,分形在历史中可能会很深,也就是与阻力水平无关。
- 选项 2. 使用前一个烛形的最高价(用于买入)以及最低价(用于卖出)。这种方法有两个优点,首先,它的编程很容易,其次,您可以同时设置几个时段,就相当于搜索更早的分形。缺点是: 一些分形可能无法被侦测出来,因为烛形的极值只在有影线的时候才是分形。
对于编程新手,以及在开发人工交易时,我们推荐使用选项2: 它比较简单有效,尽管准确性会因为丢失一些分形而降低。这里是相应的代码段:
//----减少与入场交易时有阻力水平出现的风险----- //模拟当前价格超过局部支撑水平的情况: Bid > High[1] && //在 М1 (较低时段) Bid > H_prev_m15 && //在 М15 (较高时段)
图 2. 入场算法模块: 减少与入场交易时有阻力水平出现时的风险
图 2 显示了用于在入场算法中减少与入场时有阻力水平出现的风险, 买入入场。这是通过设置条件,认为当前价格已经在前一个柱的最高价穿过了阻力水平 (在两个时段中分开)。
我们应该另外设置变化的活动。然而,为了避免变量的重复,这必须在其他模块中完成 (同时设置方向和活动)。
如需建立卖出仓位, 要在下跌趋势中使用前一个柱形的最低价水平 (M1 和 M15 时段) 作为阻力水平。
入场交易时在超买/超卖区域结束相关的风险
这些风险包括,在波浪形运动的最后进入了市场,本来入场方向上的变化幅度较小,而反转的可能性大幅增加。这样的区域就是超卖/超买区域。使用传统的指标 (RSI 等等) 来定义它们通常是不够的,在很多情况下它们的信号是错的。原因是相同的: 传统的指标没有足够的数学算法来确定这些区域。为了更加准确地寻找超买/超卖区域,您需要识别出趋势变缓的迹象 (包括在 M1, 因为它会比其他时段上更快地显示出反转动态)。
我们将会通过根据下面的标准来综合分形和烛形分析,从而侦测趋势变缓的迹象:
- 相邻分形阻力水平之间的距离(幅度大小)变小,为了比较两个相邻区域的幅度,我们需要三个分形;
- 在一个烛形中增加修正,减小烛形的“烛体”(柱内分析);
- 改变烛形轴点相对于之前烛形轴点的偏移方向 (为此我们需要三个烛形).
如果使用了这个方法,就应当在入场算法条件中加上,上面列出的因素应该不存在。例如,这可以通过使用false(假) 和true(真)来做到, 其中true 的意思是指定的变缓因素在市场上出现。
然而,还有个更简单的选项。它与搜索超买/超卖区域不直接相关,这里使用的是一个间接的标记: 如果您在波浪形变化的开始进入市场,进入超买/超卖区域的可能性就大幅降低。实际上,我们是模拟了局部趋势的开始阶段。
- 首先,我们需要识别出一个或者多个移动平均(MA)在相同烛形内的交叉 - 这可能是波浪式运动的开端。为了确认波段的开始,我们需要另外的条件(参见下方),
- 然后再模拟波浪式运动的初始阶段,它将是新趋势的开始。为了取得这样的结果,我们指定: 在交叉后烛形的方向;它的活动;与前一柱交叉的快速移动平均的方向;当前价格与这些移动平均的相对位置。
注意: 当模拟局部趋势的初始阶段时,推荐只设置快速移动平均的方向。不需要设置快速移动平均的方向。
这种使用移动平均的方法如下: 更早的移动平均,因为它们有较大延迟,没有时间在新的趋势中反转方向。所以,如果我们设置了它们的方向,模拟的入场点可能距离趋势的起点很远,而落在危险的超买/超卖区域中。
第二个选项 (模拟局部趋势的初始阶段) 更加简单,所以推荐给编程新手。
图 3. 入场算法中的模块: 减少在入场交易时进入超买区域的风险
说明:
- МА8_prev, МА8_2p, МА8_3p — 在报价历史中(M1),使用周期数为8在前一个,第二个和第三个柱上计算所得的移动平均,
- МА5_prev_m15, МА5_2p_m15, МА5_3p_m15 — 在报价历史中(M15),使用周期数为5在前一个,第二个和第三个柱上计算所得的移动平均,
- 烛形的极值在之前设置 (参见图 2).
通过把入场点与估算的波形开端进行绑定,减少了进入超买区域的风险。波形开始的标记是,一个移动平均与柱形交叉: 在 М1, 这是一个周期数为8的 МА, 在 М15 上— 周期数为 5 的 МА。移动平均周期数值的选择是根据斐波那契序列原理的,我们将在“与不正确的指标计算周期数选择有关的风险”部分中更加详细地探讨这个参数。
这个模块不指定设置烛形和移动平均活动特征的参数,以及当前价格与移动平均相对的位置,这样做是为了不要重复的变量,我们将在“入场交易时缺少明确趋势有关的风险”模块中设置这些参数。
请注意,烛形与移动平均在M1时段中的交叉在历史中并不限于一个柱。它是通过逻辑或(OR)来设置的 - 在历史中或者在前一个柱,或者第二个,或者第三个柱上有交叉 (在 M1 中)。在 М15 中, 这种情况是要求有一个交叉选项 — 在报价历史中的前一个柱。这一系列潜在的选项使得可以考虑真实市场中局部趋势相对于这类交叉的多变情况。
上面的例子是用于买入入场的 (避免超买区域),对于卖出入场(避免超卖区域), 模块是一样的,因为移动平均与烛形交叉的算法并不依赖于移动的方向。
这样,我们已经探讨了两种方法来在入场交易时不会掉入超买/超卖区域,以及找到这些区域。您可以在创建您自己的交易系统或者开发交易指标时自己实验这些方法。
入场交易时没有明确趋势相关的风险
缺乏明确趋势是另一个不确定动态的因素和相关风险,我们会在市场由双边小幅振荡甚至平盘占据的时候讨论这一情景。
确定价格的方向很难,因为它一直在狭窄的范围内变化,所以,这在预测入场方向时出错的风险提高了。
这个问题甚至还更加复杂一些,因为传统的分析方法没有为我们提供平盘市场的明确定义(就和趋势的状况一样),所以,在平盘和趋势的开始之间没有边界定义。现有的方法非常主观: 平方差方法 (例如, 在StdDev 指标中), 以及更加高级的适应性函数方法 (例如, FRAMA). 这个问题在处理趋势定义的图形化方法时甚至更加复杂,根据不同的解释,各种市场阶段 (包括那些有明显振荡幅度的) 都被认为是平盘。这会导致亏损。
根据我个人的经验 (由交易系统的结果确认), 最有效的用来定义平盘边界的方法是在双边振荡趋势中设置一个振荡幅度的绝对值。
但是要记住,如果幅度大于所选的阈值,这并不表示我们看到了新的趋势!所以不要马上急着立刻开启仓位,您需要使用当前的动态来确认这些数据。
使用阈值绝对值看起来比估算相对幅度值更加有效,因为那在随机不稳定过程的条件下很难定义。当然,这是一个很大的简化,但是在实际应用中它的结果还不错。不使用它,您将会面临严重问题和复杂的理论计算,因为平盘和趋势的边界是模糊逻辑中的问题。
通过同时模拟在两个时段(M1和M15)上的明确定义的趋势来减小这种风险:
- 之前的烛形和仓位开启方向一致 (在 М1 上的两个烛形和在 М15 上的一个烛形);
- 移动平均的方向 (在 М1 的两个移动平均, 在 М15 上一个移动平均);
- 移动平均的层次 (在 M1 上三个移动平均,在 M15 上两个移动平均);
- 当前价格与移动平均的相对位置 — 在 М1 上三个移动平均.
这种"一系列度量"很大程度上增加了仓位入场点在明确定义的趋势之内的概率,并且这是同时考虑了两个时段的。对应地,掉入平盘区域、随机波动、趋势不明确区域的概就减小了。与这种负面因素相关的风险也就减小了。
这个例子是针对买入入场的,对于卖出, 要使用相反的算法 — 烛形和移动平均都要向下,而不是向上。入场点应当低于指定的移动平均。
选择指标计算周期数相关的风险
每个交易者都是基于个人的经验来设置指标周期数,包括移动平均。有些人喜欢周期数为200的移动平均,有些人把周期数设为 50, 而有些人根据斐波那契序列来设置周期数。我们是根据直觉来设定指标设置的(首先,我们最感兴趣的是指标的周期数)。
这种直觉的原因是传统的分析方法没有提供机制来在特定时刻识别频率调制振荡的机制,这在设置指标周期数的时候会引起不确定性。当然,有些方法可以构建适应性函数 (Kaufman, FRAMA etc.), 但是,它们的算法也没有考虑到不断改变的市场振荡频率。
让我们探讨一个部分解决方案: 我们使用传统的分析方法,再在定义移动平均周期数时加上一些逻辑。我们将使用一些与时间相关的常数因素,在这一原则的有利的事实是,大时段的蜡烛的界限内的蜡烛走势分形的水平,但只有当这些蜡烛灯芯(阴影)。如果没有烛芯,变化可能继续而不在下一个烛形产生分形。
我们比较标准的时段和斐波那契序列的数字(接近的大小),结果,我们得到了在时段间和移动平均计算周期数之间的近似对应关系:
- 1 分钟 — 最接近的斐波那契数值 1 (分钟, 这是一个轴点);
- 5 分钟 — 最接近的斐波那契数值 5 (分钟);
- 15 分钟 – 最接近的斐波那契数值 13 (分钟);
- 1 小时 (60 分钟) — 最接近的斐波那契数值 55 (分钟);
- 4 小时 (240 分钟) — 最接近的斐波那契数值 3 (小时), 5 (小时), 233 (分钟);
- 1 天 (24 小时) — 最接近的斐波那契数值 21 (小时);
- 5 天 (交易周, 对于外汇市场是 120 小时) — 最接近的斐波那契数值 89 (小时) 和 144 (小时).
除此之外,我们还可以推荐一个选项来最小化移动平均的延迟:
- 只在每个时段中使用序列中的前几个数字: 1 (轴点), 3, 5, 8, 13;
- 以复杂的方式使用它们: 把它们按照等于时段的比例转换为更小的时段。使用最小的周期数来计算移动平均可以减少这些功能的延迟,
结果,我们得到了一系列用于不同时段的移动平均的数值集合 (以四个时段为例):
- 对于 М1: 移动平均的周期数为 5, 8, 13, 55 (或者 60 =1 小时), 233 (或者 240 = 4 小时);
- 对于 М15: 移动平均的周期数为5,8,13,55 (或者 60=4 小时?);
- 对于 Н1: 移动平均的周期数为5, 8, 13, 21 (或者 24 = 1 天), 89, 144 (或者 120 = 5 天);
- 对于 D1: 移动平均的周期数为 5, 8, 13, 21 (或者 24 = 1 交易月).
当然,这只是一系列移动平均的例子,您可以自由添加您自己的数值。然而,这种选择移动平均周期数的原则是有其存在理由的,因为很多因素,包括交易时段的起始和结束,统计时段,支付股利,等等,都有明确定义的时间段。这样,指标周期数(本例中的移动平均)的逻辑性选择可以使我们考虑到市场事件的频率,从而在一定程度上减少风险。
我们将在开发其他所描述的模块的移动平均中使用这些推荐值。
入场交易时使用挂单有关的风险
这里我们的意思是依赖于挂单(而不是市场即时订单)来设置目标水平的策略,更为常见的是,挂单使用在价格退出盘整区域的有关策略中,
在各种这样的策略中,让我们讨论一个在盘整区域的两边使用一对挂单,希望其中一个订单正确工作,而在第一个挂单被触发后立即删除第二个挂单。r the first one is triggered. 请注意,使用挂单来确定入场点也是有风险的,挂单的水平通常设置在想要的价格达到之前,例如,挂单的水平按照盘整区域幅度的百分比来定义,这就和真实的价格动态没有关系,
事实上,这就是挂单与市场单相比的主要缺点– 无法在入场时有负面因素出现时避免建立仓位. 一旦达到目标价位,市场动态变得不利于这个挂单时,还是会入场交易,而这将会造成亏损。
所以,如果您还是想在某种固定水平进行交易时,更合理的方法是在入场算法内部虚拟进行处理,而不是使用标准的挂单。只有在侦测到所需动态时,价格穿过固定水平时才进入市场。当然,这种方法比传统的挂单要复杂,因为我们需要额外的算法来控制价格穿过虚拟水平时的动态(也需要编程能力来开发这样所需的算法),但是这将可以使您避免“摸黑”交易,而这在使用传统的挂单中是无法避免的。
这种方法也有它的缺点,当价格达到所需的水平,我们使用市场单(而不是挂单)进入市场,这在经纪商平台的反应会比已经设置的挂单要慢。如果有很多订单,执行的延迟可能因为订单的优先级而增加。如果在入场时价格有较大变化,可能会出现滑点。
这样,我们需要选择是使用挂单“摸黑”进入市场的风险还是市场单执行延迟的风险。与此同时,使用虚拟水平的优点是,当价格达到了定义的水平时,如果没有所需的进场条件,系统可以自动取消进场。
我个人的观点是:因为使用挂单会增加风险,还是有必要不适用这样的订单来减少这种风险。这和其他事情一样也是公平的,只是让市场来决定价格变化的幅度。我们的唯一目的是在开发的某个阶段,使用分析方法来控制这样的变化。
入场交易之后价格变化幅度不确定性相关的风险
许多交易者的典型错误是他们过于执着于定义某个目标水平,考虑到价格变化的随机和不稳定过程,最终的幅度是个概率值。和上面所描述的挂单一样,设置固定的目标利润水平 (例如定义出场点) 是比较主观的。所以,这种方法经常会导致亏损。
市场退出算法应该具有控制慢化迹象的功能(自适应函数)或控制某个级别的固定振幅值的功能(已开启仓位的入场水平,当前最高价或最低价)。我们还将对第二个选项中加入风险限额的控制 — 同时加在仓位和全部存款中。我们将会使用最后一个简单一些的版本。
这类风险是使用下面的方法来减少的:
- 管理每个仓位的固定利润,实际上,是一个“影子”获利值。
- 管理在入场交易之后所允许的距离当前最高价(对于买入)或者最低价(对于卖出)的价格偏移。
- 管理每个仓位的预先定义的风险限额,是一个“影子”止损值。
- 管理对于全部存款的预先定义的风险限额。
在所有这些情况下,我们控制着相对于它们变化水平的某个幅度值,包括入场水平,在开启仓位中的最大值和初始存款。所以,和严格设置目标水平不同,这些水平不是固定的。
我们已经探讨了在关闭买入仓位中的例子模块,对于卖出模块,只有在交易方向上有改变。使用的不是仓位内的当前最大值 (Max_pos), 而是使用的当前最小值(Min_pos)。
在下一个部分中,我们会探讨考虑到价格变化速度的风险,它在市场价格剧变的时候特别重要。
入场交易之后价格剧变相关的风险
一种形式的局部趋势反转是价格在短时间内的大幅度上涨和下跌,在货币对中一种货币暴涨总是意味着另一种的暴跌。如果有开启的仓位,并且价格剧变的方向不利于它时就特别危险。在这种情况下,存款数量小的话就会都亏光了。
这个问题的实质
- 价格剧变的速度没有给市场参与者留下时间来足够地回应它们,
- 现代的分析方法也没有提供机制来识别快速价格崩塌所关联的动态结构。
- 如果有开启的仓位,市场参与者在价格剧变的时候完全没有办法防御它。在早期阶段很难侦测到价格的剧变,更别说对它做出回应了,因为主要的价格尖峰已经过去了,或者市场在经纪商和银行的链条中受阻了。
结果,市场参与者会承受巨大损失。例如,在2010年5月6日,道琼斯股票指数在6分钟之内下泻1000点,根据专家估计,市场蒸发了一万亿美元的市值。
更近的一个例子 (图 6) is Brexit(英国退出欧盟), 它导致 GBPUSD 在2016年6月24日这一天一下暴跌了 560 个点,在一分钟内它就下跌了473个点。
图 6. GBPUSD 在2016年6月24日的价格暴跌
对于价格剧变有三个全局因素:
- 市场本身的自然现象. 剧变不是来源于外部,而是市场动态的自然操作。除了其他之外,它可能导致价格的急剧变化(例如,因为市场参与者增加,包括交易机器人)。例如,根据媒体报告,在美国股市,在一秒钟之内就有数以千计的超快速波动。
- 分析发展水平. 用于识别这样的市场操纵的方法还不够完美. 适当的反应需要能够在几分之一分钟之内就能够进行状态分析,而市场平台中很少有以秒为单位的时段。
- 在金融市场调节中没有合适的立法。例如,没有法律机制来制止做市商人为操纵价格。
这里是一个例子,关于一个基于 MACD 的 EA 交易是怎样没有时间来回应在 USDCHF 价格上的急跌的。
图 7. 这个基于 MACD 的 EA 没有时间来回应 USDCHF 在2015年10月2日的价格崩溃。
图 7 显示了,EA开启了两个仓位 — 一个在价格崩溃之前 (箭头 1),另一个在那之后 (图 2)。它没有回应价格的崩塌是因为它就是“没有注意到”它。
所以,如果您有一个开启的仓位,就有在价格崩溃或者飙升的时候损失很大部分存款的风险。这意味着仓位的关闭算法应该有特别的保护模块。
让我们看一下代码段:
if( //减少入场交易时价格剧变相关的风险---------------------- (Bid < Open[0] && (Open[0] - Bid) >= 100*Point && (Time_cur - Time[0]) <= 20) //在价格剧变时的退出条件 (在任何区域) (参考点 - М1 当前柱的开盘价) || (Bid < O_cur_m15 && (O_cur_m15 - Bid) >= 200*Point && (Time_cur - Time_cur_m15) <= 120) //在价格剧变时的退出条件(在任何区域) (参考点 - М15 当前柱的开盘价) || ((Time_cur - OrderOpenTime()) > 60 && Close[1] < Open[1] && (Open[1] - Close[1]) >= 200*Point) //在价格剧变时的在任何区域的退出条件 (参考点 - М1 前一个柱的幅度) ||
图 8. 退出算法中的模块: 减少与入场交易后价格崩盘相关的风险
仓位开启后价格崩盘的风险是按下面的方法减少的:
- 价格反转偏移(崩盘)的限额是通过与不同时段 (在我们的例子中,是 М1 和 М15)当前柱开盘价相比较而定义的,也定义了这种崩盘的最大可接受时间段长度。
- 最大允许的价格剧变幅度是在M1上用之前完成的柱的形式来设置的(因为这是一个分钟柱,也就间接指定了剧变的时间跨度)。
这样,剧变是既在当前柱的开端进行跟踪(使用的是与前一柱的变化比较),在它的发展过程中也会跟踪的。如果出现了任何指定的条件 (通过“或”逻辑), 仓位就会被关闭 — 风险就被最小化。
在这个例子中展示了用于关闭买入仓位的模块,如需关闭仓位, 就考虑价格走向相反的方向。
更多推荐
所有评论(0)