下载MetaTrader 5

专家系统'解说员'. 在MQL4程序中嵌入指标的实际应用

19 一月 2016, 08:54
Andrey Opeyda
0
1 028


一个有经验的交易者永远不会在没有技术指标对其决定进行确认的情况下建立仓位. 例如, 交易者已经进行了技术分析并且确定应该在某个交易品种, 比如EURUSD上建立买入仓位. 为了在正确的价格上进入市场(参见下面图1), 一个有经验的交易者会检查根据指标获得的结果, 例如, 随机振荡指标, 等待直到它给出一个确认信号. 此指标和它的信号描述如下: http://ta.mql4.com/indicators/oscillators/stochastic. 在我们的例子中, 让我们使用这里描述的一个信号.

"...当%K线上升超过%D线时买入, 而当%K线下降超过%D线时卖出."


图1 EURUSD 的价格

%K 是主线, %D (短划线)是信号线. MQL4 允许使用内建的函数来进行指标计算. 这些函数的完整列表在文章末尾提供, 并且也包含在MQL4文档中. 随机振荡指标也在其中. 为了计算主线与信号线的数值, 使用了以下的函数:

double iStochastic( string symbol, int timeframe, int %Kperiod, 
                    int %Dperiod, int slowing, int method, 
                    int price_field, int mode, int shift)

在MQL4文档中有对此函数更加详细的描述.

以下就是MQL4中随机振荡指标主线的计算:

iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, i)

这里的参数 3,5,5 是指标平均的周期数, MODE_SMA 是计算移动平均的方法, i – 进行计算的烛形数量, 参数 MODE_MAIN 是说明需要计算主线 (%K). 相应地, 以下是信号线的计算:

iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL, i)

当使用内建函数进行指标计算时, 需要指定图表的时间框架和交易品种. 在我们的实例中, 使用的是当前图表的交易品种和时间框架(参数为 NULL 和 0). 需要记住的是可以在任何交易品种和时间框架上进行计算. 可以看到, 在随机振荡指标图表上, 主线的值等于54.4444而信号线的值是46.1238:

iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, i) > 
iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL, i)

现在我们可以简单地自动进行指标计算了. 如果指标不占用价格图表的空间就更加方便了. 最好的解决方案就是从图表上删除指标图, 只是显示以上计算得到的信号. 显示信号最常用的方法就是在图表上加上一定的字符. 我们会晚些时候讨论这种方法, 现在让我们使用另外一种MQL4的特性. 它就是Comment()函数.

void Comment( ...)

它可以用来在价格图表上显示任何注释.

//STOCH
 
      double valSTOCH=0; 
      string commentSTOCH = "Stoch:         ";
      string commentSTOCHAdd = "   没有数据 ";
      if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)
>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
        commentSTOCHAdd =  "    可以买入";
               
      if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)
<iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
        commentSTOCHAdd =  "    可以卖出";   
        
      commentSTOCH =  commentSTOCH + commentSTOCHAdd;

以上的源代码把信号的信息翻译成文字, 然后在图表上显示.

Comment(commentSTOCH + "\n");

Comment 函数很方便, 因为用户可以使用换行符号按行显示注释. 使用以上的代码, 交易者就可以去掉随机振荡指标的图形了. 会有一个提醒系统来以文字的形式显示当前市场的发展.

图 2. 可以买入

现在让我们举例使用商品通道指数指标(CCI).

"...衡量商品价格与其统计平均价格之间的偏移. 指数值较高表明价格和平均值相比出现异常升高, 而较低的值表明价格过低. 虽然它的名字和商品有关, 商品通道指数是可以用于任何金融资产的, 而不仅仅是实物."

通过自动计算CCI指标, 我们将能得到另外的提示, 例如"价格过高". 使用叫做加速/减速(AC)指标, 它用于衡量当前趋势的加速/减速水平, 交易者得到的通知会更好. "...如果您发现加速/减速指标是一个早期提醒的信号, 它是有明显优势的."

同时显示多个指标信号的代码如下:

//   DeM指标
      double valDem=iDeMarker(NULL, 0, 13, 0);
      string commentDem = "DeMarker:    ";
      string commentDemAdd = "   没有数据";
     
      if (valDem < 0.30)
         commentDemAdd =  "   价格可能上涨";
      
      if (valDem > 0.70)
         commentDemAdd =   "   价格可能下跌";
      commentDem = commentDem + commentDemAdd;
 
//ATR
      double valATR=iATR(NULL, 0, 12, 0);
      string commentATR = "ATR:           ";
      commentATR=commentATR + "   趋势可能改变 " + valATR;
            
//CCI
      double valCCI=iCCI(NULL,0,12,PRICE_MEDIAN,0);
      string commentCCI = "CCI:            ";
      string commentCCIAdd = "  没有数据";
      if (valCCI > 100)
        commentCCIAdd =  "   超买 " + 
                         "(可能会有修正性下跌) ";
 
      if (valCCI < -100)
        commentCCIAdd =  "   超卖 " + 
                         "(可能会有修正性上涨) ";
        
      commentCCI =  commentCCI + commentCCIAdd + valCCI;
 
//MFI
      double valMFI=iMFI(NULL,0,14,0);
      string commentMFI = "MFI:            ";
      string commentMFIAdd = "   没有数据 ";
      if (valMFI > 80)
        commentMFIAdd =  "    也许是市场顶点 ";
 
      if (valMFI < 20)
        commentMFIAdd =  "    也许是市场低点 ";
        
        commentMFI =  commentMFI + commentMFIAdd + valMFI;

也可以根据数组进行计算. 以OnArray结尾的函数可以用于此类计算, 例如, iMAOnArray函数可以计算数组的移动平均. 有趣的是, 有一些指标有时可能给出相反的信号. 当然, 对于一个交易者, 没有信号也是一种信号. 交易并不只是根据方向下决定建仓, 也要考虑建仓时间. 交易系统"解说员"只是在当前时间框架计算信号, 而交易者也可以在程序代码中计算更大或者更小的时间框架. 应该注意的是, MQL4不是在任何方面约束交易者, 而是通过评估具有增强的功能.

MQL4中用于指标计算的内建函数列表如下:

iAC 
iAD 
iAlligator 
iADX 
iATR 
iAO 
iBearsPower 
iBands 
iBandsOnArray 
iBullsPower 
iCCI 
iCCIOnArray 
iCustom 
iDeMarker 
iEnvelopes 
iEnvelopesOnArray 
iForce 
iFractals 
iGator 
iIchimoku 
iBWMFI 
iMomentum 
iMomentumOnArray 
iMFI 
iMA 
iMAOnArray 
iOsMA 
iMACD 
iOBV 
iSAR 
iRSI 
iRSIOnArray 
iRVI 
iStdDev 
iStdDevOnArray 
iStochastic 
iWPR

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/1406

附加的文件 |
Commentator.mq4 (7.03 KB)
MQL5.community的支付系统 MQL5.community的支付系统

MQL5.community 内置服务为MQL5开发人员和普通的无编程技巧的交易者们提供了巨大了机遇。但是,所有这些功能的实现都离不开安全的内部支付系统,为买家和卖家之间的结算提供了方便的基础。在本文中,我们将展示MQL5.community支付系统的工作方式。

怎样购买一个基于MQL5或者MQL4的交易机器 怎样购买一个基于MQL5或者MQL4的交易机器

通过建立“工作”服务功能,MQL5.community 成为了一个理想的可以提供和购买编程服务的地方。这里有成千上万的交易人员和开发者每天来访问所需信息资源,也可以方便地互相帮助。对于交易人员来说,“工作”服务是轻松获得自己所需的EA智能交易程序的好机会,对于MQL5开发者来说,这也是轻松找到客户的机会。在这篇文章中,我们将领略一下此项服务的具体功能。

在外汇市场中货币篮子的运作 在外汇市场中货币篮子的运作

本文论述了如何将货币对分组 (篮子), 以及如何使用某些指标来获取它们的有关状态数据 (例如, 超买和超卖), 以及如何在交易中应用此数据。

在 MetaTrader 4 中的投资组合交易 在 MetaTrader 4 中的投资组合交易

本文揭示了投资组合交易及其在外汇市场中的应用。研究几种简单的投资组合数学模型。本文包含在 MetaTrader4 中的实际投资交易组合的实施例子: 投资组合指标和半自动化智能交易程序。交易策略的元素, 还针对它们的优点和缺陷进行了说明。