English Русский Español Deutsch 日本語 Português
绘制支撑/阻力位的方法

绘制支撑/阻力位的方法

MetaTrader 4示例 | 19 二月 2016, 10:57
4 158 0
Slobodov Gleb
Slobodov Gleb

简介

支撑/阻力位几乎是所有交易者采用的基本工具。大多数预测中都可以见到这些位置,每个交易者必须能够独立找出。

本文描述了用于检测支撑/阻力位的简单脚本的创建过程。由于面向的对象为初学者,你可以找到过程中每个阶段的详细解释。然而,尽管脚本非常简单,本文对于高级交易者和MetaTrader 4 平台用户也非常有帮助。其中包含了数据导出至表格格式、表格导入 Microsoft Excel 和绘制便于更加详细分析图表的示例。

支撑/阻力位

以下可见两个支撑/阻力位。


我们并不打算深入探究该术语的含义。在大多数描述支撑/阻力位的书籍中,可以看到如下表述,即报价范围在大部分时间内处于这两条线之间,很少会突破。


可以在下图中找到佐证。


我们可以利用这一功能。要找出支撑/阻力位,必须计算报价和价位交叉的次数。

这种计算并不很难。因此,我们在每个价格和交叉该价格的柱的数量之间建立关联。现在我们的问题是显示这些结果。在 MetaTrader 中使用指标图无法实现,因为我们并不需要时间上的价格图,而是价格上的柱形图。这就是我们需要导出数据并在其他不同程序中分析的原因。

创建脚本

首先,我们必须创建新的脚本。



为此,前往“导航器”窗口并在“脚本”区右击并选择“创建”命令。将显示新的窗口。确保要创建的程序类型为脚本,然后单击“下一步”按钮。



然后根据要求输入脚本名称和参数。单击“完成”按钮后,可以开始编写脚本。


编写脚本

脚本的源代码不超过二十行:

//+------------------------------------------------------------------+
//|                                                 ExportLevels.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
#property show_inputs
extern int MaxLimit = 1000;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   FileWrite(handle, "Cost", "Bars Num");
   double d1 = Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)];
   double d2 = High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)];
   for (double d = d1; d d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i MaxLimit; i++)
           if(d > Low[i] && d High[i])
               a+=1;   
       FileWrite(handle, d, a);
     } 
   FileClose(handle);
   return(0);
  }
//+------------------------------------------------------------------+

脚本仅包含一个函数,start()。每次调用脚本时都会运行。在下面可以看到源代码的详细解释:

#property show_inputs
extern int MaxLimit = 1000;

第一行表明,在运行脚本之前,要求用户选择外部参数。实际上,在第二行定义了一个单一参数。MaxLimit 涉及程序使用的历史柱的数量。默认为 1000,但用户可以随时更改。

   int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   FileWrite(handle, "Cost", "Bars Num");

start() 函数的前两行负责打开含有参数 FILE_CSV(意味着文件为文本表格)和 FILE_WRITE(意味着文件打开以进行编写)的“FindLevels.txt”文件。‘\t’参数表示文件中的数字将以表格分割。文件中会有两列,第一列是“成本” - 价格,第二列是“柱数” - 交叉该价格的柱的数量。使用 FileWrite() 函数,我们在“FindLevels. txt”文件中写下列的名称。

   double d1 = Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)];
   double d2 = High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)];

然后我们从零柱到具有记录中 MaxLimit 数量的柱找到最高和最低价格。iLowest() 显示了最低价格所在的柱的索引。Low[] 是该柱的最低价格值。对于 iHighest() 和 High[],遵循相同的步骤。

   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a+=1;   
       FileWrite(handle, d, a);
     }

之后,我们得到“for”循环。该循环以 0.0001 的步长从最低价 d1 运行至最高价 d2。变量‘a’是交叉价格“d”的柱的数量。第二个封闭的循环运行 MaxLimit 记录柱并检验是否交叉价格“d”。在封闭循环结束后,FileWrite 过程将价格“d”和柱的数量“a”写入文件。

   FileClose(handle);
   return(0);

在 start() 过程结束后,关闭文件并用 return() 函数结束该过程。编写脚本后,可以单击“编译”按钮进行编译,并从 MetaTrader“导航器”窗口的“脚本”区运行。


Excel 文件

调用脚本后,程序在“\experts\files\”文件夹创建“FindLevels.txt”文件。用 Excel 将其打开。为此,我们必须调用 Microsoft Excel 并单击“打开”按钮,然后选择“文本文件”文件类型,找到我们需要的文件并单击“打开”按钮。


在前两个窗口中,我们并不需要做任何更改,只需单击“下一步”按钮。


在第三个窗口,单击“高级”按钮,选择点符号(“.”)作为小数点和 '(撇号)作为千分位。然后单击“确定”和“结束”。


于是,我们在 Excel 得到两列。现在我们得绘制图表。选择 插入->“图表”。


最后需要做的是选择期货图表类型及其显示类型。


最终我们得到价格上的柱形图。


可以看到图表的最小值位于 1.2582、1.2616、1.2644、1.2705、1.2712、1.2730、1.2744、1.2850、1.2879 点。这些是支撑/阻力位。


我们可以对比 2006 年 11 月 10 日的结果和前一日期 10 月 9 日的结果。2006:

RES 4 $1.2880 八月三十一日最高值
RES 3 $1.2865 1.618 从 1.2795 跌至 1.2680 后的摆动目标
RES 2 $1.2830 斐波纳契 76.4% 从 1.2940 至 1.2485
RES 1 $1.2805 小时阻力位
当前位:1.2760
SUP 1 $1.2745 3 周的上涨趋势线
SUP 2 $1.2730 斐波纳契 61.8% 从 1.2680 至 1.2820
SUP 3 $1.2715 斐波纳契 76.4% 从 1.2680 至 1.2820
SUP 4 $1.2680 十一月三日的最低值


如上所示,图表和预测值之间有着非常好的关联。意味着我们找到的位置是真正的支撑/阻力位。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/1439

附加的文件 |
ExportLevels.mq4 (1.33 KB)
显示支撑/阻力位 显示支撑/阻力位
文章涉及在 MetaTrader 4 程序中探明和指示支撑/阻力位。 方便又通用的指标基于简单的算法。 本文同时探讨了一个有用的主题,即创建能够在一个工作空间显示不同时间范围结果的简单指标。
使用 Linux 交易 使用 Linux 交易
本文描述了如何使用指示器在线观察金融市场的状况。
按记录过滤 按记录过滤
本文描述了使用虚拟交易作为交易开仓过滤器不可或缺的一部分。
技术分析: 使不可能成为可能! 技术分析: 使不可能成为可能!
本文回答了以下问题: 虽然备受质疑,为什么不可能会变为可能? 技术分析论证。