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

量化交易吧 /  量化策略 帖子:3364784 新帖:20

使用比尔威廉姆系统的交易信号模块

我是小编发表于:4 月 17 日 16:48回复(1)

简介

比尔威廉姆的交易系统在他的书中有所描述,书名为"交易新维度(New trading dimensions)",它是任何交易者都应该学习熟悉的。这个系统包含了清晰和对大多数初学者都易于理解的规则,但是,规则的简单性只是表面 - 交易系统是由许多交易模式构成的。

很多人已经尝试在此系统基础之上创建自己的EA交易,但是对于模式的形态,正确搜索以及解释工作经常被证明是困难的。为了与自动交易一样地进行模式的识别和标记,我为在MQL5向导中创建交易机器人而开发了一个交易信号模块。

我的目标是为MetaTrader 5终端的潜在用户,想独立学习交易系统的人创造最大的便利,与其他已经发布的MQL5向导使用的60个模块的区别是,它包含了一个用于配置选项的可视化界面。

所以,这些就是交易模块的主要特性:

  1. 使用图形面板调整交易系统的设置;
  2. 允许禁止所选模式的识别和标记;
  3. 允许禁止所选模式的交易;
  4. 允许优化交易系统的参数。

结构 (本文附件中的 billwilliamsts.zip 档案就是源代码):

  1. MQL5 CBillWilliamsTS 类. 包含了所有识别系统交易模式的逻辑以及使用找到的模式进行交易的逻辑,也可以使用该类(可选)在交易品种图表上标记找到的模式。此类包含于BillWilliamsTS.mqh文件中。
  2. MQL5 CBillWilliamsDialog 图形面板类。它是用于显示设置面板的,用于CBillWilliamsTS类对象的交互式管理。这个类包含于BillWilliamsPanel.mqh文件中。
  3. MQL5 SignalBillWilliams 类。在MQL5向导中用于自动创建EA交易的交易信号模块。
  4. MQL5 BillWilliamsEA EA交易, 一个基于交易类和图形面板的EA交易。它是用于根据比尔威廉姆交易系统的模式进行自动交易的,它包含于BillWilliamsEA.mq5文件中。

资料是按以下顺序提供的:

  1. 比尔威廉姆交易策略的概要描述,使用的交易模式,另外使用所开发的EA交易进行标记。
  2. 图形面板的描述。
  3. 在不同交易品种上交易的测试结果。


1. 比尔威廉姆交易系统概览

1.1. 一般信息

在他名为"交易新维度(New trading dimensions)"的书中, 比尔威廉姆声明,从金融市场的交易中获利,有必要了解市场的结构。根据作者的观点,市场有五个维度,通过逐步学习,您可以得到市场的真实景象以及80%以上的市场波动:

  1. 分形 (阶段间隙)
  2. 动量 (阶段能量)
  3. 加速/减速 (阶段动力)
  4. 区域 (阶段能量/动力的组合)
  5. 平衡线

除了五个维度之外,比尔威廉姆还介绍了为人熟知的市场条件 - 趋势和平缓。为了识别它们,系统的作者建议使用他所开发的鳄鱼指标,只在有趋势的市场区域中运行。

交易系统的元素,交易模式就是基于它们,在本文中,还会进一步使用所开发的交易信号模块特别标记出找到的信号。


1.2. 鳄鱼指标

鳄鱼指标是三个移动平均的组合(图1):

  • 鄂线, 慢速线(蓝色), 通常是一条13个周期数的移动平均线;
  • 齿线, 平均线(红色), 通常是一条8个周期数的移动平均线;
  • 唇线, 快速线 (绿色), 通常是一条5个周期数的移动平均;

图 1. 鳄鱼指标

图 1. 鳄鱼指标

根据系统,交易操作只能在这种情况下执行:鳄鱼指标线与趋势方向一致,并且自上而下的顺序是:价格,唇线,齿线,颚线。本图显示了向下趋势的起始和终止。

很明显,鳄鱼指标是一个严重延迟的指标,这与其他基于移动平均的指标是一样的。然而,移动平均的交叉不是作为进入市场的信号,而只是作为执行交易的过滤器。


1.3. 分形 - 第一市场维度的信号

分形是一个由5个烛形组成的形态,卖出分形是中间烛形为最低价的一种分形,而买入分形,与它相反,是中间烛形为最高价的一种分形。分形也被称为第一市场维度(维度 1):

图 2. 分形

图 2. 分形

对于上升趋势,如果一个分形形成于鳄鱼指标平均线(齿线)之上时,就认为是有效的,而对于下跌趋势,要求分形在平均线下方。

所开发的EA交易按照以下方式标记分形(FrB — FractalBuy — 有效买入分形, FrS — FractalSell — 有效卖出分形):

图 3. 操作买入分形

图 3. 有效的买入分形


图 4. 操作卖出分形

图 4. 有效的卖出分形

在买入分形形成的地方,在比柱的最大值高一个点的地方设置止损买入订单。在卖出分形形成的地方,在比柱的最小值低一个点的地方设置止损卖出定单。只有当鳄鱼指标改变了趋势的时候并且超过了第一个分形以后,才允许建立额外的仓位(通过分形及其他指标)。


1.4. 动量震荡指标 - AO - 第二市场维度的信号

1.4.1. 一般信息

动量震荡指标(AO)确定了市场的动量,它是34个周期数的SMA与5个周期数的SMA之间的差,SMA(简单移动平均)是根据柱的中值计算的。在图表上,该指标表现为柱形图:

图5. 动量震荡指标

图5. 动量震荡指标

在交易策略中基于此震荡指标的有6种模式,它们的描述以及通过EA的标记将在下面介绍。

1.4.2. "杯托"买入模式

图 6. "杯托"买入模式

图 6. "杯托"买入模式

该模式包含三列,第一列必须比中间列高,颜色可以是任意的,中间列必须是红色的,第三列(信号)必须是绿色的。EA交易在AO指标中显示信号时,引用方式为DiB(Dish Buy, 杯托买入)。

1.4.3. "杯托"卖出模式

图 7. "杯托"卖出模式

图 7. "杯托"卖出模式

该模式包含三列,第一列必须比中间列要低,可以使任意颜色,中间列必须是绿色,第三列(信号)必须为红色,在EA交易中,信号在AO指标中显示为DiS(Dish Sell, 杯托卖出)。

1.4.4. "零线交叉"买入模式

图 8. "零线交叉"买入模式

图 8. "零线交叉"买入模式

当柱形穿过上方的零线时生成买入信号,穿过零线的一列就是信号列,EA交易在AO指标中将信号显示为CrB(Cross Buy, 交叉买入)。

1.4.5. "零线交叉"卖出模式

图 9. "零线交叉"卖出模式

图 9. "零线交叉"卖出模式

当柱形向下穿过零线时生成信号,穿过零线的一列就是信号列,EA交易在AO指标中把该信号显示为CrS(Cross Sell, 交叉卖出)。

1.4.6. "双顶"买入模式

图 10. "双顶"买入模式

图 10. "双顶"买入模式

当柱形低于零线,并且最后一个顶的底部高于前一个顶时声称买入信号,同时,在两个有极值的柱之间没有高于零线的状况,EA交易中在AO指标中把此信号显示为2pB(2 peak Buy,双顶买入)。

1.4.7. "双顶"卖出模式

图 11. "双顶"卖出模式

图 11. "双顶"卖出模式

当柱形高于零线,并且指标的最后一个顶低于之前一个顶时生成卖出信号,同时,柱形图的两个极值点之间没有低于零线,EA交易中在AO指标中把本信号显示为2pS(2 peak Sell, 双顶卖出)。

1.4.7. 设置订单

当买入信号出现时,就设置一个比信号柱最大值高一个点的止损买入挂单,当卖出信号出现时,就设置一个比信号柱最小值低一个点的止损卖出挂单。


1.5. 加速/减速震荡指标 — AC — 第三市场维度的信号

加速/减速柱形图(AC)是动量震荡指标柱形图与5个周期数动量震荡指标移动平均之间的差。

图 12. 加速/减速震荡指标

图 12. 加速/减速震荡指标

如果连续两个柱都高于前一个最低的柱(柱形在零线以上),就形成买入信号;如果柱形低于零线,则三个连续的绿色柱(图13, B信号 - 买入)就必然形成买入信号。

如果连续两个柱都低于前一个最高的柱(柱形在零线之下),就形成卖出信号;如果柱形高域零线,连续三个红色柱(图13, S信号 - 卖出)就必然形成卖出信号。

图 13. AC 震荡指标的模式

图 13. AC 震荡指标的模式

EA交易中显示的AC信号用S(Sell, 卖出)或者B(Buy, 买入)来表示。当买入信号出现时,就设置一个比信号柱最大值高一个点的止损买入挂单,当卖出信号出现时,就设置一个比信号柱最小值低一个点的止损卖出挂单。


1.6. 区域交易 — 第四市场维度的信号

比尔威廉姆引入了交易区域的名词: 绿区和红区。如果当前的AC柱和AO柱是绿色的,价格就位于绿区。如果当前的AC柱和AO柱是红色的,价格就在红区。

为了在绿区建立买入仓位(红区中为卖出仓位),至少一行中要有里两个绿色(红色)柱,并且第二个柱的收盘价必须高于(低于)前一个柱的收盘价。然而,连续5个绿色或者红色柱,就不再建立仓位。

如果出现了第五个绿色(红色)柱,就需要比第五个柱的最小值低1个点(比最大值高1个点)的止损单。如果挂单在随后的柱上没有被执行,则必须把水平改为比第六个柱的最小值低一个点(比最大值高一个点),以此类推。

区域交易信号在AC指标中显示为ZS(Zone Sell, 区域卖出)和ZB(Zone Buy, 区域买入) (通常它们与AC指标的信号相匹配):

图 14. 区域交易信号

图 14. 区域交易信号


1.7. 根据平衡线交易 - 第五市场维度的信号

两个柱的价格都高于鳄鱼指标,就形成了"高于平衡线买入"的模式。如果第零柱的开盘价(同时也是这个柱当时的最高价)低于前一个柱的最高价(可以通过后面的几个柱找到),那么找到的最高价就是在绿区建立买入仓位的价格。如果价格低于鳄鱼线,则在绿区需要更高的入场价格。

在平衡线下卖出则相反。

平衡线的交易逻辑在这篇文章,"基于比尔威廉姆书籍的EA交易",有更详细的描述.

EA交易在设置挂单的地方标记了水平线:

图 15. 设置挂单的位置

图 15. 设置挂单的位置


1.8. 平仓

比尔威廉姆提出了集中平仓的方法:

  • 如果柱穿过了鳄鱼的齿线,当市场有趋势时,就必须平仓;
  • 止损设置于在绿(红)区极值点柱之后5个柱的位置;
  • 如果出现反方向信号,则所有持仓都要关闭。


2. 图形面板

2.1. 一般信息

图形面板的界面显示如下:

图 16. 用于管理EA交易的图形面板

图 16. 用于管理EA交易的图形面板

图形面板由四个逻辑区组成:

  • 分析器设置;
  • 鳄鱼指标设置;
  • 基于5个维度的显示设置与交易;
  • 交易设置。

在修改完设置后,要按下"Accept(接受)"按钮来保存设置。


2.2. 分析器设置

以下是分析器设置的元素:
  • Show Signals (显示信号)— 是否显示基于比尔威廉姆交易策略的模式的选项;
  • RGB — 显示找到的模式的颜色设置;
  • Bar count(柱数) — 根据指定的历史柱数进行计算并在图表上标记(如果设置为0, 则标记整个图表)。


2.3. 鳄鱼指标设置

鳄鱼指标设置就是此指标的标准设置,还有一个额外选项用于禁止此指标的显示 ('Show' 参数).


2.4. 用于根据5个维度信号的显示和交易设置

它们提供了一种方法来单独显示信号('Show' 参数), 以及单独根据信号交易 ('Trade' 参数):
  • 分形(Dim1.Fractals 线);
  • AO (Dim2.AO 线);
  • AC (Dim3.AC 线);
  • 区域交易 (Dim4.Zones 线);
  • 平衡线交易 (Dim5.Balance 线).

另外,还有一个现象用于不论当前趋势如何都显示信号 ('Show out of trend signals' 参数).


2.5. 交易设置

交易设置只有一个参数 – 手数大小(Lot size)。


2.6. 主窗口

工作图表的界面显示如下(设置面板已经最小化了):

图 17. 主窗口

图 17. 主窗口



3. 使用MQL5向导创建EA交易

3.1. 准备工作

在创建一个EA交易之前,您必须下载附件中的档案 billwilliamsts.zip 并且把它的文件复制到交易终端的对应目录中。


3.2. 创建EA交易

必须按照以下步骤来生成自动的EA交易:

在MQL编辑器中选择"新建", 然后当新窗口出现后选择 "EA交易 (生成)":

图18. MQL 向导 - 第1步

图18. 创建EA交易 - 第1步

输入您想要创建的EA交易的名称:

创建EA交易 - 第2步

图 19. 创建EA交易 — 第2步

下一步需要添加使用的信号生成器:

创建EA交易 - 第3步

图 20. 创建EA交易 — 第3步

选择 "Signal of BillWilliams trading system"(比尔威廉姆交易系统的信号)作为信号生成器:

创建EA交易 - 第4步

图 21. 创建EA交易 — 第4步

下一步是确认不要修改:

创建EA交易 - 第5步

图 22. 创建EA交易 — 第5步

选择交易信号模块并确认:

创建EA交易 - 第6步

图 23. 创建EA交易 — 第6步

如有必要,设置跟踪止损参数:

创建EA交易 - 第7步

图 24. 创建EA交易 — 第7步

然后,设置资金管理参数:

创建EA交易 - 第8步

图 25. 创建EA交易 — 第8步

所创建的EA交易文件必须要进行编辑,这样它才能对交易面板上的参数变化作出回应:

这部分的代码需要在文件中找到:

//--- 创建 CBillWilliamsSignal 过滤器
CBillWilliamsSignal *filter0=new CBillWilliamsSignal;

改为:

filter0=new CBillWilliamsSignal;

声明 filter0 全局变量:

//+------------------------------------------------------------------+
//| 全局专家对象                              |
//+------------------------------------------------------------------+
CExpert ExtExpert;
CBillWilliamsSignal *filter0;

并且增加了图表的事件处理函数:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  filter0.ChartEvent(id,lparam,dparam,sparam);
}

创建的EA交易现在可以使用了。


3.3. 局限

在向导中创建的EA交易因为使用标准库的程序开发接口,因而有所局限:

  1. 如果仓位已经建立,就无法改变仓位大小(需要提高标准库);
  2. EA交易只能执行市场订单。

为了消除这些缺点,使用交易信号类,我们已经开发了另外一个EA交易,BillWilliamsEA.mq5, 已经放到了附加的文件中。


4. 测试结果

4.1. EURUSD D1, 2015

测试图表 EURUSD D1, 2015

图 26. 测试图表 EURUSD D1, 2015

详细的结果在EUR-D1-2015.zip文件中。


4.2. EURUSD D1, 2010 - 2015

测试图表 EURUSD D1, 2010-2015

图 27. 测试图表 EURUSD D1, 2010-2015

详细的结果在 EUR-D1-2010-2015.zip 文件中。


4.3. EURJPY D1, 2010 - 2015

测试图表 EURJPY D1, 2010-2015

图 28. 测试图表 EURJPY D1, 2010-2015

详细的结果在EURJPY-D1-2010-2015.zip文件中.


结论

根据测试结果,我们可以下定结论,EA交易在有趋势的时候运行得很好,然而,在平缓市场中表现低于突破的系统(事实上,这也是比尔威廉姆自己提到的典型状况)。

为了取得何以接受的结果,必须综合设置止损单的技术,因为比尔威廉姆系统有明显的延迟,只有当趋势非常明显时才会进入市场。

全部回复

0/140

量化课程

    移动端课程