学习如何基于 MFI 设计交易系统
概述
本文延续我们的系列文章,介绍如何基于最流行的技术指标设计简单的交易系统,从而帮助我们学习 MQL5 编码。 在这篇新文章中,我们将看到一个新的技术指标,称为资金流动性指数(MFI)。 我们将详细学习该指标,并了解如何基于其背后的主要概念来开发简单的交易系统。 因此,我们将通过以下主题介绍该指标:
如果您阅读了本系列的其它文章,您会发现,它的主题编排与前面提到的每个新策略相同,有关于指标的新信息和一些新代码,以此来尝试学习有关交易和 MQL5 编码的新概念。 我们将学习什么是 MFI 指标,它衡量什么,以及如何手工计算,从而了解其背后的主要概念。 然后,我们将看到计算 MFI 指标的示例。 当然,这些只是基础。 考虑到它背后的基本概念,我们需要学习一个更重要的主题,即如何在简单的策略中运用它。 之后,我们将为每个提到的策略设计一个分步蓝图,以便帮助我们据其设计一款交易系统。 最有趣的话题是发掘我们如何利用 MQL5 为这些策略创建一个交易系统,以便在 MetaTrader 5 交易平台中运用它们。
为了能够依据您的高胜算交易策略创建您自己的交易系统,我建议您自行完成全部编码。 不要只满足于阅读理解,而是要尽可能应用您所阅读的内容,自己编写每一行代码。 最好去搜索函数和编程的概念,从而深入了解它们,因为这将帮助您掌握更多。 不要忘记,任何成功的程序员最重要的技能之一就是除了实践之外,还知道如何有效地搜索,因为这两件事在任何学习或开发环节中都非常重要。
此外,在运用任何策略之前,您都必须对其进行测试,特别是如果其主要目的只是出于教学。 没有适合所有人的策略。 故此,对我有用的东西对您可能用处不大。
贯穿本文,我们将以 MetaQuotes(MQL5)语言在 MetaTrader 5 的内置 MetaEditor 中编写策略代码。 如果您想知道如何下载并使用 MetaEditor,请阅读上一篇文章中的在 MetaEditor 里编写 MQL5 代码主题。
免责声明:所有信息“按原样”提供仅用于教学目的,并非出于交易目的或建议。 这些信息不能保证任何结果。 如果您选择在您的任何交易账户上使用这些材料,您将自行承担风险,您是唯一的责任人。
现在,我们览阅我们的主题,直接学习一种新的工具,从而增加交易百宝箱中的工具数量。
MFI 定义
在本节中,我们将详细讲述资金流动性指数(MFI)指标,并查看该指标背后的概念,该指标是基于交易量的指标之一。 我们将了解它是什么,加上它测量的是什么,然后我们将通过分析一个示例来学习如何手工计算它。
如前一篇文章所述,交易量是交易中的一个重要因素。 充分的成交量分析令我们在交易中占据前沿,因为市场中有许多层面能影响到它。 您了解的层面越多,您就可以制定出更好的决策,因为获得的知识会增加证据的权重,从而引导您朝着特定的方向做出特定的决策。
如果我们有一项资产经历了巨量买卖,相比交易量较低的资产,显然该资产的重要性更高。 在金融市场中,交易量是一段时间内所交易股票或合约的数量。 当价格在上涨趋势中突破阻力位,或在下跌趋势中突破支撑位时,看到伴随高额成交量是最好的,因为这是走势强度的重要标志之一。 最好是,在上升趋势期间,成交量伴随走势上扬同时放大,调整期间联动下降;以及在下跌趋势期间,成交量伴随走势下挫降低,调整期间联动放大。 如果我们看到成交量伴随趋势变化,这是确认当前趋势的重要标志之一。
资金流动性指数(MFI)指标由 Gene Quong 和 Avrum Soudack 创建。 这是一个基于成交量的指标,但它在计算中采用价格和成交量来衡量买卖压力。 它在 0 和 100 之间移动。 MFI 指标的提升意味着存在买入压力,反之亦然,MFI 的减少意味着存在卖出压力。 它也许能确认趋势方向,也可以发出逆转警告。 如果您想了解更多关于趋势的信息,可以阅读前面一篇文章中的趋势定义主题。
MFI 手工计算包括多个步骤:
- 计算典型价格 (TP) = (最高价+最低价+收盘价)/3
- 计算原始资金流动性 = 交易量 * TP
- 判定 TP 的走势: 向上或向下。 如果当期 TP > 前期 TP = 向上;如果当期 TP < 前期 TP = 向下。
- 计算 1+MF = 上升期间的原始 MF
- 计算 1-MF = 下降期间的原始 MF
- 计算 14 +MF = 14 周期的 (1+MF) 求和
- 计算 14 -MF = 14 周期的 (1-MF) 求和
- 计算 14 周期 MF 比率 = 14+MF / 14-MF
- 计算 MFI = 100-100/(1+MF 比率)
如果我们有金融产品的以下数据,我们来看看应用它的计算示例:
天数 | 最高价 | 最低价 | 收盘价 | 交易量 |
---|---|---|---|---|
1 | 55 | 53 | 54 | 12000 |
2 | 56 | 54 | 55 | 10000 |
3 | 61 | 59 | 60 | 15000 |
4 | 67 | 64 | 65 | 20000 |
5 | 63 | 58 | 60 | 10000 |
6 | 58 | 52 | 55 | 5000 |
7 | 64 | 58 | 60 | 7000 |
8 | 52 | 47 | 50 | 7500 |
9 | 52 | 48 | 48 | 8000 |
10 | 50 | 48 | 49 | 5000 |
11 | 49 | 47 | 48 | 6000 |
12 | 48 | 47 | 47 | 7500 |
13 | 50 | 46 | 48 | 9000 |
14 | 52 | 45 | 47 | 10000 |
15 | 55 | 46 | 49 | 7000 |
16 | 53 | 45 | 47 | 7500 |
17 | 51 | 43 | 46 | 6000 |
18 | 50 | 42 | 44 | 5000 |
19 | 50 | 43 | 45 | 15000 |
如果我们需要根据之前的数据计算 MFI 指标,我们需执行以下步骤:
计算典型价格 (TP) = (最高价+最低价+收盘价)/3
以下是计算后得到的 TP:
计算原始资金流动性 = 交易量 * TP
判定 TP 的走势: 向上或向下
计算 1+MF = 上升期间的原始 MF
计算 1-MF = 下降期间的原始 MF
计算 14 +MF = 14 周期的 (1+MF) 求和
计算 14 -MF = 14 周期的 (1-MF) 求和
计算 14 周期 MF 比率 = 14+MF / 14-MF
计算 MFI = 100-100/(1+MF 比率)
在之前的步骤中,我们手工计算了 MFI 指标,但现在我们不需要这样做。 既然我们已经掌握了指标背后的概念,我们就可用 MetaTrader 5 中的内置指标。 您所需做到的全部就是从可用指标中选择:
启动 MetaTrader 5 -->,单击插入选项卡 --> 指标 --> 交易量 --> 资金流动性指数
选择资金流动性指数后,将显示指标参数:
1. 期望的指标周期。
2. 交易量类型 (跳价或真实).
3. MFI 线颜色。
4. 线类型。
5. MFI 线宽度。
单击“确定”后,MFI 指标将被加载到图表:
MFI 策略
在本节中,我们将学习在辨别出 MFI 指标是什么、它衡量什么、以及它背后的主要概念之后,如何运用它。 现在,我们将学习一些可以运用的简单策略。
- 策略一: MFI - OB 和 OS:
根据该策略,我们将识别超买(OB)和超卖(OS)区域。 当 MFI 接近 20 等级时,这将是一个超卖(OS)区域,当它接近 80 等级时,它将是超买(OB)区域。 超卖区域提升了潜在上涨的可能性,反之亦然,超卖区域则增加了潜在下跌的可能性。
如此,我们可以说:
MFI <= 20 --> OS
MFI >= 80 --> OB
- 策略二: MFI - 上行趋势 — 做多:
根据该策略,我们将等待 MFI 低于或等于 50,即看到买入信号被触发。 相应的等级 70 就是获利了结信号。 这一策略背后的理论依据是,大多数情况下,MFI 在上升趋势中位于 50 和 70 之间移动。
故此,
MFI <= 50 --> 做多信号
MFI >= 70 --> 获利了结信号
- 策略三: MFI - 下行趋势 — 做空:
该策略将与前一策略(MFI -上升趋势 — 做多)相反,因为我们需要看到 MFI 高于或等于等级 50,即表示触发抛售信号,当 MFI 低于或等于等级 30 时,则发出获利了结信号。 这背后的理论依据是,在大多数情况下,MFI 在下跌趋势期间位于 50 至 30 等级间移动。
故此,
MFI >=50 --> 做空信号
MFI <= 30 --> 获利了结
- 策略四: MFI - 上行趋势或背离:
根据这一策略,我们需要指标来确认当前的走势是否强劲。 我们可以通过比较当期和前期的 MFI 值,以及当期和前期的高点来看出这一点,并查看是否能确认当前走势强劲或存在背离。 那么,在上升趋势中,如果当期 MFI 大于前期 MFI,且当期高点大于前期高点,则表示当前走势强劲;但如果当期 MFI 小于前期 MFI,且当期高点高于前期高点,则表示存在看跌背离,因为该指标未能确认价格走势。 您可以调整数值的长度以便进行比较,这有助于理解概念。
故此,
当期 MFI > 前期 MFI 且当期高点 > 前期高点 --> 强势上扬
当期 MFI < 前期 MFI 且当期高点 > 前期高点 --> 看跌背离
- 策略五: MFI - 下行趋势或背离:
该策略与前一个策略(MFI- 上升趋势或背离)相反,因为我们还需要该指标来确认当前走势是否强劲,或者通过仅比较两个值来确认是否存在简单形式的背离。 那么,如果当期 MFI 小于前期,并且当期低点小于前期,这意味着当前下行走势强劲,但如果当期 MFI 大于前期那个,且当期低点低于前期那个,则意味着存在看涨背离。
简而言之,
当期 MFI < 前期 MFI 且当期低点 < 前期低点 --> 强势下行
当期 MFI > 前期 MFI 且当期低点 < 前期低点 --> 看涨背离
MFI 策略蓝图
在本章节中,我们将为每种策略设计一个蓝图,来帮助我们为每一种策略创建一款交易系统,但首先,我们要设计一个简单的交易系统蓝图,作为所有提到的交易策略的基础。 此简单系统仅在图表上注释里显示 MFI 当期值。 因此,我们需要计算机检查每次跳价时的 MFI 值,然后将该值显示在图表上的注释里。 实现这一点的蓝图如下所示:
现在,我们将为每个策略设计一个蓝图,如下所示:
- 策略一: MFI - OB 和 OS:
基于这一策略,我们需要向交易系统发出指令,以便检查每次跳价时的 MFI 值,并将该值与特定等级(20 和 80)进行比较,结果作为图表上的注释显示,并根据该比较结果决定或返回。 如果 MFI 小于或等于 20,它将返回超卖和当期 MFI 值,作为图表上的注释,并将每条注释放在单独的一行中。 如果 MFI 大于或等于 80,它将返回超买和当期 MFI 作为图表上的注释,每条注释都在单独的一行中。 如果 MFI 高于 20 且低于 80,则仅返回 MFI 当期值。 这样做的蓝图如下:
- 策略二: MFI - 上行趋势 — 做多:
根据这一策略,我们也需要交易系统检查 MFI 值、50 和 70 等级,以便决定 MFI 是否小于或等于 50,如此它必须返回做多信号。 如果 MFI 大于或等于 70,它必须返回一个获利了结信号,以下是实现这一点的蓝图:
- 策略三: MFI - 下行趋势 — 做空:
根据这一策略,我们需要交易程序根据 MFI、50 和 30 等级之间的比较向我们发出警报。 如果 MFI 大于或等于 50,则它必须返回做空信号,如果 MFI 小于或等于 30,则必须返回获利了结信号。 以下针对它的蓝图:
- 策略四: MFI - 上行趋势或背离:
根据这一策略,我们需要设计一款交易系统,能够检查每次跳价时的四个数值(当期 MFI、前期 MFI、当期高点和前期高位),并决定将生成哪个信号。
当期 MFI > 前期 MFI 且当前高点 > 前期高点 --> 强势上扬信号
当期 MFI < 前期 MFI 且当期高点 > 前期高点 --> 看跌背离
以下是实现它的蓝图:
- 策略五: MFI - 下行趋势或背离:
该策略与前一个相反。 根据该策略,我们需要设计一款交易系统,能够检查每次跳价时的四个数值(当期 MFI、前期 MFI、当期低点和前期低位),并决定将生成哪个信号。
当期 MFI < 前期 MFI 且当期低点 < 前期低点 --> 强势下行信号
当期 MFI > 前期 MFI 且当期低点 < 前期低点 --> 看涨背离
以下是实现它的蓝图:
MFI 交易系统
在这个有趣的章节中,我们将以 MQL5 编写代码,并在 MetaTrader 5 中执行,为每个提到的策略设计一款交易系统。 我们将从简单 MFI 开始,它采用 MFI 当期值在图表上生成注释。
- 为 MFI 创建一个数组,以 “double” 作为数据类型,可以表示分数值。
double MFIArray[];
- 调用 ArraySetAsSeries 函数为 MFI 数组设置排列顺序,从当前数据开始,并返回布尔结果(true 或 false),其参数为(array[] 和 flag)。
ArraySetAsSeries(MFIArray,true);
- 在为 MFIDef 创建整数型变量后,调用 iMFI 函数定义 MFI。 iMFI 函数返回 MFI 指标的句柄,其参数为(品名、周期、均化周期、和应用的交易量类型)。
int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
- 调用 CopyBuffer 函数从 MFI 指标获取数据,填充数组。
CopyBuffer(MFIDef,0,0,3,MFIArray);
- 创建双精度变量 MFI 值后,计算当期 MFI 值,调用 NormalizeDouble 返回双精度类型值。
double MFIValue=NormalizeDouble(MFIArray[0],5);
- 调用 Comment 函数在图表上创建注释。
Comment("MFI Value is: ",MFIValue);
如此,完整代码将与下同:
//+------------------------------------------------------------------+ //| Simple MFI.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() { //Create an array for MFI double MFIArray[]; //sorting the array from the current data ArraySetAsSeries(MFIArray,true); //defining MFI int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK); //filling the array CopyBuffer(MFIDef,0,0,3,MFIArray); //calculating current MFI value double MFIValue=NormalizeDouble(MFIArray[0],5); //creating a comment with MFI value Comment("MFI Value is: ",MFIValue); } //+------------------------------------------------------------------+
编译后,我们可以在导航器窗口中找到该智能系统:
双击,将出现以下窗口:
单击“确定”后,EA 将被加载到图表:
以下是来自测试生成的信号示例:
如果我们想确保生成的 MFI 值与内置的 MFI 指标相同:
- 策略一: MFI - OB 和 OS:
以下是为该策略所创建交易系统的完整代码:
//+------------------------------------------------------------------+ //| MFI - OB&OS.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() { //Create an array for MFI double MFIArray[]; //sorting the array from the current data ArraySetAsSeries(MFIArray,true); //defining MFI int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK); //filling the array CopyBuffer(MFIDef,0,0,3,MFIArray); //calculating current MFI value double MFIValue=NormalizeDouble(MFIArray[0],5); //Conditions of OS&OS //OS if(MFIValue<=20) { Comment("Oversold","\n","MFI value is : ",MFIValue); } //OB if(MFIValue>=80) { Comment("Overbought","\n","MFI value is : ",MFIValue); } //no signal if(MFIValue>20 && MFIValue<80 ) { Comment("MFI value is : ",MFIValue); } } //+------------------------------------------------------------------+
该代码的不同之处在于:
超卖和超买条件://Conditions of OS&OS //OS if(MFIValue<=20) { Comment("Oversold","\n","MFI value is : ",MFIValue); } //OB if(MFIValue>=80) { Comment("Overbought","\n","MFI value is : ",MFIValue); } //no signal if(MFIValue>20 && MFIValue<80 ) { Comment("MFI value is : ",MFIValue); }
编译此代码后,我们将在导航器窗口中找到 EA:
将其拖放到图表上以打开其窗口:
单击“确定”后,它将被加载到图表:
以下是根据该交易系统生成的信号示例。
超卖信号
超买信号
无信号:
- 策略二: MFI - 上行趋势 — 做多:
下面是如何编写此策略的代码:
//+------------------------------------------------------------------+ //| MFI - Uptrend - Buy.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() { //Create an array for MFI double MFIArray[]; //sorting the array from the current data ArraySetAsSeries(MFIArray,true); //defining MFI int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK); //filling the array CopyBuffer(MFIDef,0,0,3,MFIArray); //calculating current MFI value double MFIValue=NormalizeDouble(MFIArray[0],5); //Buy signal if(MFIValue<=50) { Comment("Buy signal"); } //TP if(MFIValue>=70) { Comment("Take profit"); } } //+------------------------------------------------------------------+
该代码的不同之处在于:
信号条件:
做多信号
//Buy signal if(MFIValue<=50) { Comment("Buy signal"); }
止盈信号
//TP if(MFIValue>=70) { Comment("Take profit"); }
编译后,EA 将出现在导航器窗口之中:
EA 窗口将与下同:
单击“确定”后,它将被加载到图表:
以下是测试生成的信号示例:
做多信号
止盈信号
- 策略三: MFI - 下行趋势 — 做空:
以下是针对该策略创建交易系统的完整代码:
//+------------------------------------------------------------------+ //| MFI - Downtrend - Short.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() { //Create an array for MFI double MFIArray[]; //sorting the array from the current data ArraySetAsSeries(MFIArray,true); //defining MFI int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK); //filling the array CopyBuffer(MFIDef,0,0,3,MFIArray); //calculating current MFI value double MFIValue=NormalizeDouble(MFIArray[0],5); //Sell signal if(MFIValue>=50) { Comment("Sell signal"); } //TP if(MFIValue<=30) { Comment("Take profit"); } } //+------------------------------------------------------------------+
该代码的不同之处在于:
信号条件:
做空信号:
//Sell signal if(MFIValue>=50) { Comment("Sell signal"); }
止盈信号
//TP if(MFIValue<=30) { Comment("Take profit"); }
编译后,我们可以从导航器中双击来执行它:
双击后,其窗口将如下所示:
单击“确定”后,它将被加载到图表:
以下是基于 MFI 生成的信号示例 - 下行趋势 - 做空策略来自测试:
做空信号:
止盈信号
- 策略四: MFI - 上行趋势或背离:
以下是 MFI 的完整代码 - 上升趋势或偏离策略来自测试:
//+------------------------------------------------------------------+ //| MFI - Uptrend or divergence.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() { //Create arrays for MFI and price double MFIArray[]; MqlRates PriceArray[]; //sorting arrays from the current data ArraySetAsSeries(MFIArray,true); int Data=CopyRates(_Symbol,_Period,0,3,PriceArray); //defining MFI int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK); //filling the MFI array CopyBuffer(MFIDef,0,0,3,MFIArray); //calculating current and previous MFI values double MFICurrentValue=NormalizeDouble(MFIArray[0],5); double MFIPrevValue=NormalizeDouble(MFIArray[1],5); //calculating current and previous highs double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5); double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); //conditions of strong move or divergence //strong up if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue) { Comment("Strong up move"); } //bearish divergence if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue) { Comment("Bearish divergence"); } } //+------------------------------------------------------------------+
此代码中的差异是:
为 MFI 和价格创建数组,其中价格数组是 MqlRates 类型,存储价格、交易量、和点差信息:
double MFIArray[]; MqlRates PriceArray[];
数组排序:
对于 MFI,调用 ArraySetAsSeries 函数,与前述相同。
对于价格,调用 CopyRates 函数获取 MqlRates 数据型的历史数据,其参数为(品名、时间帧、开始时间、截止时间、和汇率数组)。
ArraySetAsSeries(MFIArray,true); int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
计算当期和前期的 MFI 值:
double MFICurrentValue=NormalizeDouble(MFIArray[0],5); double MFIPrevValue=NormalizeDouble(MFIArray[1],5);
计算当期和前期的高点:
double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5); double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
MFI 的条件 - 上行趋势或背离策略:
强劲上扬:
if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue) { Comment("Strong up move"); }
背离:
if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue) { Comment("Bearish divergence"); }
编译此代码后,我们将在导航器中的智能系统中找到它:
采用同样方式执行它。 将其拖放或双击,打开其窗口:
然后单击“确定”将其加载到图表:
以下是基于此策略生成的含有数据窗口的信号示例:
含有当期数据窗口的强劲上扬信号:
含有前期数据窗口的强劲上扬信号:
伴有当期数据窗口的背离信号
伴有前期数据窗口的背离信号
- 策略五: MFI - 下行趋势或背离:
以下是该策略的完整代码:
//+------------------------------------------------------------------+ //| MFI - Downtrend or divergence.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() { //Create arrays for MFI and price double MFIArray[]; MqlRates PriceArray[]; //sorting arrays from the current data ArraySetAsSeries(MFIArray,true); int Data=CopyRates(_Symbol,_Period,0,3,PriceArray); //defining MFI int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK); //filling the array CopyBuffer(MFIDef,0,0,3,MFIArray); //calculating current and previous MFI values double MFICurrentValue=NormalizeDouble(MFIArray[0],5); double MFIPrevValue=NormalizeDouble(MFIArray[1],5); //calculating current and previous highs double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5); double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); //conditions of strong move or divergence //strong down if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue) { Comment("Strong down move"); } //bullish divergence if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue) { Comment("Bullish divergence"); } } //+------------------------------------------------------------------+
该代码的不同之处在于:
基于该策略生成信号的条件:
强势向下移动信号:
if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue) { Comment("Strong down move"); }
看涨背离:
if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue) { Comment("Bullish divergence"); }
编译后,导航器窗口如下所示:
执行时,其窗口如下所示:
单击“确定”后,它将被加载到图表:
以下是生成信号的示例,并伴有数据窗口,可显示基于测试值生成的信号:
伴有当期数据窗口的强劲下行信号:
伴有前期数据窗口的强劲下行信号:
伴有当期数据窗口的看涨背离:
伴有前期数据窗口的看涨背离:
结束语
我已经通过提供的新信息来涵盖了资金流动性指数(MFI)指标的主题,这些信息可以强化您的交易,因为现在我们知道了交易量是什么,为什么它在交易中非常重要,MFI 指标是什么,它测量了什么,此外还学习了如何手工计算,以及如何插入 MetaTrader 5 内置的 MFI 指标。 在学习了 MFI 指标的基础知识,并掌握了其背后的基本概念之后,我们学习了一些简单的策略:这些是超买和超卖策略,可以揭示金融产品的超买和超卖区域;MFI - 上行趋势策略,可基于 MFI 指标在上升趋势期间检测买入和获利了结信号,MFI - 下跌趋势策略,可在下跌趋势中基于 MFI 指标生成卖出和获利了结信号;MFI - 上行趋势或背离策略,可确认上行趋势中的上涨强度,或警告我们看跌背离,MFI - 下行趋势或背离,可确认当前下跌走势是否强劲,或警告看涨背离。
除此之外,我们还为每种策略开发了一个蓝图,通过设计一个分布的蓝图,帮助我们创建一款交易系统,在 MetaTrader 5 中自动生成信号。 之后,我们以 MQL5 为每个策略创建了一款交易系统,并在 MetaTrader 5 交易平台中执行,能够自动、准确地运行,无需人工干预,从而简化交易、节省时间,并高效地完成交易。
我希望您尝试应用和实践从本文中学到的知识。 我还希望这篇文章能为您提供有关交易的有用认知,无论是与当前主题,或任何相关主题有关的见解。 正如我已经说过的,在将任何策略用到真实账户之前,一定要测试它,因为本文的主要目的是为初学者提供信息,帮助他们学习如何自己编写简单的交易策略。 因此,您可能会发现这些策略需要优化或调整,或者您会发现,若将它们与其它技术工具相结合,效果会更佳。 这是一种行之有效的方式,可以将基本的技术工具结合起来,来揭示许多观点,从而能够制定出适当的决策。 在组合这些工具之后,您还可以为它们创建一款交易系统,因为我们可以找到从简单到复杂的所有类型的交易系统,这将令我们在克服主观性问题的同时,只做我们需要的事情,而这可能是实现您的交易目标的障碍。 编程是一个神奇的工具,它可以帮助我们轻松、准确、顺利地完成所需的工作。 除了众多其它优秀的功能外,它还可以避免我们每次都重复做同样的任务。
如果您觉得这篇文章很有用,并且需要阅读更多类似的文章,您可以阅读我在本系列中的其它文章,了解如何基于最流行的技术指标设计交易系统。 我希望,它们将帮助您提升交易结果。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/11037