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()还有其他作用吗? 谢谢!