- 精华
- 0
- 在线时间
- 8 小时
- UID
- 6021
- 积分
- 47
- 帖子
- 14
- 阅读权限
- 10
- 注册时间
- 2009-11-30
- 最后登录
- 2010-2-22
- 精华
- 0
- UID
- 6021
- 积分
- 47
- 帖子
- 14
- 主题
- 3
- 阅读权限
- 10
- 注册时间
- 2009-11-30
- 最后登录
- 2010-2-22
|
//+------------------------------------------------------------------+
//| BrainTrend2.mq4 |
//| www.forex-tsd.com |
//| Nick Bilak |
//+------------------------------------------------------------------+
#property copyright "BrainTrading Inc."
#property link "www.forex-tsd.com"
#property indicator_chart_window //在主图上显示
#property indicator_buffers 2 //定义了两个数组
#property indicator_color1 Blue //定义了两个颜色 第一个是Blue,这个对数组1
#property indicator_color2 Red //定义了两个颜色 第二个是Red,这个对数组2
//---- input parameters
extern int NumBars=500; //定义读取k线的个数。这里是算500根
//---- buffers
double ExtMapBuffer1[];//定义数组
double ExtMapBuffer2[];//定义数组
double spread;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW); //画箭头函数
SetIndexBuffer(0,ExtMapBuffer1);//箭头条件
SetIndexArrow(0,233); //箭头样式
SetIndexStyle(1,DRAW_ARROW);//画箭头函数
SetIndexBuffer(1,ExtMapBuffer2);//箭头条件
SetIndexArrow(1,234);//箭头样式
spread=MarketInfo(Symbol(),MODE_SPREAD)*Point; //由于这个指标是用于外汇的,所以有个点差的概念,也可以不用理会这个参数
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int counted_bars=IndicatorCounted(); //IndicatorCounted() 是系统函数,用于返回已经计算过的K线,不过,这个指标好像没有用到这个东西
//----
//下面是定义了一堆参数
int artp=7;
double dartp=7.0;
double cecf=0.7;
int satb=0;
int Shift=0;
bool river=True;
double Emaxtra=0;
double widcha=0;
double TR=0;
double Values[100];
int glava=0;
double ATR=0;
int J=0;
double Weight=0;
double r=0;
double r1=0;
int p=0;
int Curr=0;
double Range1=0;
double s=2;
double f=10;
double val1=0;
double val2=0;
double h11=0;
double h12=0;
double h13=0;
double const=0;
double orig=0;
double st=0;
double h2=0;
double h1=0;
double h10=0;
double sxs=0;
double sms=0;
double temp=0;
double h5=0;
double r1s=0;
double r2s=0;
double r3s=0;
double r4s=0;
double pt=0;
double pts=0;
double r2=0;
double r3=0;
double r4=0;
double tt=0;
if( Bars < NumBars) satb = Bars; else satb = NumBars; //其中 Bars 是系统函数,用于返回K线个数。 如果图上的k线个数小于规定的,就按图上的走,如果大于,则按给定的计算
if( Close[satb - 2] > Close[satb - 1]) river = True; else river = False;// Close 是系统函数,用于返回k线的收盘价格。True是真假值。 If else 是语法。下同
Emaxtra = Close[satb - 2];//系统关键字: Close
Shift=satb-3;//
while(Shift>=0) //while 循环
{//while开始
TR = spread+ High[Shift] - Low[Shift]; //系统关键字High Low
if( MathAbs(spread+ High[Shift] - Close[Shift + 1]) > TR ) TR = MathAbs(spread+ High[Shift] - Close[Shift + 1]);// 系统函数MathAbs() 功能求绝对值 High,Close 是系统关键字 下同
if( MathAbs(Low[Shift] - Close[Shift + 1]) > TR) TR = MathAbs(Low[Shift] - Close[Shift + 1]);
if (Shift == satb - 3 ) //if条件
{
for(J=0;Shift<=artp-1;J++)
{
Values[J] = TR;
}
}//if结束
Values[glava] = TR;
ATR = 0;
Weight = artp;
Curr = glava;
for (J = 0;J<=artp - 1;J++) //for关键字
{
ATR += Values[Curr] * Weight;
Weight -= 1.0;
Curr--;
if (Curr == -1) Curr = artp - 1;//if
}
ATR = 2.0 * ATR / (dartp * (dartp + 1.0));
glava++;
if (glava == artp) glava = 0;//if
widcha = cecf * ATR;
if (river && Low[Shift] < Emaxtra - widcha) //Low 关键字
{
river = False;
Emaxtra = spread+ High[Shift];//High 关键字
}
if (!river && spread+ High[Shift] > Emaxtra + widcha) //High 关键字
{
river = True;
Emaxtra = Low[Shift]; //low 关键字
}
if (river && Low[Shift] > Emaxtra) //low 关键字
{
Emaxtra = Low[Shift];//low 关键字
}
if (!river && spread+ High[Shift] < Emaxtra ) //High 关键字
{
Emaxtra = spread+ High[Shift]; //High 关键字
}
Range1 = iATR(NULL,0,10,Shift);//iATR 系统函数 下面是帮助文档
/*double iATR( string symbol, int timeframe, int period, int shift)
计算平均真实范围的指标并且返回它的值。
参量:
symbol - 计算指标数据上的货币对名称. NULL表示当前货币对. 相当于期货的当前合约
timeframe - 时间周期。 可以时间周期列举任意值. 0表示当前图表的时间周期. 相当于用了那个时间周期,如1,5分钟等
period - 计算平均周期。
shift - 从显示缓冲采取的值的索引(转移相对当前柱特定相当数量期间前)。
*/
val1 = 0;
val2 = 0;
if (river)//if关键字
{
if (p != 1) r1 = Low[Shift] - Range1 * s / 3.0;//if Low关键字
if (p == 1) r1 = -1.0;//if 关键字
if (r1 > 0)//if 关键字
{
val1 = r1;
val2 = 0;
}
else//else关键字
{
val1 = 0;
val2 = 0;
}
ExtMapBuffer1[Shift]=val1;
p = 1;
}
else {//else关键字
if (p != 2) r1 = spread+ High[Shift] + Range1 * s / 3.0;//if High 关键字
if (p == 2) r1 = -1.0; //if关键字
if (r1 > 0) { //if关键字
val1 = 0;
val2 = r1;
} else { //else关键字
val1 = 0;
val2 = 0;
}
ExtMapBuffer2[Shift]=val2;
p = 2;
}
Shift--;
}
//----
return(0);//相当于end
}
//+------------------------------------------------------------------+ |
|