设为首页收藏本站

 找回密码
 注册
查看: 3031|回复: 0

请教nopain能否将以下MT4代码转换为TB代码 [复制链接]

Rank: 5Rank: 5

精华
0
UID
6222
积分
1304
帖子
285
主题
81
阅读权限
60
注册时间
2009-12-20
最后登录
2019-6-16
发表于 2010-4-9 01:17:49 |显示全部楼层
//+------------------------------------------------------------------+
//|                                                  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
  }
//+------------------------------------------------------------------+
您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-17 02:29

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部