- 显示:
- 2399
- 等级:
- 已发布:
- 2014.01.16 08:07
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
CIsNewBar 类对于 EA 的高效工作十分有必要,它可以在新柱线出现时进行计算。
通常 IsNewBar() 函数可替换类来做这些事情。但这个函数包含一个静态变量,因此我们不能同时多次调用此功能。为了能够在 EA 的代码中多次重复使用这样的功能,最容易的方法是将它变为一个类成员。有鉴于此,它已经在 IsNewBar.mqh 头文件中完成。
这个库代码应该包含在文件内容的全局部分, 使用 #include 指令:
#include <IsNewBar.mqh>
而且, CIsNewBar 类的实例变量必须在 EA 程序的 OnTick() 模块中声明:
static CIsNewBar NB1,NB2;
之后我们就可以调用 IsNewBar() 函数
bool IsNewBar(string symbol, // 当前符号 ENUM_TIMEFRAMES timeframe)// 计算图标时间帧
在 EA 代码中:
if(NB1.IsNewBar(Symbol(),PERIOD_D1)) // 价差新柱线 { /* 此处是交易信号 1 接受模块代码 */ }
此处是代码例子,在 OnTick() 函数中包含 СIsNewBar 类:
//+------------------------------------------------------------------+ //| 即使价格函数 | //+------------------------------------------------------------------+ void OnTick() { //---- double iClose1[1],iClose2[1]; //---- 声明静态变量 static bool Recount1=true,Recount2=true; static CIsNewBar NB1,NB2; //+----------------------------------------------+ //| 判断入场信号 | //+----------------------------------------------+ if(NB1.IsNewBar(Symbol(),PERIOD_D1) || Recount1) // 检查信柱线 { Recount1=false; //---- 复制新出现的数据至数组 if(CopyClose(Symbol(),PERIOD_D1,1,1,iClose1)<=0) {Recount1=true; return;} /* 此处是交易信号 1 接受模块代码 */ } if(NB2.IsNewBar(Symbol(),PERIOD_H4) || Recount2) // 检查新柱线 { Recount2=false; //---- 复制新出现数据至数组 if(CopyClose(Symbol(),PERIOD_H4,1,1,iClose2)<=0) {Recount2=true; return;} /* 此处是交易信号 2 接受模块代码 */ }
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/768

两条标准方差的直线通道 + 通过价格图表中加入未来价格插值形成的抛物线回归曲线通道。

本通道基于 ATR (平均真实范围) 技术指标数值自均线的偏离。