下载MetaTrader 5

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

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


一个有经验的交易者永远不会在没有技术指标对其决定进行确认的情况下建立仓位. 例如, 交易者已经进行了技术分析并且确定应该在某个交易品种, 比如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)
信息的存储和阅览 信息的存储和阅览

本文介绍了信息存储和阅览的方便而高效的方法. 在这里探讨了终端标准记录文件和Comment()函数的替代方案.

EA交易, 脚本程序和指标的同步 EA交易, 脚本程序和指标的同步

本文介绍了开发捆绑程序, 即可能同时包含EA交易, 脚本程序和指标的程序集合的必要性以及通用原则.

MQL4 作为交易者的工具, 还是高级技术分析 MQL4 作为交易者的工具, 还是高级技术分析

交易首先是对可能性的计算. 有一句谚语, 懒惰是进步的引擎, 这也揭示了指标以及交易系统被开发出来的原因. 绝大多数交易新手学习的都是"成型"的交易理论. 但是, 如果够幸运的话, 还有更多的没有被发现的市场奥秘和用于分析价格走向的工具, 例如那些还没有实现的技术指标或者数学和统计学工具包. 非常感谢比尔.威廉姆斯对市场运行理论的贡献. 虽然,也许现在休息是太早了些.

怎样使用崩溃记录来调试您的动态链接库(DLL) 怎样使用崩溃记录来调试您的动态链接库(DLL)

在收到的用户崩溃记录中,有25%到30%是因为执行自定义动态链接库(DLL)中的输入函数而出的错.