您的位置:首页 > 编程语言

《MQL4实用编程》读书笔记(6) - 简单编程:使用技术指标

2014-04-17 03:34 218 查看

调用技术指标函数

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

指标数组 是一维数组,其中的数据用于画出指标票线。数组成员是构成指标线的“点”的坐标。每个点的Y轴坐标,是数组成员的值;X坐标是成员在数组中的位置。
每个内建技术指标都有自己的名称。应用程序调用它们,得到数组某个索引位置的成员数据。


运行指标函数时,并不要求、也不会导致该指标在主图或副图中显示。指标的显示,也不会影响应用程序。
MT4在线交易系统的客户终端,有许多技术指标 。我们来分析几个:

平移指标 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 - 指标成员位置索引。



图. 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()
}
//--------------------------------------------------------------------




图. 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点绿线下穿红线时,应当买单平仓、卖单建仓。



图. 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()
}
//--------------------------------------------------------------------




图. 108. callstohastic.mq4 运行结果
在“操盘手”和脚本中使用技术指标,非常方便。在“操盘手”中使用的指标数目,没有限制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: