[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 333

 

我不打算争论!如果你试一试,你就会知道什么是错的。我只是为那些会遇到这个问题的人写的。它在时间上是颠倒的,所以图表在时间上是颠倒的。我把指标的文本贴出来。右边。看看这个图表,非常有趣的输入可以通过它来检测。在我看来,它比MASD更早、更准确地进入了。

#属性 indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
{
SetIndexBuffer(0,Buf_0)。
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2)。
返回。
}
外来的双倍PeriodPower=13。
外来的双倍MA_Period=5。

int start()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i)。
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i)。
ArraySetAsSeries(Bears_array,true); // 应用于iMAOnArray函数中的同步索引。
ArraySetAsSeries(Bulls_array,true)。
Line1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i)。
Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i)。
Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

i--;
}
返回。
}


 
Stepan241 писал(а)>>

我不打算争论!如果你试一试,你就会知道什么是错的。我只是为那些会遇到这个问题的人写的。它在时间上是颠倒的,所以图表在时间上是颠倒的。我把指标的文本贴出来。准备好了。看看这个图表,非常有趣的输入可以通过它来检测。在我看来,它比MASD进入得更早、更准确。

#属性 indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
{
SetIndexBuffer(0,Buf_0)。
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2)。
返回。
}
外来的双倍PeriodPower=13。
外来的双倍MA_Period=5。

int start()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i)。
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i)。
ArraySetAsSeries(Bears_array,true); // 应用于iMAOnArray函数中的同步索引。
ArraySetAsSeries(Bulls_array,true)。
Line1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i)。
Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i)。
Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

i--;
}
返回。
}

它可以被拧来拧去,但它可以做得很好。

指示器最多可以包含8个缓冲区。其中一些可用于中间计算。

然而,如果性能不是很关键,那么是的,你可以这样做。

 
Vinin >> :

你可以玩一玩,也可以正常地做。

指示器最多可以包含8个缓冲区。其中一些可以用于中间计算。

虽然,如果这对你自己和表演不是很关键,那么是的,你可以这样做。

正常的概念是相对的。权利的概念也是如此。这更像是一个哲学问题。我试图以一种优化的方式来实现这个算法。为了在一个周期内建立一个指标。在我看来,这是对硬件的最少加载,而你可以得到同样的结果。

>> 至于有8个缓冲区,在战时他们的数量可以达到54个半,任何工兵都知道这个事实。:-)

 
Stepan241 писал(а)>>

正常是相对的。权利的概念也是如此。这更像是一个哲学问题。我试图以一种优化的方式来实现这个算法。因此,该指标是在一个周期内建立的。在我看来,在结果仍然正确的情况下,它对硬件的加载是最少的。

大约8个缓冲区,战时它们的数量可以达到54个半,每个工程师都知道。:-)

有可能在一个循环中完成所有工作,并使用最少的缓冲区,但这是另一个故事。

任何对数组(不是缓冲区)的操作都需要相当长的时间。因此,做几个循环比把所有东西都塞进一个循环要容易和快速。

在指示器的操作意义上更快。

 
Vinin >> :

有可能在一个循环中完成所有工作,并使用最少的缓冲区,但这是另一个话题。

任何对数组(而不是缓冲区)的操作都需要很长的时间。因此,做几个循环比把所有东西都塞进一个循环要容易和快速。

从指标的表现来看,更快。

告诉我,维宁, 你有没有试着看一看你的想法,看看它画的是什么?

 
Vinin >> :

有可能在一个循环中完成所有工作,并使用最少的缓冲区,但这是另一个话题。

任何对数组(而不是缓冲区)的操作都需要很长的时间。因此,做几个循环比把所有东西都塞进一个循环要容易和快速。

从指标的表现来看,更快。

亲爱的维宁, 你有没有试着看一看你的想法并想一想?

int start()
{
int i, limit=Bars-IndicatorCounted()-1;
for (i=limit;i>=0;i--){
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i)。
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i)。
}
for (i=limit;i>=0;i--){
MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i)。
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i)。
}
返回。
}

我知道,在第一个循环中,你形成了一个牛市和熊市的阵列。在第二个循环中,这两个数组被平滑化。如果你这么喜欢它,只要看看结果,你就会明白一切。



 


仔细看一下AGRAPHIC GRAPHIC

 
Stepan241 писал(а)>>

我说的是这种指标代码的一般情况。

附加的文件:
test.mq4  2 kb
 
比较我和你的版本的速度
 

我同意。它的输出很好,一切都很正确。我只是需要显示以下输出

Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

它应该在一个单独的循环中完成。我更喜欢你的版本,因为我更喜欢FOR循环。谢谢你的帮助和关注。