MT4程序,请教高手解答

Discussion in 'MetaTrader' started by Xtimer, Feb 6, 2013.

  1. HTML:
    //+------------------------------------------------------------------+
    //|                                               十字星蜡烛连线.mq4 |
    //|                                                               vx |
    //|                                        http://www.metaquotes.net |
    //+------------------------------------------------------------------+
    #property copyright "vx"
    #property link      "http://www.metaquotes.net"
    
    #property indicator_chart_window
    #property indicator_buffers 1 //定义一个图层缓冲
    double Cross.Buffer[]; //定义十字星缓冲
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- 设置十字星模型
    SetIndexStyle(0,DRAW_SECTION,STYLE_SOLID,1,Red);
    SetIndexBuffer(0,Cross.Buffer);
    SetIndexLabel(0,"十字星价位");
    //----
    ArrayInitialize(Cross.Buffer,0.0);
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       ObjectsDeleteAll();
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
      {
       int    counted_bars=IndicatorCounted();
    //----
       if (counted_bars<0) return (-1); //检查可能出现错误
       if (counted_bars>0) counted_bars--; //最后数的柱子将被重数
       int limit=Bars-counted_bars;
    //画一级连线 阳线阴线归类,十字星单列
    for(int i=limit;i>0;i--) //不理会当前蜡烛
    {
    //判断上一个蜡烛类型
    if(Close[i]==Open[i]) Cross.Buffer[i]=Close[i]; //如果收盘价等于开盘价,蜡烛为十字星
    }
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    
    
    
    代码如上,问题如下:
    假设该程序运行的图表中,共有10根K线,且从左到右,只有第1和第5根K线是十字星,且收盘价分别为10.01和10.05。
    1. 以上程序运行时,新价格第一次被更新后,indicatorCounted()首次运行时返回0值,并赋给counted_bars;接下来两个if语句均未被触发,则limit=bars-0=10;然后进入for循环,i 初始值为10,然后递减为0;整个过程中,使得Cross.Buffer[9]=10.01,Cross.Buffer[5]=10.05,然后Cross.Buffer[10]=Cross.Buffer[8]= Cross.Buffer[7]= Cross.Buffer[6]= Cross.Buffer[4]= Cross.Buffer[3]= Cross.Buffer[2]= Cross.Buffer[1]= Cross.Buffer[0] =0.0. 是这样吗?如果是,那为什么画线的时候,只有连接Cross.Buffer[9]和Cross.Buffer[5]的线段,而没有连接其它值为0.0的线段,我的意思是程序是如何识别不需要连接0.0值得,毕竟他们都是在同一个数组中。
    2. indicatorCounted()被运行一次以后,其返回值和Bars一样吗?indicatorCounted()还有其他作用吗?
    谢谢!