打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
《MQL4实用编程》读书笔记(6)

调用技术指标函数

指标线 是根据指标数组中的数值,以图形方式表示数据某种关系的线。

指标数组 是一维数组,其中的数据用于画出指标票线。数组成员是构成指标线的“点”的坐标。每个点的Y轴坐标,是数组成员的值;X坐标是成员在数组中的位置。

每个内建技术指标都有自己的名称。应用程序调用它们,得到数组某个索引位置的成员数据。

运行指标函数时,并不要求、也不会导致该指标在主图或副图中显示。指标的显示,也不会影响应用程序。

MT4在线交易系统的客户终端,有许多技术指标 。我们来分析几个:

平移指标 MA

平移指标 MA 表示交易对象在某一时期的平均价格。

获取平移指标,要用函数:

  1. double iMA(string symbol, int timeframe, int period, int ma_shift,   
  2.            int ma_method, int applied_price, int shift)  
参数:

symbol - 交易对象的名称。用 NULL 表示是当前交易对象;

timeframe - K线图周期。用 0 表示当前周期;

period - 指标计算的时间范围;

ma_shift - 相对于主图的指标变化;

ma_method - 计算平均值的方法;

applied_price - 计算用到的价格类型(如收盘价/开盘价、最高价/最低价);

shift - 数据在数组中的索引位置。

下面是“操盘手” callindicator.mq4 中调用技术指标函数的示例:

  1. //--------------------------------------------------------------------  
  2. // callindicator.mq4  
  3. // 程序仅用于教学  
  4. //--------------------------------------------------------------------  
  5. extern int Period_MA = 21;            // 指标计算周期  
  6. bool Fact_Up = true;                  // 以均线为准,价格是上升还是下降  
  7. bool Fact_Dn = true;                    
  8. //--------------------------------------------------------------------  
  9. int start()                           // 特别函数 start()  
  10.   {  
  11.    double MA;                         // 指标当前值(0 柱)      
  12. //--------------------------------------------------------------------  
  13.                                       // 调用指标函数  
  14.    MA=iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,0);   
  15. //--------------------------------------------------------------------  
  16.    if (Bid > MA && Fact_Up == true)   // 价格高于平均线  
  17.      {  
  18.       Fact_Dn = true;                 // 认定价格高于平均线  
  19.       Fact_Up = false;                // 认定价格不低于平均线  
  20.       Alert("Price is above MA(",Period_MA,").");// 提醒  
  21.      }  
  22. //--------------------------------------------------------------------  
  23.    if (Bid < MA && Fact_Dn == true)   // 价格低于平均线  
  24.      {  
  25.       Fact_Up = true;                 // 认定价格高于平均线  
  26.       Fact_Dn = false;                // 认定价格不高于平均线  
  27.       Alert("Price is below MA(",Period_MA,").");// 提醒   
  28.      }  
  29. //--------------------------------------------------------------------  
  30.    return;                            // 退出 start()  
  31.   }  
  32. //--------------------------------------------------------------------  

仔细分析下这个“操盘手”中的核心部分,调用的指标函数:

  1. MA=iMA(NULL,0,Period_MA,0,MODE_SMMA,PRICE_CLOSE,0);  

NULL 表示,指标的计算发生在“操盘手”所在的主图;

0 - 表示“操盘手”所在主图的当前K线周期;

Period_MA - 如果“操盘手”未赋新值,这个外部变量的预设默认值为 5;

0 - 指标数组的数据,是当前主图画线用的,没有变化;

MODE_SMA - 指标计算时用的方法:简单平移;

PRICE_CLOSE - 指标计算时用的价格是收盘价;

0 - 指标成员位置索引。


图. 105. 操盘手 callindicator.mq4 运行结果

以上计算过程和结果,是以指标数组的第一个成员(0柱)为基础的。

指标计算有时需要用到“历史数据”,涉及指标数组的其他成员。例如,“操盘手”historybars.mq4,用到第4个柱子:

  1. //--------------------------------------------------------------------  
  2. // historybars.mq4  
  3. // 程序仅用于教学  
  4. //--------------------------------------------------------------------  
  5. extern int Period_MA = 5;             // Calculated MA period  
  6. //--------------------------------------------------------------------  
  7. int start()                           // 特别函数start()  
  8.   {  
  9.    double MA_c,                       // MA指标第 0 柱的值  
  10.           MA_p,                       // MA指标第 4 柱的值  
  11.           Delta;                      // 第0柱与第4柱的值差  
  12. //--------------------------------------------------------------------  
  13.                                       // 调用技术指标  
  14.    MA_c  = iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,0);   
  15.    MA_p  = iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,4);   
  16.    Delta = (MA_c - MA_p)/Point;       // 第0柱与第4柱的值差  
  17. //--------------------------------------------------------------------  
  18.    if (Delta > 0 )                    // 当前价格大于先前  
  19.       Alert("On 4 bars MA increased by ",Delta,"pt");  // 提醒  
  20.    if (Delta < 0 )                    // 当前价格小于先前  
  21.       Alert("On 4 bars MA decreased by ",-Delta,"pt");// 提醒   
  22. //--------------------------------------------------------------------  
  23.    return;                            // 退出 start()  
  24.   }  
  25. //--------------------------------------------------------------------  


图. 106.操盘手 historybars.mq4 运行结果

技术指标不仅可以用一条线表示,还能用多条线表示。

随机震荡指标(JDK)

通常它以2条线表示。主线叫 %K,信号线叫 %D 。%D 是 %K 的移动平均线。%K 常画成实线,%D 常画成虚线。%K 大于 %D 时,买进;%K 小于 %D 时卖出。

  1. double iStochastic(string symbol, int timeframe, int %Kperiod, int %Dperiod,   
  2.                    int slowing, int method, int price_field,int mode, int shift)   
参数:

symbol 交易对象名称。值为 NULL 时,是当前主图交易对象;

timeframe - K线图周期。用 0 表示当前周期;

%Kperiod - %线的计算范围(柱子数目);

%Dperiod - 平均线 %D 的计算范围;

slowing - value of slowing.

method - 计算平均值用到的 MA 指标的方法;

price_field - 价格范围。有2个值:0 - 最低价/最高价,1 - 开盘价/收盘价;.

mode - 指标线索引。有2个值:MODE_MAIN 或 MODE_SIGNAL;

shift - 数据在数组中的索引位置。

在A点绿线上穿红线时,应当卖单平仓、买单建仓。A点至B点,是持仓时段。在B点绿线下穿红线时,应当买单平仓、卖单建仓。


图. 107. 随机震荡指标主线与信号线的关系

下面是该指标的用例callstohastic.mq4

  1. //--------------------------------------------------------------------  
  2. // callstohastic.mq4  
  3. // 程序仅用于教学  
  4. //--------------------------------------------------------------------  
  5. int start()                       // 特别函数 start()  
  6.   {  
  7.    double M_0, M_1,               // 指标主线第0柱和1柱的值  
  8.           S_0, S_1;               // 指标信号线第0柱和1柱的值  
  9. //--------------------------------------------------------------------  
  10.                                   // 调用指标函数  
  11.    M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,  0);// 0 柱  
  12.    M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,  1);// 1 柱  
  13.    S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 柱  
  14.    S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1 柱  
  15. //--------------------------------------------------------------------  
  16.                                   // 分析数据  
  17.    if( M_1 < S_1 && M_0 >= S_0 )  // 绿线上穿红线  
  18.       Alert("Crossing upwards. BUY."); // 提醒  
  19.    if( M_1 > S_1 && M_0 <= S_0 )  // 绿线下穿红线  
  20.       Alert("Crossing downwards. SELL."); // 提醒   
  21.         
  22.    if( M_1 > S_1 && M_0 > S_0 )   // 绿线在红线上方  
  23.       Alert("Continue holding Buy position.");       // 提醒   
  24.    if( M_1 < S_1 && M_0 < S_0 )   // 绿线在红线下方  
  25.       Alert("Continue holding Buy position.");       // 提醒   
  26. //--------------------------------------------------------------------  
  27.    return;                         // 退出 start()  
  28.   }  
  29. //--------------------------------------------------------------------  


图. 108. callstohastic.mq4 运行结果

在“操盘手”和脚本中使用技术指标,非常方便。在“操盘手”中使用的指标数目,没有限制。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
指标函数
MT4自带30项指标介绍
MT4平台30项指标的功能和作用(二)
mt4和mt5调用对照表
MT4编程初级手册(6):市场数据取值
[转载]MT4多周期指标写法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服