顺水外汇EA交易网MT4
标题:
缠论说:外汇交易系统指标软件编程培训|自动搜索背离和趋合 ...
[打印本页]
作者:
admin
时间:
2018-7-25 02:18
标题:
缠论说:外汇交易系统指标软件编程培训|自动搜索背离和趋合 ...
您的域名(waterforex.com)未获得授权,部分功能受到影响!
尊敬的用户:
您好!非常感谢您能安装和关注本产品,为了产品的可持续发展和升级,众大云采集已经开始收费。
向用户收费是为了给用户更可靠的保障和服务,所收取的费用主要用于产品的正常运作、研发和改进,希望各位能够理解和支持。
另外,为了答谢新老客户,众大云采集3折优惠,原价980元,现在购买
仅需290元
,给您节省了690元。
官方QQ群:23530791 客服QQ:155120699
购买域名授权请打开下面的网址:
http://www.0762home.com/zt/csdn123_news/pay_url.php?url=waterforex.com
购买域名授权之后所有的未授权提示将自动消失,图片也正常显示
,域名授权永久有效终身可用,后续的升级更新也是免费的,一次购买一辈子都能用,无后顾之忧!
提示:您目前使用的是免费试用版,可以手动删除上面的授权提示,发布这篇文章!
术语 "背离" 来自拉丁语 "divergere" ("检测差异")。
背离通常定义为指标读数和价格走势间的差异。反义词是来自拉丁语 "convergo" ("我汇集在一起") 的 "趋合"。
有更广泛的背离/趋合分类系统, 包括 "隐藏背离", "扩展背离", A, B 和 C 种类的背离等定义。
在本文中, 我们将首先处理基本术语: 背离和趋合。
之然后我们将介绍其它分类方法, 并进行比较分析, 辨别优缺点。
最后, 我们将开发自己的分类, 更加完整且没有明显的缺陷, 以及在图表上搜索和显示背离/趋合的通用指标。
背离和趋合 (概念定义)
因此, 背离是指标读数和价格走势的差异。我们还有第二个术语 — 趋合 — 具含义恰好相反。
根据这个逻辑, 如果背离是指标读数和价格走势间的差异, 那么趋合意味着协调一致。
然而, 情况并非如此, 因为一致性不等同于趋合。
为了令两个术语 — 背离和趋合 — 有一个更精确的含义, 它们需要更狭义的定义。我们来看看价格和指标图表。
如果价格上升, 而指标下降时, 我们遇到背离。如果价格下降, 而指标上升时, 我们遇到趋合 (图例. 1)。
图例. 1。价格和指标走势的差异。在左侧, 价格上升,
而指标下行 — 背离。在右侧, 价格下行, 指标上升 — 趋合
我们事实上习惯于将指标置于价格图表的下方, 因此这个定义似乎可以接受。然而, 如果我们扭转指标和价格图表的位置, 一切都会发生根本变化: 背离变为趋合, 反之亦然(图例, 2)。
图例. 2。价格和指标走势的差异。在左侧, 价格上升,
而指标下行 — 趋合。在右侧, 价格下行, 指标上升 — 背离
现在从选择交易方向的角度来看看图例, 1 和图例. 2。假设价格上升, 指标下行, 所以我们决定卖出。按照类比, 当价格下行时, 我们应该卖出, 而指标上升 (图例. 3)。
图例. 3。左侧: 卖出条件, 价格和指标背离。右侧条件
买入 (类似于卖出), 价格和指标趋合
事实证明, 在卖出的情况下, 价格和指标背离, 而在买入的情况下, 它们趋合, 尽管买卖条件相同, 但结果相反。这意味着我们可以称其中一个条件看跌, 而第二个是看涨。这意味着指标低于价格图表的位置不足以定义趋合和背离。
所有已提供的定义都与卖出方向有关, 而买入的情况则相反。
但是基于技术分析的最本质, 有一个更简单和更精确的定义版本。
如果我们将未来价格走势的推测加到背离和趋合的定义上, 它就变得简单而明晰。
背离
是指标读数和价格走势方向不一致时的价格反转信号
由于这是一个反转信号, 价格应该对于买盘先升, 后降 — 对于卖盘。为了使上述背离出现, 指标应分别下降、上升移动。在这个定义中, 卖出用作标的方向, 而指标应放在价格图表之下。展示在图例. 3 上的背离遵循这个定义。
趋合表现为相反的情况: 现在, 价格应该下降移动, 而指标上升移动。然而, 预估的价格方向并没有改变。因此, 以下趋合定义:
趋合
是指标读数和价格走势方向不一致时的趋势延续信号
由于这是一个延续信号, 价格应该对于卖盘先降, 后升 — 对于买盘。指标应分别上升、下降移动 (图例. 4)。
图例. 4。趋合信号
当然, 有争议的一点是背离是否为反转信号, 趋合是否为延续信号。但这已经是技术分析在实际应用中的可行性问题了。
图例. 5 同时展示背离和趋合信号令您掌握这一术语。
图例. 5。背离和趋合信号
判断价格和指标走向的方法
指标和价格图表线到目前为止都是直线。。但这只是一个抽象, 与实际价格走势无关。因此, 我们来研究能用来定义价格和指标方向并检测背离的方法。那么我们将在实践中看看背离分类系统。
一般来说, 我们首先需要识别图表上的价格或是顶部和底部, 然后比较它们的价值。看涨背离 (买入信号) 由底部检测: 如果一个底部高于前一个底部, 然后指标指向上升, 反之亦然。看跌背离则检测顶部 (卖出信号)。
在图表上有三种检测极值点的方法。
利用柱线。
利用自最后一个高/低价位的阈值超越。
最大/最小值要高于/低于指标中线。
利用柱线检测顶部/底部
。
我们利用一定数量的顶部/底部柱线。例如, 如果参数为 2, 则顶部柱线上的指标值应该超过左、右侧的两根柱线。有鉴于此, 底部的值应该低于相邻柱线的值 (图例. 6)。
图例. 6。用两根柱线定义顶部和底部。左向顶部定义。有箭头标记的柱线, 它成为已知的
由对勾标记示出的顶部。右向底部定义
左向和右向的顶部/底部所需的柱线数量可能有所不同: 例如, 左向 5 和右向 2 (图例. 7)。
图例. 7。顶部由左边的五根柱线和右边的两根柱线定义
利用阈值定义顶部/底部
。
当指标上升, 系统跟踪其最大值。在没有新极值的柱线上, 当前值与前一个固定的顶部/底部相比较。如果差值超过外部参数设定的阀值, 则假设指标已改变了方向, 而该根已到达最大值/最小值的柱线可看作顶部/底部 (图例. 8)。
图例. 8。利用阈值定义顶部和底部。阀值 显示 在左上角。
直至柱线 2, 柱线上升, 最大值固定在柱线 2, 而在柱线 5, 数值
已降至阀值, 此即意味着指标改变了其方向。在柱线 6, 指标
再次超越阀值并改变方向。
利用柱线定义是最方便的, 因为它不依赖于指标。与之对比, 阈值则要取决于指标类型。例如, 对于振荡范围 0-100 的 RSI, 阀值可为 5。对于 Momentum, 阀值为 0.1-1, 因为指标在 100 附近略微波动。此外, 这些波动的大小取决于时间帧。这些进一步使阈值的使用复杂化。
最大值/最小值要高于/低于指标中线
。此方法比其它方法使用频率更低。它也取决于所应用的指标, 因为并非所有指标的平均值都为 0 (例如, RSI 的平均值为 50)。但其主要缺点是过于滞后 (图例. 9)。
图例. 9。利用中线穿越定义顶部和底部。只有中线在柱线 2 上穿越之后
我们才会确认顶部 1。在柱线 4 穿越后
我们才会确认底部 3
背离分类系统
您可以在网上找到很多有关背离的文章。它们以各种方法描述了不同的术语, 以及将背离和趋合系统化的原则。您可以找到简单, 经典, 隐藏和扩展背离。有些人, 以及作者本人将其分成 A, B 和 C 类。我们不会在本文中分析主要来源。代之, 我们来通览一些已辨识的类型。
经典背离
.
这种类型已经在上面描述过并在图例. 5 中示出。
隐藏背离
.
隐藏背离与经典的不同之处在于价格变动和指标变动的方向。换言之, 隐含背离与趋合相似。
扩展背离
.
到目前为止, 我们只讨论了价格和指标的上升、下降运动。如果我们加上横向运动, 则选项数量增加。尽管我们可以通过组合三个价格走向和三个指标走向来获得多种选择, 但仅提出了一个版本的扩展背离:
横向价格走势, 指标向下移动 — 延伸看跌背离 (卖出信号)
横向价格走势, 指标上升移动 — 延伸看涨背离 (买入信号)。
种类: A, B, C。
А 类是经典的背离, 而 B 和 C 类是扩展的背离版本。
B 类:
横向价格走势, 指标向下移动 — 看跌 (卖出信号)。
横向价格走势, 指标上升移动 — 看涨 (买入信号)。
С 类:
价格上升, 指标顶部处于一个等级 — 看跌 (卖出信号)。
价格下降, 指标底部处于一个等级 — 看涨 (买入信号)。
我们可以看到, B 和 С 类是扩展背离的方法。B 类完全重复上述定义。
在浏览有关背离的材料时, 我得出的主要结论是缺乏清晰的术语, 有的版本可能覆盖不完整。因此, 我们将分析各种价格和指标走向组合的选项, 并对其进行系统化。
价格和指标走向的完整系统化
首先, 我们定义两个可能的价格和指标走向。
两个运动方向: 上升和下降。
三个运动方向: 上升, 下降, 横向。
第一种情况只提供四种可能的组合。以卖出信号为例, 我们来看看。
价升, 指标升。
价升, 指标降 (背离)。
价降, 指标升 (趋合)。
价降, 指标降。
现在我们已经处理了方向定义方法, 我们来看这些选项 (图例. 10)。
图例. 10。在两个可用方向的情况下, 价格和指标变动的所有可能组合
在三个方向的情况下, 已经有九种组合。
价升, 指标升。
价升, 指标横。
价升, 指标降 (背离)。
价横, 指标升。
价横, 指标横。
价横, 指标降。
价降, 指标升 (趋合)。
价降, 指标横。
价降, 指标降。
所有这些组合都显示在图例. 11 中。
图例. 11。
在三个可用方向的情况下, 价格和指标变动的所有可能组合
如果您创建一款可以选择任意已研究选项的指标, 之后选择您认为是正确的背离, 趋合, 隐藏或扩展背离。换言之, 我们得到一款通用的指标, 即便对于不认同系统化和本文中所做定义的那些人也是有用的。
三重背离
截至目前, 价格和指标走向是由两个点来判定: 上升、下降。我们也许要增加第三点来提升可能的价格和指标走势选项的数量。总共有九个选项:
升, 升。
升, 横。
升, 降。
横, 升。
横, 横。
横, 降。
降, 升。
降, 横。
降, 降。
在这种情况下, 更正确的说法是走势而非方向。在图例. 12 中显示了有三个顶部的走势类型。
图例. 12。基于三个顶部的各种可能走势
在图例. 13 中显示相应的基于底部的走势。
图例. 13。各种基于三个底部的可能走势
通过将 9 种类型的价格走势与 9 种指标走势组合起来, 我们可以获得 81 种变化的三重背离。
因此, 您可以通过任意数量的点确定走势。如果我们加入第四点, 我们将有 81 个变化的价格或指标走势和 6561 (81 * 81) 个可能的组合版本。当然, 还有更多可能的选项, 但好似少见。也许, 应用第四点没有任何意义, 但在本文中的指标对于定义走势类型的点数没有限制。
用于定义背离的通用指标
现在我们已经处理了这个理论, 我们来开发这个指标。
选择一款振荡器。
为了不受单一振荡器定义背离的限制, 我们将使用 本文 中描述的通用振荡器。附件: iUniOsc (通用振荡器) 和 iUniOscGUI (与图形界面相同的振荡器)。我们将使用基础版 — iUniOsc。
创建一款新指标。
我们在 MetaEditor 中创建新的 iDivergence 指标。我们会用到 OnCalculate 函数。OnTimer() 函数不是必需的。勾选 "单独窗口中的指标" 选项。我们创建三个缓冲区: 一个显示振荡器曲线, 以及两个出现背离时绘制箭头的缓冲区。在编辑器中打开一个新文件后, 更改缓冲区名称: 1 — buf_osc, 2 — buf_buy, 3 — buf_sell。应该在数组声明的地方以及OnInit() 函数中更改名称。我们还可以调整缓冲区属性: indicator_label1, indicator_label2, indicator_label3 — 将鼠标悬停在曲线或指标标签上以及数据窗口中时, 这些属性的值将显示在工具提示中。我们称呼它们为 "osc", "buy" 和 "sell"。
应用通用振荡器。
将 iUniOsc 指标的所有外部参数插入新指标。属性窗口中不需要 ColorLine1, ColorLine2 和 ColorHisto 参数。我们将它们隐藏。Type 参数含有 UniOsc/UniOscDefines.mqh 文件中描述的自定义 OscUni_RSI 类型。我们要包含这个文件。默认情况下, Type 参数值设置为 OscUni_ATR — ATR 指标。但 ATR 不依赖于价格走势的方向, 这意味着它不适合定义背离。所以, 设置 OscUni_RSI — RSI 指标 — 作为默认:
#include
input
EOscUniType Type = OscUni_RSI;
input
int
Period1 =
14
;
input
int
Period2 =
14
;
input
int
Period3 =
14
;
input
ENUM_MA_METHOD
MaMethod =
MODE_EMA
;
input
ENUM_APPLIED_PRICE
Price =
PRICE_CLOSE
;
input
ENUM_APPLIED_VOLUME
Volume
=
VOLUME_TICK
;
input
ENUM_STO_PRICE
StPrice =
STO_LOWHIGH
;
color
ColorLine1 =
clrLightSeaGreen
;
color
ColorLine2 =
clrRed
;
color
ColorHisto =
clrGray
;
将通用振荡器的句柄声明在外部变量下方:
int
h;
在 OnInit() 函数的开头下载通用振荡器:
h=
iCustom
(
Symbol
(),
Period
(),
"iUniOsc"
, Type, Period1, Period2, Period3, MaMethod, Price,
Volume
, StPrice, ColorLine1, ColorLine2, ColorHisto);
if
(h==
INVALID_HANDLE
){
Alert
(
"不能加载指标"
);
return
(
INIT_FAILED
);}
在 OnCalculate() 函数中, 将通用振荡器的数据复制到 buf_osc 缓冲区:
int
cnt;
if
(prev_calculated==
0
){ cnt=rates_total;}
else
{ cnt=rates_total-prev_calculated+
1
; }
if
(
CopyBuffer
(h,
0
,
0
,cnt,buf_osc)
欢迎光临 顺水外汇EA交易网MT4 (http://waterforex.com/)
Powered by Discuz! X3.2