编码帮助 - 页 362

 
triip:
伙计们,我需要一点帮助来编码RSI和SMA的关系。

正如你在图片上看到的,有信号(向上-向下箭头),但其中一些是假信号。所以我决定用RSI14和SMA20来消除虚假信号。

这背后的逻辑很简单,如果RSI14高于SMA20,就应该出现上升箭头。如果RSI低于SMA20,则应出现向下箭头。

我已经把一些上升箭头标错了,因为RSI太高了,但这部分我可以自己编码。

我已经找到了很多RSI<MA交叉的代码,但其中大多数在出现交叉时做多/做空。但我需要一个RSI高于或低于的术语,然后做一些事情。

目前我已经发现,我必须使用IRSI和数组,但我自己无法将这些代码放在一起。

三角

你是否检查过这里发布的代码:https://www.mql5.com/en/forum/general

 
mladen:
triip 你检查过这里发布的信息吗:https://www.mql5.com/en/forum/general

是的,但我所发现的都是交叉信号。我需要RSI高于/低于SMA的条件。

我的理解是,首先我必须声明什么是ABOVE,什么是BELOW,然后我可以在IF句中使用它们。

 
mladen:
三合板


你是否检查过这里张贴的那张 :https://www.mql5.com/en/forum/174476



是的,但我所找到的都是交叉信号。我需要RSI在SMA之上/之下的条件。


我的理解是,首先我必须声明什么是ABOVE,什么是BELOW,然后我可以在IF句中使用它们。

 
triip:
是的,但我所找到的都是交叉信号。我需要RSI高于/低于SMA的条件。 我的理解是,首先我必须声明什么是ABOVE,什么是BELOW,然后我可以在IF句中使用它们。

三联单

我不知道你用什么rsi来获得你图片上的那些信号,所以......这就是我所能知道的。没有代码就不能提供更多帮助

 
mladen:
triip 不知道你用什么RSI来获得你图片上的那些信号,所以......我只能说这些。如果没有代码,我无法提供更多帮助

对不起,我没有提到箭头信号不是来自RSI,它是我使用的另一个代码。但我看到,RSI与SMA将有助于避免错误的信号。这就是为什么我想编辑信号代码,使它也能识别RSI条件。

我所需要的是。

箭头信号进来了,但所有这些信号都不是真正的信号。所以在箭头出现之前,必须有另一个if检查 来控制RSI条件。

如果(我目前的代码&&RSI高于/低于SMA)。

{ 显示箭头

}

我需要那个红色部分。

 
triip:
对不起,我没有提到箭头信号不是来自RSI,这是我使用的另一个代码。但我看到RSI和SMA有助于避免错误信号。这就是为什么我喜欢编辑信号代码,使它也能识别RSI条件。

我所需要的是。

箭头信号进来了,但它们都不是真正的信号。因此,如果箭头出现,那么必须有另一个if检查,控制RSI条件。

如果(我目前的代码&&RSI高于/低于SMA)。

{ 显示箭头

}

我需要那个红色部分。

triip

你必须做以下工作。

1.将RSI的值保存到一个缓冲器中

2.2.使用iMAOnArray()来计算该RSI值的SMA。

3.将保存的RSI值与iMAOnArray()的计算值进行比较,这就是你的条件。

 
mladen:
3.

你必须做到以下几点。

1.将RSI的值保存到一个缓冲器中

2.使用iMAOnArray()计算该RSI值的SMA。

3.比较保存的RSI值和iMAOnArray()的计算值,这就是你的条件。

那么,1和2是这样的吗?

1.

#property indicator_buffers 2

extern int rsi_p = 14;

extern int MA_Period=20;

extern int MA_Shift=0;

extern int MA_Method=0;

extern int NumberOfBarsToCalculate = 10000;

double Buffer0[];

double Buffer1[];

double Ma[];

double RSi[];

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,Buffer0);

SetIndexBuffer(1,Buffer1);

SetIndexBuffer(2,Ma);

SetIndexBuffer(3,RSi);

return(0);

}

[/CODE]

2.

[CODE]int start() {

int shift;

double rsi = 0;

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

RSi[shift] = iRSI(NULL,0,rsi_p,PRICE_CLOSE,shift);

}

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

Ma[shift] = iMAOnArray(RSi,0,MA_Period,MA_Shift,MA_Method,shift);

Buffer0[shift] = RSi[shift];

Buffer1[shift] = Ma[shift];

}

return(0);

}

 
triip:
那么1和2是这样的吗?

1.

#property indicator_buffers 2

extern int rsi_p = 14;

extern int MA_Period=20;

extern int MA_Shift=0;

extern int MA_Method=0;

extern int NumberOfBarsToCalculate = 10000;

double Buffer0[];

double Buffer1[];

double Ma[];

double RSi[];

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,Buffer0);

SetIndexBuffer(1,Buffer1);

SetIndexBuffer(2,Ma);

SetIndexBuffer(3,RSi);

return(0);

}

[/CODE]

2.

[CODE]int start() {

int shift;

double rsi = 0;

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

RSi[shift] = iRSI(NULL,0,rsi_p,PRICE_CLOSE,shift);

}

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

Ma[shift] = iMAOnArray(RSi,0,MA_Period,MA_Shift,MA_Method,shift);

Buffer0[shift] = RSi[shift];

Buffer1[shift] = Ma[shift];

}

return(0);

}

是的,你也可以这样做

当你需要时,只需比较RSi和MA的缓冲区,你就能看到它们的相对位置。

 
mladen:
是的,你也可以这样做,当你需要时,只需比较RSi和MA的缓冲区,你就可以看到它们的相对位置。

很好,非常感谢mladen

 
mladen:
apprentice coder 这里有一个指标有这样的排序过程(它是对2维数组进行排序):spearman_rank_correlation_nmc.mq4

mladen

有没有c/c++做同样事情的例子?