我无法从你的代码中看出你想做什么,但在两个地方你没有给变量i一个值。你需要解决这个问题。
int start() // Special function start() { if (Crosses()) count++; int i, n, // Bar index Counted_bars; Buf_1[i]= count; // Number of counted bars double Sum_H; //-------------------------------------------------------------------- Counted_bars=IndicatorCounted(); // Number of counted bars i=Bars-Counted_bars-1; // Index of the first uncounted while(i>=0) // Loop for uncounted bars { Sum_H=0; // Nulling at loop beginning for(n=i;n<=i+Aver_Bars-1;n++) // Loop of summing values { Buf_0[i]=Buf_1[n]; // Value of 0 buffer on i bar i--; // Calculating index of the next bar } } //-------------------------------------------------------------------- return(0); // Exit the special funct. start() } //-------------------------------------------------------------------- bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE); }
抱歉我直言不讳,但你的代码显示,你试图实现的东西远远超出了你的能力。
例子
bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE);
例如,我们假设i = 1
double O=iOpen(NULL,PERIOD_D1,1);
这将返回昨天的开盘价
double H=iHigh(NULL,PERIOD_M1,1); double L=iLow(NULL,PERIOD_M1,1);
这2个将返回最后一个关闭的1分钟条形图的值。
所以你是在比较1分钟前的数值和昨天的开盘价。
如果i = 2,你将比较2分钟前的数值和2天前的开盘价
你必须看到,这不可能是你想要的结果。
抱歉我直言不讳,但你的代码显示,你试图实现的东西远远超出了你的能力。
例子
例如,我们假设i = 1
这将返回昨天的开盘价
这2个将返回最后一个关闭的1分钟条形图的值。
所以你是在比较1分钟前的数值和昨天的开盘价。
如果i = 2,你将比较2分钟前的数值和2天前的开盘价
你必须看到,这不可能是你想要的结果。
嗨,GumRai。
谢谢你花时间帮助我。你是对的,我只是一个初学者,正在努力学习编码EA。以下是我想做的事情。
1.将PERIOD_D1开盘与每分钟的PERIOD_M1条比较,所以有1440个M1条与D1条比较。然后计算满足条件的M1条,如果 (O>L &&O<H) 。
2.2.将计数的条形存储在一个数组中,然后再次进入下一个D1条形,再次重复循环。
3.3.计数的条形图将由指标在日线图上绘制。因此,如果满足声明的M1条数是5,那么5将被绘制成日线Bar1的值。然后说下一个日线的M1条数是10,那么它将被再次绘制在Bar1上,因为前一个条数被移至Bar2。
请告诉我如何最好地编码这个看似简单的语句,我很难做到。如果你需要进一步的解释,请告诉我,非常感谢。
嗨,GumRai。
谢谢你花时间帮助我。你是对的,我只是一个初学者,并急切地想学习编码EA。以下是我想做的事情。
1.将PERIOD_D1开盘与每分钟的PERIOD_M1条比较,所以有1440个M1条与D1条比较。然后计算满足条件的M1条,如果 (O>L &&O<H) 。
2.2.将计数的条形存储在一个数组中,然后再次进入下一个D1条形,再次重复循环。
3.3.计数的条形图将由指标在日线图上绘制。因此,如果满足声明的M1条数是5,那么5将被绘制成日线Bar1的值。然后说下一个日线的M1条数是10,那么它将被再次绘制在Bar1上,因为前一个条数被移至Bar2。
请告诉我如何最好地编码这个看似简单的语句,我很难做到。如果你需要进一步的解释,请告诉我,非常感谢。
我很乐意帮助你,但我不会写代码,因为这对你的征信没有帮助。
首先,你必须认识到,1440个M1条并不总是对应于1天的时间。如果在一个条形图中没有刻度,该条形图就会从历史中消失,而且可能比你预期的少。
所以你需要D1蜡烛的开盘日期值。你能做到这一点吗?试试吧,然后公布你的代码
不要那么快
我知道你想做什么,但你的代码(如果 (O > L && O < H))并不能让你得到你想要的东西。
请看附件中的图表
朝上 的箭头 是今天的开盘价
朝右的箭头 是与你的代码(如果 (O > L & & O < H))相匹配的第一条杠,所以计数=1
但是 ,如果你注意到,这根柱子的收盘价高于今天的开盘价,所以,实际上计数应该是=2(至少(可能还有几个交叉点,你不能只在tick图表中看到))。
但是在你的代码中,计数 = 只有 1
- Zaldy: 请大家帮帮忙!这到底有没有可能?不要对我们大喊大叫。这当然是可能的。
- 整数和布尔运算是可以转换的。假==0,真==非零。
return(true); else return(EMPTY_VALUE); return(true); else return(2147483647); return(true); else return(true);
- 你还在处理三个时间框架,D1,图表,M1。你必须转换。没有经过编译或测试。
Counted_bars=IndicatorCounted(); // Number of counted bars for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars int iD1 = iBarShift(NULL, PERIOD_D1, Time[iCht]; double openD1 = iOpen(NULL, PERIOD_D1, iD1); int iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht], iM1End = -1; if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]; for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){ double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg), lM1 = iLow(NULL, PERIOD_M1, iM1Beg); // count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; } }
没有编译或测试。
不要那么快
我知道你想做什么,但你的代码(如果 (O > L && O < H))并不能让你得到你想要的东西。
请看附件中的图表
朝上 的箭头 是今天的开盘价
朝右的箭头 是与你的代码(如果 (O > L & & O < H))相匹配的第一条杠,所以计数=1
但是 ,如果你注意到,这根柱子的收盘价高于今天的开盘价,所以,实际上计数应该是=2(至少(可能还有几个交叉点,你不能只在tick图表中看到))。
但是在你的代码中,计数 = 只有 1
嗨,Qjol,是的,朝向右边的箭头是我想要的第一个计数。只计算那些纵横交错的D1开口。再次感谢您的努力。
- 扎尔迪 请帮助任何人!这可能吗?这到底有没有可能?不要对我们大喊大叫。当然这是有可能的。
- 整数和布尔运算是可以转换的。假==0,真==非零。
- 你也在处理三个时间框架,D1,图表,M1。你必须转换。未编译或测试。
没有编译或测试。
谢谢WHRoeder,对不起,我在这里使用了大写字母!我将尝试你的建议,并在这里回来看看结果。
问候!我需要帮助。我需要关于这个指标的帮助。我一直在尝试不同的方法来计算M1时段的条数,这些条数 遇到了D1时段的公开价格水平。我附上了我尝试的代码,但无法成功运行。我一直在努力尝试,但我遇到了困难,所以现在我向这里的好心人寻求帮助!
以下是我对这个指标的需求。
1.当M1时期的一个柱子的价格遇到D1时期的开盘价时,它将被计算在内。每个D1时段在M1时段有1440个柱子,所以每1440个柱子都将被测试。
2.2.每个D1时段的总计数/D1时段将被加总,并按一定的数值取平均值。 比如说平均数是30,这个30就是D1条的数量。
3.3.然后,平均值将作为指标被绘制出来。