学习如何基于分形(Fractals)设计交易系统
概述
这是我们系列中的一篇新文章,其中包含最流行的技术指标之一,即分形(Fractals)指标),我们将学习如何基于它设计交易系统。 我们将通过以下主题详细了解它:
我们将学习它是什么,它衡量什么,以及如何手工计算它,从而理解它背后的主要思想。 我们将学习如何基于指标的基本概念,并运用在简单交易策略中,令其为我们谋利。 之后,我们将基于这些策略创建一个交易系统,可在 MetaTrader 5 交易终端生成自动信号。
我们将利用 MQL5(MetaQuotes 语言 5)来编写代码,它是内置在 MetaTrader 5 交易终端中的 IDE。 如果您不知道如何下载和使用 MetaTrader 5 和 MQL5,您可以阅读在 MetaEditor 中编写 MQL5 代码,来了解更多信息。 顺便说一句,如果您想提高编码技能,我建议您尝试应用自己所学知识。
在真实账户中使用之前,您必须测试任何提到的策略,因为本文的主要意图是教学。 此外,没有什么策略能适合所有人。 如此,您必须确保它适合您的交易。
分形定义
分形指标由比尔·威廉姆斯开发。 它旨在尝试预测价格动作的潜在走势,并发出看涨或看跌信号。 看涨信号给出的潜在移动向上,而看跌信号的潜在移动向下。 我们也可以说,该指标尝试预测图表上的高点和低点。 我们可以查看在图表的价格下方和上方生成的信号箭头。
它形成两个不同的箭头,向上分形箭头,和向下分形箭头。 如果您想问形成这两个箭头的计算方法,以下是这个问题的答案:
分形指标需要在图表上出现价格行为的特定形态,形成了向上或向下两个方向。
对于向上分形,在价格行为上,我们需要以下表现:
- 至少连续五根蜡烛或柱线。
- 中间蜡烛处于最高点(第 3 根)。
- 在此高点的两侧的高点均较低。
- 第五根蜡烛收盘之后,若先前条件未变,将在蜡烛上方(第三根)形成向上的分形箭头。
对于向下的分形,在价格行为上,我们需要以下表现:
- 至少连续五根蜡烛或柱线。
- 中间蜡烛处于最低点(第 3 根)。
- 在此低点的两侧的低点均较高。
- 第五根蜡烛收盘之后,若先前条件未变,将在蜡烛上方(第三根)形成向下的分形箭头。
幸运的是,我们不需要执行前面的这些步骤,以便在图表上绘制分形指标,因为它已在 MetaTrader 5 中为我们准备好了,我们只需要从可用指标中选择分形指标。 我们可打开 MetaTrader 5 终端,并按
插入 --> 指标 --> 比尔·威廉姆斯 --> 分形
选择分形后,我们将发现以下指标参数窗口:
1- 确定箭头的颜色。
2- 确定箭头的宽度。
按 OK 后,我们会发现插入到图表中的指标与下同:
正如我们所见,我们在蜡烛上方和下方都得到箭头,指示价格行为的潜在走势。 我们在蜡烛下方得到向下箭头,表示潜在的向上走势,在蜡烛上方得到向上箭头,表示潜在的向下走势。
分形策略
我们将学习如何基于该技术指标的主要概念,在简单策略里运用此分形指标。 我们将分形指标作为一个独立的指标来用,然后我们将学习与其它技术指标搭配运用的概念,从而获得更多视野,并增强其信号。
策略一: 分形高点和低点
根据这个策略,我们需要根据分形的高点和低点的位置得到高点和低点信号。 如果指标生成了底侧箭头,则为低点信号。 如果指标生成了顶侧箭头,则为高点信号。
简而言之,
底侧箭头 --> 分形低点
顶侧箭头 --> 分形高点
策略二: 分形和均线
根据此策略,除了生成的分形指标信号外,我们还需要根据价格位置和移动平均线的价格行为方向,获取买入和卖出信号。 如果收盘价高于移动平均线,并且分形指标生成了低点箭头,则为买入信号。 如果收盘价低于移动平均线,并且分形指标生成了高点箭头,则为卖出信号。
简而言之,
收盘价格 > MA, 且生成低点箭头 --> 买入信号
收盘价格 < MA, 且生成高点箭头 --> 卖出信号
策略三: 分形和鳄鱼(Alligator)
根据此策略,我们要生成的分形指标信号,需要以及价格行为的方向,以及取决于其与鳄鱼指标的位置,获得买入和卖出信号。 如果鳄鱼嘴唇线在牙齿线和下颌线上方,牙齿线在下颌线上方,收盘价在牙齿线上方,分形指标信号是低点箭头,则为买入信号。 在另一种场景下,如果嘴唇线低于牙齿线和下颌线,牙齿线低于下颌线,收盘价低于牙齿线,并且分形信号是高点箭头,则为卖出信号。
简而言之,
嘴唇线 > 牙齿线和下颌线,牙齿线 > 下颌线,收盘价 > 牙齿线,且分形信号是低点箭头 --> 买入信号
嘴唇线 < 牙齿线和下颌线,牙齿线 < 下颌线,收盘价 < 牙齿线,且分形信号是高点箭头 --> 卖出信号
分形策略蓝图
我们将为每个提到的策略设计一个分步蓝图,来帮助我们组织我们的思路,并顺畅轻松地为它们创建交易系统。
1. 分形高点和低点
基于此策略,我们需要创建一个交易系统,该系统可通过持续检查 fracUpvalue 和 fracDownValue 来返回分形指标的高点和低点,作为图表上的注释。 如果 fracUp 大于零或其不为空值,且 fracDown 为一个空值,我们要求交易系统在图表上返回一个信号,含有以下值的注释:
- 分形高点围绕: n
在另一种情况下,如果 fracDown 大于零或它不为空值,而 fracUp 为一个空值,我们要求交易系统在图表上返回一个信号,含有以下值的注释:
- 分形低点围绕: n
以下是此策略的蓝图:
2. 分形和均线
基于此策略,我们需要创建一个交易系统,该系统可基于连续检查以下值,在图表上返回含有买入和卖出信号的注释:
- 收盘价
- EMA (指数均线) 值
- fracDown 值
- fracUp 值
如果收盘价大于 EMA 值,且 fracDown 值不等于空值,我们要求交易系统返回以下值:
- 买入
- 当前 EMA
- 分形低点值: n
在另一种情况下,如果收盘价低于 EMA 值,且 fracUp 不等于空值,我们要求交易系统返回以下值:
- 卖出
- 当前 EMA
- 分形高点值: n
下图对应此蓝图:
3. 分形和鳄鱼
基于此交易策略,我们需要创建一个系统,该系统可连续检查以下值的相对位置,来生成买入和卖出信号:
- 嘴唇值
- 牙齿值
- 下颌值
- 收盘格
- fracDown 值
- fracUp 值
如果嘴唇值大于牙齿值和下颌值,牙齿值大于牙齿值,收盘价大于牙齿值,且 fracDown 不等于空值,我们要求交易系统在图表上返回含有以下值的注释:
- 买入
- 嘴唇值 n
- 牙齿值 n
- 下颌值 n
- 分形低点围绕: n
在另一种情况下,如果嘴唇值低于牙齿值和下颌值,牙齿值低于下颌值,收盘价低于牙齿值,且 fracUp 不等于空值,我们要求交易系统返回以下值:
- 卖出
- 嘴唇值 n
- 牙齿值 n
- 下颌值 n
- 分形高点围绕: n
下图对应此蓝图:
分形交易系统
在本主题中,我们将学习如何基于上述策略逐步创建一个交易系统,从而在 MetaTrader 5 终端中执行它们。 我们将开始创建一个简单的分形系统,该系统可在图表上返回带有分形指标值的的注释,以下是操作方法。
创建 double 数据类型的上下分形数组。
double fracUpArray[]; double fracDownArray[];
调用 ArraySetAsSeries 函数设置数据排序方式。 其参数为:
- array[]: 我们将采用创建的数组 fracUpArray 和 fracDownArray。
- flag: 我们将采用 true.
ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true);
调用 "iFractals" 函数返回分形指标的句柄。 其参数为:
- symbol: 我们将采用 _Symbol 对应当前图表。
- period: 我们将采用 _Period 对应当前时间帧。
int fracDef=iFractals(_Symbol,_Period);
调用 “CopyBuffer” 函数获取数据,并存储结果。 其参数为:
- indicator_handle: 确定指标句柄,我们将采用(fracDef)。
- buffer_num: 确定指标缓冲区编号,我们将采用(UPPER_LINE 代表 fracUp),(LOWER_LINE 代表 fracDown)。
- start_pos: 确定起始位置,我们将采用(1)。
- count: 确定要复制的数量,我们将采用(3)。
- buffer[]: 定义要复制的目标数组,我们将采用(fracUpArray,fracDownArray)。
CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
获取上下分形的值。
double fracUpValue=NormalizeDouble(fracUpArray[0],5); double fracDownValue=NormalizeDouble(fracDownArray[0],5);
在 fracUpValue 和 faceDownValue 为空值的情况下返回零值。
if(fracUpValue==EMPTY_VALUE) fracUpValue = 0; if(fracDownValue==EMPTY_VALUE) fracDownValue = 0;
调用 “Comment” 函数在图表上返回带有分形值的注释。
Comment("Fractals Up Value = ",fracUpValue,"\n", "Fractals Down Value = ",fracDownValue);
以下是创建此交易系统的完整代码。
//+------------------------------------------------------------------+ //| Simple Fractals System.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating price array double fracUpArray[]; double fracDownArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); //define frac int fracDef=iFractals(_Symbol,_Period); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); //get values of fracUp and fracDown double fracUpValue=NormalizeDouble(fracUpArray[0],5); double fracDownValue=NormalizeDouble(fracDownArray[0],5); //returning zero if there is empty value of fracUp if(fracUpValue==EMPTY_VALUE) fracUpValue = 0; //returning zero if there is empty value of fracDown if(fracDownValue==EMPTY_VALUE) fracDownValue = 0; //comment on the chart Comment("Fractals Up Value = ",fracUpValue,"\n", "Fractals Down Value = ",fracDownValue); } //+------------------------------------------------------------------+
编译此代码后,我们将在导航器文件夹中找到其文件,如下所示:
将此文件拖放到图表上,我们将发现其窗口与下同:
在“允许算法交易”旁边打勾,按“确定”后,我们会发现该智能系统加载到图表上,如下所示:
正如我们在图表右上角所见,加载了智能系统,我们已准备好接收所需的信号,以下是测试示例:
正如我们在左上角看到的,我们有两个值:
- 分形向上值 = n
- 分形向下值 = 0
很明显,分形向下值为零,而我们得到分形向上值。
我们得到两个值:
- 分形向上值 = 0
- 分形向下值 = n
但是分形向上值为零,而我们得到分形向下值。
1. 分形高点和低点
以下是关于创建分形高点和低点交易系统的完整代码。
//+------------------------------------------------------------------+ //| Fractals highs and lows.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating arrays double fracUpArray[]; double fracDownArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); //define frac int fracDef = iFractals(_Symbol,_Period); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); //define values double fracUpValue = NormalizeDouble(fracUpArray[0],5); double fracDownValue = NormalizeDouble(fracDownArray[0],5); //returning zero in case of empty values if(fracUpValue ==EMPTY_VALUE) fracUpValue = 0; if(fracDownValue ==EMPTY_VALUE) fracDownValue = 0; //conditions of the strategy and comment on the chart with highs and lows //in case of high if(fracUpValue>0) { Comment("Fractals High around: ",fracUpValue); } //in case of low if(fracDownValue>0) { Comment("Fractals Low around: ",fracDownValue); } } //+------------------------------------------------------------------+
代码中的差异。
策略条件:
高点的情况,
if(fracUpValue>0) { Comment("Fractals High around: ",fracUpValue); }
低点的情况,
if(fracDownValue>0) { Comment("Fractals Low around: ",fracDownValue); }
编译此代码,并如以前所学那样将其加载到图表后,我们发现分形高点和低点的智能系统已被加载,如下所示:
现在,我们可以收到高点和低点的预期结果。 在低点的情况下:
我们可以在左上角的上一张图表中看到,分形值较低,因为分形指标形成低点。
高点的情况,
正如我们所见,我们有分形的高值,因为指标在图表上形成了一个高点。
2. 分形和均线
以下是依据分形搭配 MA 策略所创建交易系统的完整代码。
//+------------------------------------------------------------------+ //| Fractals with MA.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating arrays double fracUpArray[]; double fracDownArray[]; MqlRates priceArray[]; double maArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); ArraySetAsSeries(priceArray,true); ArraySetAsSeries(maArray,true); //define values int fracDef = iFractals(_Symbol,_Period); int Data = CopyRates(_Symbol,_Period,0,3,priceArray); int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); CopyBuffer(maDef,0,0,3,maArray); //get values double fracUpValue = NormalizeDouble(fracUpArray[0],5); double fracDownValue = NormalizeDouble(fracDownArray[0],5); double closingPrice = priceArray[0].close; double maValue = NormalizeDouble(maArray[0],6); bool isBuy = false; bool isSell = false; //conditions of the strategy and comment on the chart //in case of buy if(closingPrice > maValue && fracDownValue != EMPTY_VALUE) { Comment("Buy","\n", "Current EMA: ",maValue,"\n", "Fractals Low around: ",fracDownValue); isBuy = true; } //in case of sell if(closingPrice < maValue && fracUpValue != EMPTY_VALUE) { Comment("Sell","\n", "Current EMA: ",maValue,"\n", "Fractals High around: ",fracUpValue); isSell = true; } } //+------------------------------------------------------------------+
代码中的差异。
创建两个 “MqlRates” 数据结构的价格数组,存储有关价格、交易量、和点差的信息,并创建 “double” 数据类型的 maArray。
MqlRates priceArray[]; double maArray[];
为这两个数组设置排序。
ArraySetAsSeries(priceArray,true); ArraySetAsSeries(maArray,true);
调用 “CopyRates” 函数获取 MqlRates 的历史数据。 其参数为:
- symbol_name: 确定品种名称,我们将采用(_Symbol)。
- timeframe: 确定周期,我们将采用(_Period)。
- start_pos: 确定起始位置,我们将采用(0)。
- count: 确定要复制的数据数量,我们将采用(3)。
- rates_array[]: 确定要复制的目标数组,我们将采用(priceArray)。
调用 “iMA” 函数定义移动平均线。 其参数:
- symbol: 确定符号名称。
- period: 确定周期。
- ma_period: 确定均化周期,将为(50)。
- ma_shift: 确定水平偏移,将为(0)。
- ma_method: 确定移动平均线的类型,将是 EMA(指数移动平均线)。
- applied_price: 确定价格的类型,将以收盘价为准。
int Data = CopyRates(_Symbol,_Period,0,3,priceArray); int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
数据排序。
CopyBuffer(maDef,0,0,3,maArray);
定义收盘价和 MA 值。
double closingPrice = priceArray[0].close; double maValue = NormalizeDouble(maArray[0],6);
创建两个布尔变量 isBuy 和 isSell,从而避免同一根蜡烛的买入和卖出信号之间的冲突。
bool isBuy = false; bool isSell = false;
策略的条件。
买入信号情况:
if(closingPrice > maValue && fracDownValue != EMPTY_VALUE) { Comment("Buy","\n", "Current EMA: ",maValue,"\n", "Fractals Low around: ",fracDownValue); isBuy = true; }
卖出信号情况:
if(closingPrice < maValue && fracUpValue != EMPTY_VALUE) { Comment("Sell","\n", "Current EMA: ",maValue,"\n", "Fractals High around: ",fracUpValue); isSell = true; }
编译并执行此代码后,我们将发现智能系统已加载。
如我们所见,搭配 MA 的分形智能系统加载在图表的右上角。 我们即可接收与以下示例相同的所需信号:
买入信号情况:
我们在图表上得到一个含有以下值的注释:
- 买入
- 当前 EMA
- 分形低点围绕: n
卖出信号情况:
我们得到以下值:
- 卖出
- 当前 EMA
- 分形高点围绕: n
3. 分形和鳄鱼
以下是依据分形搭配鳄鱼策略所创建交易系统的完整代码。
//+------------------------------------------------------------------+ //| Fractals with Alligator.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating arrays double fracUpArray[]; double fracDownArray[]; MqlRates priceArray[]; double jawsArray[]; double teethArray[]; double lipsArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); ArraySetAsSeries(jawsArray,true); ArraySetAsSeries(teethArray,true); ArraySetAsSeries(lipsArray,true); //define values int fracDef=iFractals(_Symbol,_Period); int Data = CopyRates(_Symbol,_Period,0,3,priceArray); int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); CopyBuffer(alligatorDef,0,0,3,jawsArray); CopyBuffer(alligatorDef,1,0,3,teethArray); CopyBuffer(alligatorDef,2,0,3,lipsArray); //get values double fracUpValue=NormalizeDouble(fracUpArray[0],5); double fracDownValue=NormalizeDouble(fracDownArray[0],5); double closingPrice = priceArray[0].close; double jawsValue=NormalizeDouble(jawsArray[0],5); double teethValue=NormalizeDouble(teethArray[0],5); double lipsValue=NormalizeDouble(lipsArray[0],5); //creating bool variables to aviod buy ans sell signals at the same time bool isBuy = false; bool isSell = false; //conditions of the strategy and comment on the chart //in case of buy if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue && closingPrice > teethValue && fracDownValue != EMPTY_VALUE) { Comment("Buy","\n", "jawsValue = ",jawsValue,"\n", "teethValue = ",teethValue,"\n", "lipsValue = ",lipsValue,"\n", "Fractals Low around: ",fracDownValue); isBuy = true; } //in case of sell if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue && closingPrice < teethValue && fracUpValue != EMPTY_VALUE) { Comment("Sell","\n", "jawsValue = ",jawsValue,"\n", "teethValue = ",teethValue,"\n", "lipsValue = ",lipsValue,"\n", "Fractals High around: ",fracUpValue); isSell = true; } } //+------------------------------------------------------------------+
代码中的差异。
创建鳄鱼分量的三个数组。
double jawsArray[]; double teethArray[]; double lipsArray[];
调用 "ArraySetAsSeries" 函数设置数据排列顺序。
ArraySetAsSeries(jawsArray,true); ArraySetAsSeries(teethArray,true); ArraySetAsSeries(lipsArray,true);
调用 “iAlligator” 函数定义鳄鱼指标句柄: 其参数:
- symbol: 我们采用 (_Symbol) 对应当前应用的品种名称。
- period: 我们采用 (_Period) 应用当前时间帧。
- jaw_period: 确定下颌的计算周期,我们将采用(13)。
- jaw_shift: 确定下颌的水平偏移,我们将采用(8)。
- teeth_period: 确定牙齿的计算周期,我们将采用(8)。
- teeth_shift: 确定牙齿的水平偏移,我们将采用(5)。
- lips_period: 确定嘴唇的计算周期,我们将采用(5)。
- lips_shift: 确定嘴唇的水平偏移,我们将采用(3)。
- ma_method: 确定移动均线类型,我们将采用(MODE_SMA)。
- applied_price: 确定价格类型我们将采用 (PRICE_MEDIAN)。
int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
调用 “CopyBuffer” 函数定义数据,并存储结果。 其参数:
- indicator_handle: 确定指标句柄,我们将采用(allicanDef)。
- buffer_num: 确定指标缓冲区数,我们将采用(0 表示下颌)、(1 表示牙齿)和(2 表示嘴唇)。
- start_pos: 确定起始位置,我们将采用(0)。
- count: 确定要复制的数量,我们将采用(3)。
- buffer[]: 确定要复制的目标数组,我们将采用(jawsArray,toothArray,lipsArray)。
CopyBuffer(alligatorDef,0,0,3,jawsArray); CopyBuffer(alligatorDef,1,0,3,teethArray); CopyBuffer(alligatorDef,2,0,3,lipsArray);
获取鳄鱼分量的值。
double jawsValue=NormalizeDouble(jawsArray[0],5); double teethValue=NormalizeDouble(teethArray[0],5); double lipsValue=NormalizeDouble(lipsArray[0],5);
策略条件:
买入信号情况:
if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue && closingPrice > teethValue && fracDownValue != EMPTY_VALUE) { Comment("Buy","\n", "jawsValue = ",jawsValue,"\n", "teethValue = ",teethValue,"\n", "lipsValue = ",lipsValue,"\n", "Fractals Low around: ",fracDownValue); isBuy = true; }
卖出信号情况:
if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue && closingPrice < teethValue && fracUpValue != EMPTY_VALUE) { Comment("Sell","\n", "jawsValue = ",jawsValue,"\n", "teethValue = ",teethValue,"\n", "lipsValue = ",lipsValue,"\n", "Fractals High around: ",fracUpValue); isSell = true; }
编译此代码,并在所需的图表上执行后,我们将发现智能系统已加载到图表上,如下所示:
将此智能系统加载到图表之后,我们可以基于此策略获得所需的信号,就像我们在右上角的上一张图表中所见。
以下是测试生成的信号示例:
买入信号情况:
正如我们所见,我们在上一张图表上的左上角得到以下值作为信号:
- 买入
- 下颌值
- 牙齿值
- 嘴唇值
- 分形低点值
我们在前面的图表上得到以下值作为信号:
- 卖出
- 下颌值
- 牙齿值
- 嘴唇值
- 分形高点值
结束语
分形技术指标是一种实用且有效的交易工具,即可作为独立工具、亦或搭配其它技术指标,且其给出了与我们在本文中所学相同的见解。 假设您已学到了它是什么,它衡量什么,如何按照其计算方法在图表上形成它,以及如何插入在 MetaTrader 5 终端上的内置函数。 除此之外,我们还通过以下简单的交易策略学习了如何运用它:
- 分形高点和低点:检测分形指标的高点和低点,并在图表上获取信号。
- 分形搭配 MA:根据价格与其移动平均线的相对位置,生成分形信号,并获取买入和卖出信号。
- 分形搭配鳄鱼:根据价格与鳄鱼指标的相对位置,生成分形信号,并获取买入和卖出信号。
我们还学习了如何基于每个拟议的策略创建一个交易系统,利用 MQL5 为这些策略编码,并在 MetaTrader 5 图表上获得自动信号。 我希望您尝试自己应用它们,以便深入了解并获得更多有关本文主题、或任何相关主题的见解,从而自阅读本文中获得所有的益处。
我要再次确认,在真实账户上使用任何提到的策略之前,您必须对其进行测试,以确保其可盈利。 我希望您发现这篇文章对您有用,并且您能学到一些新东西,可以很好地增强您的交易结果。 如果您已发现了这一点,并且想阅读更多类似的文章,您可以阅读我在本系列中的其它文章,了解和创建基于最流行的技术指标的交易系统。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/11620