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

量化交易吧 /  量化策略 帖子:3352800 新帖:0

MQL5 初学者:EA 交易技术指标使用指南

汇市江湖百晓生发表于:2 月 10 日 18:00回复(1)

简介

很少有“EA 交易”或指标未在代码中使用标准技术指标。无论是对交易策略的初学者还是高级开发人员,这些标准技术指标的使用都十分普遍。指标创建 的各种细节并不难理解;本文的目的即是帮助理解。我们将考虑使用内置标准技术指标的函数。

使用标准技术指标函数的基础

在调用时,每个技术指标函数创建一个使用指定的输入参数创 建的对象(指标的实例)的处理函数。处理函数的目的是使用该对象对其进行分配。这足以从指标缓冲区获取数据并将其用于自己的计算。考虑以下示例:

double      MA[];                // iMA指标的数组
int         MA_handle;           // iMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- 创建iMA指标
   MA_handle=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
   //--- 用当前iMA的值填充MA[]数组
   //--- 复制100个元素
   CopyBuffer(MA_handle,0,0,100,MA);
   //--- 和MQL4一样,设置索引
   ArraySetAsSeries(MA,true);  
   //--- 这样您就能在MA[]数组中使用数据了,比如: 
   if(MA[0]>MA[1])
      {
      //--- 一些操作
      }
   }

正如我们看到的,一切都很简单。该示例说明了如何使用指标 iMA - 交易人员最常用的指标。

指标的处理函数应在函数 OnInit()
内部创建。

  1. “将元素的索引设置为序列,这和 MQL4 中是一样的”- 这意味着什么?在我们的示例中,我们使用元素索引作为时间序列。换言之,当前柱(尚未形成)始终具有索引 [0],上一个(已经形成)具有索引 [1],等等。
  2. 为什么要设置索引?我们使用索引是出于方便的考虑,同时为了优化算法的实施。MQL5 语言允许编程人员使用便利的索引。
  3. 为什么最好在函数 OnInit() 中创建指标?当然,您可以在程序的任何位置创建指标,因为没有任何规定明确禁止这样做。然而,有一个有利的论据支持所推荐的方式:函数 OnInit() 在“EA 交易”启动时调用一次,这足以执行指标的初始化,并且在执行过程中不会更改指标的参数。在改变指标输入参数的情况下,系统有可能在其 他函数的内部再次初始化指标,例如,在函数 OnTick() 中。

编程教程

几乎所有“EA 交易”都旨在执行交易操作,不仅是在模拟帐户上,同时也在真实帐户上。如果您想在其交易时实现无人值守,您应能预测到交易的所有可能 结果。即便是自动交易系统的资深开发人员也常常犯下恼人的错误。而犯错的代价可能极其高昂!

例如,这里有一个关于 2008 自动交易锦标赛的故事。参赛者之一的“EA 交易”应将他的存款增加到某个水平然后休眠。操作如期进行。接下来发生的事情让见证这一幕的作者和其他所有人员大吃一惊,& ldquo;EA 交易”被系统唤醒后开始再次交易,失去了赚得的资金。

当然,您肯定不希望在系统失控时经历同样的错误。因为,在 使用标准技术指标时我们需要考虑可能出现的问题:

  1. 对象指针在初始化代码块中创建。但如果创建不成功呢?在此情况下,我们将获得一个空的引用。因此,我们使用已由 MQL5 开发人员提供的可能性来检查其有效性。如果指针未创建,函数返回的处理函数值将为标准常量 INVALID_HANDLE = -1。
  2. 当我们从指标获取数据时,我们将其值复制到指标的缓冲区并用于计算。那如果失败了呢?如果复制失败,交易系统可能会生成错误的交 易信号。在这种情况下,MQL5 开发人员提供可能性以及时检查复制元素的数量。复制元素的数量在发生错误的情况下将会等于 -1。

现在我们考虑一下要如何编码:

//---- 指标对应的数组
double      MA[];                // iMA指标的数组
//---- 指标对应的句柄
int         MA_handle;           // iMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- 创建iMA指标
   MA_handle=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
  //--- 报告在对象创建时出现错误
   if(MA_handle<0)
      {
      Print("iMA创建失败: MA_handle=",INVALID_HANDLE);
      Print("运行时错误 = ",GetLastError());
      //--- 强制程序终止
      return(-1);
      }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
    //--- 使用当前iMA的值填充MA[]数组
    //--- 应该向数组中写入100个元素
    //--- 如果出现错误,我们终止程序的执行
   if(CopyBuffer(MA_handle,0,0,100,MA)<=0) return;
   //--- 设置MA[]数组的索引方向为时间序列方向
   ArraySetAsSeries(MA,true);
   //--- 这样你就可以使用MA[]数组中的数据了
   if(MA[0]>MA[1])
      {
      //--- 一些操作
      }
  }

注意,对代码的一点点的改动就可以提高其安全性和可靠性。 然而,这还不够。将指标的值复制到数组这一过程现已得到改进,有必要使用如下编写的函数:

//+------------------------------------------------------------------------------+
//| 此函数复制指标中的数据, 其中的元素                                                |
//| 会根据输入参数asSeries来进行索引                                                 |
//+------------------------------------------------------------------------------+
bool CopyBufferAsSeries(
                        int handle,      // 指标句柄
                        int bufer,       // 缓冲区索引
                        int start,       // 起点索引
                        int number,      // 需要复制的元素数量
                        bool asSeries,   // 如果是true, 元素会按时间序列方式进行索引
                        double &M[]      // 目标数组
                        )
  {
//--- 使用当前指标值填充M数组
   if(CopyBuffer(handle,bufer,start,number,M)<=0) return(false);
//--- 元素会以如下方式进行索引:
//--- 如果asSeries=true, 会按照时间序列方式进行索引
//--- 如果asSeries=false, 会按照默认方式进行索引
   ArraySetAsSeries(M,asSeries);
//---
   return(true);
  }

函数 CopyBufferAsSeries 位于本文随附的文件 GetIndicatorBuffers.mqh 中。要使用该函数,必须在代码中添加指令 include。 需要将其复制到文件夹 ..\ MQL5\Include\ 中。调用指标 iMA 并将数据从指标的缓冲区复制到相应数组的最终代码如下所示:

#include <GetIndicatorBuffers.mqh>
//---- arrays for indicators
double      MA[];                // iMA指标的数组
//---- handles for indicators
int         MA_handle;           // iMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iMA指标
   MA_handle=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//--- 如果对象创建失败报告错误
   if(MA_handle<0)
     {
      Print("iMA创建失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用当前iMA的值填充MA数组
//--- 把MA[]数组索引方向设为和时间序列相同
//--- 如果出错则返回
   if(!CopyBufferAsSeries(MA_handle,0,0,100,true,MA)) return;
//--- here you can use the data of MA[] as you wish, for example: 
   if(MA[0]>MA[1])
     {
      //--- 一些操作
     }
  }

多缓冲区指标功能

我们将具有 3 个指标缓冲区的指标 iAlligator 作为示例:

  • 0 缓冲区 - GATORJAW_LINE
  • 1 缓冲区 - GATORTEETH_LINE
  • 2 缓冲区 - GATORLIPS_LINE

要通过一次调用从这些指标的缓冲区接收数据,我们将使用以下函数,这些函数可在本文随附的文件中找到:

//+------------------------------------------------------------------------------+
//| 此函数复制Alligator指标(鳄鱼指标)的值到三个数组中:                                 |
//| Jaws[], Teeth[], Lips[] (元素索引为时间序列).                                   |
//+------------------------------------------------------------------------------+
bool GetAlligatorBuffers(int Alligator_handle,
                         int start,
                         int number,
                         double &Jaws[],
                         double &Teeth[],
                         double &Lips[],
                         bool asSeries=true  // (元素索引为时间序列)
                         )
  {
//--- 使用当前GATORJAW_LINE的值填充Jaws数组
   if(!CopyBufferAsSeries(Alligator_handle,0,start,number,asSeries,Jaws)) return(false);
//--- 使用当前GATORTEETH_LINE的值填充Teeth数组
   if(!CopyBufferAsSeries(Alligator_handle,1,start,number,asSeries,Teeth)) return(false);
//--- 使用当前GATORLIPS_LINE的值填充Lips数组
   if(!CopyBufferAsSeries(Alligator_handle,2,start,number,asSeries,Lips)) return(false);
//---
   return(true);
  }

可以如下使用:

#include <GetIndicatorBuffers.mqh>
//---- 指标缓冲区
double      Jaws[];   // iAlligator的GATORJAWS_LINE的数组
double      Teeth[];  // iAlligator的GATORTEETH_LINE的数组
double      Lips[];   // iAlligator的GATORLIPS_LINE 的数组
//---- 指标句柄
int         Alligator_handle;           // iAlligator指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iAlligator指标
   Alligator_handle=iAlligator(NULL,0,13,8,8,5,5,3,MODE_EMA,PRICE_MEDIAN);
//--- 如果对象创建出错则报告
   if(Alligator_handle<0)
     {
      Print("iAlligator指标创建失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引为时间序列
//--- 使用Alligator指标数值填充数组
//--- 如果出错则返回
   if(!GetAlligatorBuffers(Alligator_handle,0,100,Jaws,Teeth,Lips,true)) return;
  }

所以,我们已将要点列出,现在我们可以考虑所有标准指标的示例。

标准指标使用示例


iAC

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      AC[];                // iAC指标对应的数组
//---- 指标句柄
int         AC_handle;           // iAC指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iAC指标
   AC_handle=iAC(NULL,0);
//--- 如果对象创建出错则报告
   if(AC_handle<0)
     {
      Print("iAC指标创建失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用当前iAC的值填充AC[]数组
//--- 设置AC[] 索引方向为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(AC_handle,0,0,100,true,AC)) return;
  }


iAD

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      AD[];                // iAD指标对应的数组
//---- 指标句柄
int         AD_handle;           // iAD指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iAD指标
   AD_handle=iAD(NULL,0,VOLUME_TICK);
//--- 如果对象创建出错则报告
   if(AD_handle<0)
     {
      Print("iAD指标创建失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iAD指标当前值填充AD[]数组
//--- 设置AD[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(AD_handle,0,0,100,true,AD)) return;
  }


iADX

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Main[];    // iADX中MAIN_LINE对应的数组
double      PlusDI[];  // iADX中PLUSDI_LINE对应的数组
double      MinusDI[]; // iADX中MINUSDI_LINE对应的数组
//---- 指标句柄
int         ADX_handle;           // iADX指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iADX指标
   ADX_handle=iADX(NULL,0,14);
//--- 如果对象创建出错则报告
   if(ADX_handle<0)
     {
      Print("iADX指标创建失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引为时间序列
//--- 使用指标缓冲区的当前值填充数组
//--- 如果出错则返回 
   if(!GetADXBuffers(ADX_handle,0,100,Main,PlusDI,MinusDI,true)) return;
  }


iADXWilder

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Main[];    // iADXWilder指标中的MAIN_LINE对应的数组
double      PlusDI[];  // iADXWilder指标中的PLUSDI_LINE对应的数组
double      MinusDI[]; // iADXWilder指标中的MINUSDI_LINE对应的数组
//---- handles for indicators
int         ADXWilder_handle;           // iADXWilder指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iADXWilder指标
   ADXWilder_handle=iADXWilder(NULL,0,14);
//--- 如果对象创建出错则报告
   if(ADXWilder_handle<0)
     {
      Print("创建 iADXWilder 指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用所有指标对应缓冲区的当前值填充数组
//--- 如果出错则返回
   if(!GetADXWilderBuffers(ADXWilder_handle,0,100,Main,PlusDI,MinusDI,true)) return;
  }


iAlligator

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Jaws[];   // iAlligator指标中GATORJAW_LINE对应的数组
double      Teeth[];  // iAlligator指标中GATORTEETH_LINE对应的数组
double      Lips[];   // iAlligator指标中GATORLIPS_LINE对应的数组
//---- 指标句柄
int         Alligator_handle;           // iAlligator指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iAlligator指标
   Alligator_handle=iAlligator(NULL,0,13,8,8,5,5,3,MODE_EMA,PRICE_MEDIAN);
//--- 如果对象创建出错则报告
   if(Alligator_handle<0)
     {
      Print("创建iAlligator指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用所有指标缓冲区当前值填充到数组中
//--- 如果出错则返回
   if(!GetAlligatorBuffers(Alligator_handle,0,100,Jaws,Teeth,Lips,true)) return;
  }


iAMA

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      AMA[];                // iAMA指标对应的数组
//---- 指标句柄
int         AMA_handle;           // iAMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iAMA指标
   AMA_handle=iAMA(NULL,0,21,5,8,0,PRICE_CLOSE);
//--- 如果对象创建出错则报告
   if(AMA_handle<0)
     {
      Print("创建iAMA指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iAMA指标缓冲区的当前值填充AMA[]数组
//--- 设置AMA[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(AMA_handle,0,0,100,true,AMA)) return;
  }


iAO

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      AO[];                // iAO指标对应的数组
//---- handles for indicators
int         AO_handle;           // iAO指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iAO指标
   AO_handle=iAO(NULL,0);
//--- 如果对象创建出错则报告
   if(AO_handle<0)
     {
      Print("iAO指标创建失败: 运行时错误 =",GetLastError());
      //--- 强制程序退出
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iAO指标当前值填充AO[]数组
//--- 设置AO[]数组索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(AO_handle,0,0,100,true,AO)) return;
  }


iATR

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      ATR[];                // iATR指标对应的数组
//---- 指标句柄
int         ATR_handle;           // iATR指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iATR指标
   ATR_handle=iATR(NULL,0,14);
//--- 如果创建对象出错则报告
   if(ATR_handle<0)
     {
      Print("iATR指标创建失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iATR指标当前值填充ATR[]数组
//--- 设置ATR[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(ATR_handle,0,0,100,true,ATR)) return;
  }


iBearsPower

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      BearsPower[];                // iBearsPower指标对应的数组
//---- 指标句柄
int         BearsPower_handle;           // iBearsPower指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iBearsPower指标
   BearsPower_handle=iBearsPower(NULL,0,14);
//--- 如果创建对象出错则报告
   if(BearsPower_handle<0)
     {
      Print("创建iBearsPower指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iBearsPower指标的当前值填充BearsPower[]数组
//--- 设置BearsPower[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(BearsPower_handle,0,0,100,true,BearsPower)) return;
  }


iBands

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Base[];     // iBands中BASE_LINE对应的数组
double      Upper[];    // iBands中UPPER_BAND对应的数组
double      Lower[];    // iBands中LOWER_BAND对应的数组
//---- 指标句柄
int         Bands_handle;           // iBands指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iBands指标
   Bands_handle=iBands(NULL,0,144,0,2,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(Bands_handle<0)
     {
      Print("创建iBands指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用所有指标缓冲区的当前值填充数组
//--- 如果出错则返回
   if(!GetBandsBuffers(Bands_handle,0,100,Base,Upper,Lower,true)) return;
  }


iBullsPower

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      BullsPower[];                // iBullsPower指标对应的数组
//---- 指标句柄
int         BullsPower_handle;           // iBullsPower指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iBullsPower指标
   BullsPower_handle=iBullsPower(NULL,0,14);
//--- 如果创建对象出错则报告
   if(BullsPower_handle<0)
     {
      Print("创建iBullsPower 失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iBullsPower指标的当前值填充BullsPower[]数组.
//--- 设置BullsPower[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(BullsPower_handle,0,0,100,true,BullsPower)) return;
  }


iCCI

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      CCI[];                // iCCI指标对应的数组
//---- 指标句柄
int         CCI_handle;           // iCCI指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iCCI指标
   CCI_handle=iCCI(NULL,0,14,PRICE_CLOSE);
//--- 如果对象创建出错则报告
   if(CCI_handle<0)
     {
      Print("创建iCCI指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iCCI指标的当前值填充CCI[]数组
//--- 设置CCI[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(CCI_handle,0,0,100,true,CCI)) return;
  }


iChaikin

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Chaikin[];                // iChaikin指标对应的数组
//---- 指标句柄
int         Chaikin_handle;           // iChaikin指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iChaikin指标
   Chaikin_handle=iChaikin(NULL,0,8,14,MODE_EMA,VOLUME_TICK);
//--- 如果创建对象出错则报告
   if(Chaikin_handle<0)
     {
      Print("创建iChaikin指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iChaikin指标的当前值填充 Chaikin[]数组
//--- 设置Chaikin[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(Chaikin_handle,0,0,100,true,Chaikin)) return;
  }


iDEMA

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      DEMA[];                // iDEMA指标对应的数组
//---- 指标句柄
int         DEMA_handle;           // iDEMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iDEMA指标
   DEMA_handle=iDEMA(NULL,0,8,0,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(DEMA_handle<0)
     {
      Print("创建iDEMA指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iDEMA指标的当前值填充 DEMA[]数组
//--- 设置DEMA[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(DEMA_handle,0,0,100,true,DEMA)) return;
  }


iDeMarker

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      DeMarker[];                // iDeMarker指标对应的数组
//---- 指标句柄
int         DeMarker_handle;           // iDeMarker指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iDeMarker指标
   DeMarker_handle=iDeMarker(NULL,0,21);
//--- 如果创建对象错误则报告
   if(DeMarker_handle<0)
     {
      Print("创建iDeMarker指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iDeMarker指标的当前值填充DeMarker[]数组.
//--- 设置DeMarker数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(DeMarker_handle,0,0,100,true,DeMarker)) return;
  }


iEnvelopes

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Upper[];    // iEnvelopes指标中UPPER_LINE对应的数组
double      Lower[];    // iEnvelopes指标中LOWER_LINE对应的数组
//---- 指标句柄
int         Envelopes_handle;           // iEnvelopes指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iEnvelopes指标
   Envelopes_handle=iEnvelopes(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,0.1);
//--- 如果对象创建出错则报告
   if(Envelopes_handle<0)
     {
      Print("创建iEnvelopes指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 如果出错则返回
//--- 使用iEnvelopes指标的当前值填充数组
   if(!GetEnvelopesBuffers(Envelopes_handle,0,100,Upper,Lower,true)) return;
  }


iForce

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Force[];                // iForce指标对应的数组
//---- 指标句柄
int         Force_handle;           // iForce指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iForce指标
   Force_handle=iForce(NULL,0,21,MODE_SMA,VOLUME_TICK);
//--- 如果对象创建出错则报告
   if(Force_handle<0)
     {
      Print("创建iForce指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iForce指标的当前值填充Force[]数组
//--- 设置Force[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(Force_handle,0,0,100,true,Force)) return;
  }


iFractals

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Upper[];    // iFractals中UPPER_LINE对应的数组
double      Lower[];    // iFractals中LOWER_LINE对应的数组
//---- 指标句柄
int         Fractals_handle;           // iFractals指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iFractals指标
   Fractals_handle=iFractals(NULL,0);
//--- 如果对象创建出错则报告
   if(Fractals_handle<0)
     {
      Print("创建iFractals指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用当前指标缓冲区的值填充数组
//--- 如果出错则返回
   if(!GetFractalsBuffers(Fractals_handle,0,100,Upper,Lower,true)) return;
  }


iFrAMA

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      FrAMA[];                // iFrAMA对应的数组
//---- 指标句柄
int         FrAMA_handle;           // iFrAMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iFrAMA指标
   FrAMA_handle=iFrAMA(NULL,0,21,0,MODE_SMA);
//--- 如果对象创建出错则报告
   if(FrAMA_handle<0)
     {
      Print("创建iFrAMA指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iFrAMA指标的当前值填充FrAMA[]数组
//--- 设置FrAMA[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(FrAMA_handle,0,0,100,true,FrAMA)) return;
  }


iGator

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Upper[];    // iGator中UPPER_LINE对应的数组
double      Lower[];    // iGator中LOWER_LINE对应的数组
//---- 指标句柄
int         Gator_handle;           // iGator指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iGator指标
   Gator_handle=iGator(NULL,0,13,8,8,5,5,3,MODE_EMA,PRICE_MEDIAN);
//--- 如果创建对象出错则报告
   if(Gator_handle<0)
     {
      Print("创建iGator指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用指标缓冲区的当前值填充数组
//--- 如果出错则返回
   if(!GetGatorBuffers(Gator_handle,0,100,Upper,Lower,true)) return;
  }


iIchimoku

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double   Tenkansen[];   // iIchimoku中TENKANSEN_LINE对应的数组
double   Kijunsen[];    // iIchimoku中KIJUNSEN_LINE对应的数组
double   SenkouspanA[]; // iIchimoku中SENKOUSPANA_LINE对应的数组
double   SenkouspanB[]; // iIchimoku中SENKOUSPANB_LINE对应的数组
double   Chinkouspan[]; // iIchimoku中CHINKOUSPAN_LINE对应的数组
//---- 指标的句柄
int      Ichimoku_handle;            // iIchimoku指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iIchimoku指标
   Ichimoku_handle=iIchimoku(NULL,0,9,26,52);
//--- 如果对象创建出错则报告
   if(Ichimoku_handle<0)
     {
      Print("创建iIchimoku指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用指标缓冲区的当前值填充数组
//--- 如果出错则返回
   if(!GetIchimokuBuffers(Ichimoku_handle,0,100,
      Tenkansen,
      Kijunsen,
      SenkouspanA,
      SenkouspanB,
      Chinkouspan,
      true)) return;
  }


iBWMFI

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      BWMFI[];                // iBWMFI指标对应的数组
//---- 指标句柄
int         BWMFI_handle;           // iBWMFI指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iBWMFI指标
   BWMFI_handle=iBWMFI(NULL,0,VOLUME_TICK);
//--- 如果创建对象出错则报告
   if(BWMFI_handle<0)
     {
      Print("创建iBWMFI指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iBWMFI指标的当前值填充BWMFI[]数组
//--- 设置BWMFI[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(BWMFI_handle,0,0,100,true,BWMFI)) return;
  }


iMomentum

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Momentum[];                // iMomentum指标对应的数组
//---- 指标句柄
int         Momentum_handle;           // iMomentum指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iMomentum指标
   Momentum_handle=iMomentum(NULL,0,14,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(Momentum_handle<0)
     {
      Print("创建iMomentum指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iMomentum指标的当前值填充Momentum数组
//--- 设置Momentum[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(Momentum_handle,0,0,100,true,Momentum)) return;
  }

iMFI

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      MFI[];                // iMFI指标对应的数组
//---- 指标句柄
int         MFI_handle;           // iMFI指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iMFI指标
   MFI_handle=iMFI(NULL,0,14,VOLUME_TICK);
//--- 如果创建对象出错则报告
   if(MFI_handle<0)
     {
      Print("创建iMFI指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iMFI指标的当前值填充MFI[]数组
//--- 设置MFI[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(MFI_handle,0,0,100,true,MFI)) return;
  }


iMA

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      MA[];                // iMA指标对应的数组
//---- 指标句柄
int         MA_handle;           // iMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iMA指标
   MA_handle=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(MA_handle<0)
     {
      Print("创建iMA指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iMA指标的当前值填充MA[]数组
//--- 设置MA[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(MA_handle,0,0,100,true,MA)) return;
  }


iOsMA

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      OsMA[];                // iOsMA指标对应的数组
//---- 指标句柄
int         OsMA_handle;           // iOsMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iOsMA指标
   OsMA_handle=iOsMA(NULL,0,8,21,14,PRICE_MEDIAN);
//--- 如果创建对象出错则报告
   if(OsMA_handle<0)
     {
      Print("创建iOsMA指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iOsMA指标的当前值填充OsMA[]数组
//--- 设置OsMA[] 数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(OsMA_handle,0,0,100,true,OsMA)) return;
  }


iMACD

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Main[];    // iMACD指标中MAIN_LINE对应的数组
double      Signal[];  //iMACD指标中SIGNAL_LINE对应的数组
//---- 指标句柄
int         MACD_handle;           // iMACD指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iMACD指标
   MACD_handle=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(MACD_handle<0)
     {
      Print("创建iMACD指标: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用指标缓冲区的当前值填充数组
//--- 如果出错则返回
   if(!GetMACDBuffers(MACD_handle,0,100,Main,Signal,true)) return;
  }

iOBV

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      OBV[];                // iOBV指标对应的数组
//---- 指标句柄
int         OBV_handle;           // iOBV指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iOBV指标
   OBV_handle=iOBV(NULL,0,VOLUME_TICK);
//--- 如果创建对象出错则报告
   if(OBV_handle<0)
     {
      Print("创建iOBV指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iOBV指标的当前值填充OBV[]数组
//--- 设置OBV[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(OBV_handle,0,0,100,true,OBV)) return;
  }

iSAR

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      SAR[];                // iSAR指标对应的数组
//---- 指标句柄
int         SAR_handle;           // iSAR指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iSAR指标
   SAR_handle=iSAR(NULL,0,0.02,0.2);
//--- 如果创建对象出错则报告
   if(SAR_handle<0)
     {
      Print("创建iSAR指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iSAR指标的当前值填充SAR[]数组
//--- 设置SAR[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(SAR_handle,0,0,100,true,SAR)) return;
  }

iRSI

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      RSI[];                // iRSI指标对应的数组
//---- 指标句柄
int         RSI_handle;           // iRSI指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iRSI指标
   RSI_handle=iRSI(NULL,0,21,PRICE_CLOSE);
//--- 如果创建对象失败则报告
   if(RSI_handle<0)
     {
      Print("创建iRSI指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iRSI指标的当前值填充RSI[]数组
//--- 设置RSI[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(RSI_handle,0,0,100,true,RSI)) return;
  }

iRVI

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Main[];    // iRVI指标中MAIN_LINE对应的数组
double      Signal[];  // iRVI指标中SIGNAL_LINE对应的数组
//---- 指标句柄
int         RVI_handle;           // iRVI指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iRVI指标
   RVI_handle=iRVI(NULL,0,14);
//--- 如果对象创建出错则报告
   if(RVI_handle<0)
     {
      Print("创建iRVI指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组索引方式为时间序列
//--- 使用指标缓冲区当前值填充数组
//--- 如果出错则返回
   if(!GetRVIBuffers(RVI_handle,0,100,Main,Signal,true)) return;
  }

iStdDev

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      StdDev[];                // iStdDev对应的数组
//---- 指标句柄
int         StdDev_handle;           // iStdDev指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iStdDev指标
   StdDev_handle=iStdDev(NULL,0,20,0,MODE_SMA,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(StdDev_handle<0)
     {
      Print("创建iStdDev指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iStdDev指标的当前值填充StdDev[]数组
//--- 设置StdDev[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(StdDev_handle,0,0,100,true,StdDev)) return;
  }


iStochastic

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Main[];    // iStochastic指标中MAIN_LINE对应的数组
double      Signal[];  // iStochastic指标中SIGNAL_LINE对应的数组
//---- 指标句柄
int         Stochastic_handle;           // iStochastic指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iStochastic指标
   Stochastic_handle=iStochastic(NULL,0,5,3,3,MODE_SMA,STO_LOWHIGH);
//--- 如果对象创建出错则报告
   if(Stochastic_handle<0)
     {
      Print("创建iStochastic指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 设置数组的索引方式为时间序列
//--- 使用指标缓冲区的当前值填充到数组中
//--- 如果出错则返回
   if(!GetStochasticBuffers(Stochastic_handle,0,100,Main,Signal,true)) return;
  }


iTEMA

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      TEMA[];                // iTEMA指标对应的数组
//---- 指标句柄
int         TEMA_handle;           // iTEMA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iTEMA指标
   TEMA_handle=iTEMA(NULL,0,20,0,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(TEMA_handle<0)
     {
      Print("创建iTEMA指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iTEMA指标的当前值填充TEMA[]数组
//--- 设置TEMA[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(TEMA_handle,0,0,100,true,TEMA)) return;
  }


iTriX

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      TriX[];                // iTriX指标对应的数组
//---- 指标句柄
int         TriX_handle;           // iTriX指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iTriX指标
   TriX_handle=iTriX(NULL,0,20,PRICE_CLOSE);
//--- 如果创建对象出错则报告
   if(TriX_handle<0)
     {
      Print("创建iTriX指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iTriX指标的当前值填充TriX[]数组
//--- 设置TriX[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(TriX_handle,0,0,100,true,TriX)) return;
  }


iWPR

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      WPR[];                // iWPR指标对应的数组
//---- 指标句柄
int         WPR_handle;           // iWPR指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iWPR指标
   WPR_handle=iWPR(NULL,0,14);
//--- 如果创建对象出错则报告
   if(WPR_handle<0)
     {
      Print("创建iWPR 指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iWPR指标的当前值填充WPR[]数组
//--- 设置WPR[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(WPR_handle,0,0,100,true,WPR)) return;
  }


iVIDyA

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      VIDyA[];                // iVIDyA指标对应的数组
//---- handles for indicators
int         VIDyA_handle;           // iVIDyA指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iVIDyA指标
   VIDyA_handle=iVIDyA(NULL,0,14,21,0,PRICE_MEDIAN);
//--- 如果创建对象出错则报告
   if(VIDyA_handle<0)
     {
      Print("创建iVIDyA指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iVlDyA指标的当前值填充VIDyA[]数组
//--- 设置VIDyA[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(VIDyA_handle,0,0,100,true,VIDyA)) return;
  }


iVolumes

#include <GetIndicatorBuffers.mqh>
//---- 指标数组
double      Volumes[];                // iVolumes指标对应的数组
//---- 指标句柄
int         Volumes_handle;           // iVolumes指标的句柄
//+------------------------------------------------------------------+
//| EA初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建iVolumes指标
   Volumes_handle=iVolumes(NULL,0,VOLUME_TICK);
//--- 如果创建对象出错则报告
   if(Volumes_handle<0)
     {
      Print("创建iVolumes 指标失败: 运行时错误 =",GetLastError());
      //--- 强制程序终止
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| EA订单函数                                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 使用iVolumes指标的当前值填充Volumes[]数组
//--- 设置Volumes[]数组的索引方式为时间序列
//--- 如果出错则返回
   if(!CopyBufferAsSeries(Volumes_handle,0,0,100,true,Volumes)) return;
  }

总结

  1. 在 MQL5 的“EA 交易”中使用标准技术指标极为容易,和之前的版本并无二致。
  2. 仅在“EA 交易”中使用安全编程方法 - 分析和排除所有可能的错误。错误的代价极高,事关您的资金!

全部回复

0/140

达人推荐

量化课程

    移动端课程