《MQL4实用编程》读书笔记(6) - 简单编程:使用技术指标
2014-04-17 03:34
218 查看
调用技术指标函数
指标线 是根据指标数组中的数值,以图形方式表示数据某种关系的线。指标数组 是一维数组,其中的数据用于画出指标票线。数组成员是构成指标线的“点”的坐标。每个点的Y轴坐标,是数组成员的值;X坐标是成员在数组中的位置。
每个内建技术指标都有自己的名称。应用程序调用它们,得到数组某个索引位置的成员数据。
![]() | 运行指标函数时,并不要求、也不会导致该指标在主图或副图中显示。指标的显示,也不会影响应用程序。 |
平移指标 MA
平移指标 MA 表示交易对象在某一时期的平均价格。
获取平移指标,要用函数:
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)参数:
symbol - 交易对象的名称。用 NULL 表示是当前交易对象;
timeframe - K线图周期。用 0 表示当前周期;
period - 指标计算的时间范围;
ma_shift - 相对于主图的指标变化;
ma_method - 计算平均值的方法;
applied_price - 计算用到的价格类型(如收盘价/开盘价、最高价/最低价);
shift - 数据在数组中的索引位置。
下面是“操盘手”
callindicator.mq4 中调用技术指标函数的示例:
//-------------------------------------------------------------------- // callindicator.mq4 // 程序仅用于教学 //-------------------------------------------------------------------- extern int Period_MA = 21; // 指标计算周期 bool Fact_Up = true; // 以均线为准,价格是上升还是下降 bool Fact_Dn = true; //-------------------------------------------------------------------- int start() // 特别函数 start() { double MA; // 指标当前值(0 柱) //-------------------------------------------------------------------- // 调用指标函数 MA=iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,0); //-------------------------------------------------------------------- if (Bid > MA && Fact_Up == true) // 价格高于平均线 { Fact_Dn = true; // 认定价格高于平均线 Fact_Up = false; // 认定价格不低于平均线 Alert("Price is above MA(",Period_MA,").");// 提醒 } //-------------------------------------------------------------------- if (Bid < MA && Fact_Dn == true) // 价格低于平均线 { Fact_Up = true; // 认定价格高于平均线 Fact_Dn = false; // 认定价格不高于平均线 Alert("Price is below MA(",Period_MA,").");// 提醒 } //-------------------------------------------------------------------- return; // 退出 start() } //--------------------------------------------------------------------
仔细分析下这个“操盘手”中的核心部分,调用的指标函数:
MA=iMA(NULL,0,Period_MA,0,MODE_SMMA,PRICE_CLOSE,0);
NULL 表示,指标的计算发生在“操盘手”所在的主图;
0 - 表示“操盘手”所在主图的当前K线周期;
Period_MA - 如果“操盘手”未赋新值,这个外部变量的预设默认值为 5;
0 - 指标数组的数据,是当前主图画线用的,没有变化;
MODE_SMA - 指标计算时用的方法:简单平移;
PRICE_CLOSE - 指标计算时用的价格是收盘价;
0 - 指标成员位置索引。
![](http://book.mql4.com/c/book/2008/04/105.png)
图. 105. 操盘手
callindicator.mq4 运行结果
以上计算过程和结果,是以指标数组的第一个成员(0柱)为基础的。
指标计算有时需要用到“历史数据”,涉及指标数组的其他成员。例如,“操盘手”historybars.mq4,用到第4个柱子:
//-------------------------------------------------------------------- // historybars.mq4 // 程序仅用于教学 //-------------------------------------------------------------------- extern int Period_MA = 5; // Calculated MA period //-------------------------------------------------------------------- int start() // 特别函数start() { double MA_c, // MA指标第 0 柱的值 MA_p, // MA指标第 4 柱的值 Delta; // 第0柱与第4柱的值差 //-------------------------------------------------------------------- // 调用技术指标 MA_c = iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,0); MA_p = iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,4); Delta = (MA_c - MA_p)/Point; // 第0柱与第4柱的值差 //-------------------------------------------------------------------- if (Delta > 0 ) // 当前价格大于先前 Alert("On 4 bars MA increased by ",Delta,"pt"); // 提醒 if (Delta < 0 ) // 当前价格小于先前 Alert("On 4 bars MA decreased by ",-Delta,"pt");// 提醒 //-------------------------------------------------------------------- return; // 退出 start() } //--------------------------------------------------------------------
![](http://book.mql4.com/c/book/2008/04/106_1.png)
图. 106.操盘手
historybars.mq4 运行结果
技术指标不仅可以用一条线表示,还能用多条线表示。
随机震荡指标(JDK)
通常它以2条线表示。主线叫 %K,信号线叫 %D 。%D 是 %K 的移动平均线。%K 常画成实线,%D 常画成虚线。%K 大于 %D 时,买进;%K 小于 %D 时卖出。
double iStochastic(string symbol, int timeframe, int %Kperiod, int %Dperiod, 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点绿线下穿红线时,应当买单平仓、卖单建仓。
![](http://book.mql4.com/c/book/i/107.png)
图. 107. 随机震荡指标主线与信号线的关系
下面是该指标的用例callstohastic.mq4:
//-------------------------------------------------------------------- // callstohastic.mq4 // 程序仅用于教学 //-------------------------------------------------------------------- int start() // 特别函数 start() { double M_0, M_1, // 指标主线第0柱和1柱的值 S_0, S_1; // 指标信号线第0柱和1柱的值 //-------------------------------------------------------------------- // 调用指标函数 M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 柱 M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);// 1 柱 S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 柱 S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1 柱 //-------------------------------------------------------------------- // 分析数据 if( M_1 < S_1 && M_0 >= S_0 ) // 绿线上穿红线 Alert("Crossing upwards. BUY."); // 提醒 if( M_1 > S_1 && M_0 <= S_0 ) // 绿线下穿红线 Alert("Crossing downwards. SELL."); // 提醒 if( M_1 > S_1 && M_0 > S_0 ) // 绿线在红线上方 Alert("Continue holding Buy position."); // 提醒 if( M_1 < S_1 && M_0 < S_0 ) // 绿线在红线下方 Alert("Continue holding Buy position."); // 提醒 //-------------------------------------------------------------------- return; // 退出 start() } //--------------------------------------------------------------------
![](http://book.mql4.com/c/book/2008/04/108.png)
图. 108. callstohastic.mq4 运行结果
在“操盘手”和脚本中使用技术指标,非常方便。在“操盘手”中使用的指标数目,没有限制。
相关文章推荐
- 《MQL4实用编程》读书笔记(8) - 简单编程:编写外建指标
- 《MQL4实用编程》读书笔记(9) - 简单编程:外建指标 ROC (价格变化速度)
- 使用W“.NET技术”CF实现SOA面向服务编程——简单的WCF开发实例
- 一起谈.NET技术,使用WCF实现SOA面向服务编程——简单的WCF开发实例
- 《MQL4实用编程》读书笔记(7) - 简单编程:简易“操盘手”
- 多线程编程核心技术读书笔记(四):Lock的使用
- TCP-IP学习笔记五:Netty使用--简单通信编程1
- 读书笔记——Java多线程编程核心技术
- Win32编程点滴3 - 简单ActiveX控件的使用
- Web端服务器推送技术原理分析及dwr框架简单的使用
- 关于使用PRO*C编程的一些简单说明和例子
- 【读书笔记】GCD-网络编程要不要使用GCD
- 一次简单的接口编程,使用socket通信
- 《Java多线程编程核心技术》(四)Lock的使用
- 在VC中使用Windows管道技术编程
- PHP实现依赖注入-使用反射机制和动态代理技术 - 简单思想(咋个办呢 zgbn)
- 从零开始学习音视频编程技术(四) FFMPEG的使用
- java编程思想随笔(四)/违例简单使用
- 【block编程第五篇】block中使用 weak–strong dance 技术避免循环引用
- python window使用paramiko简单监控数据指标数据采集