Помощь в кодировании - страница 362

 
triip:
Ребята, мне нужна небольшая помощь в кодировании RSI и SMA.

Как вы видите на изображении, сигналы есть (стрелки вверх-вниз), но некоторые из них являются ложными. Поэтому я решил исключить ложные сигналы с RSI14 и SMA20.

Логика очень проста, стрелка вверх должна появиться, если RSI14 выше SMA20. Стрелка вниз должна появиться, если RSI ниже SMA20.

Я пометил некоторые стрелки вверх неправильно, потому что RSI слишком высок, но эту часть я могу закодировать сам.

Я нашел много кодов пересечения RSI<MA, но большинство из них переходит в лонг/шорт, если появляется крест. Но мне нужен срок, когда RSI будет выше или ниже, и тогда я смогу что-то сделать.

Насколько я нашел на данный момент, я должен использовать IRSI и массив для этого, но не могу собрать этот код самостоятельно.

triip

Вы проверяли тот, что размещен здесь: 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.

triip

Не знаю, какой rsi вы использовали для получения этих сигналов на вашей картинке, так что ... это все, что я могу сказать. Без кода не могу помочь больше

 
mladen:
triip Не знаю, какой RSI вы использовали, чтобы получить эти сигналы на вашей картинке, так что ... это все, что я могу сказать. Без кода не могу помочь больше

Извините, я не упомянул, что сигналы стрелок не исходят от RSI. Это другой код, который я использую. Но я видел, что RSI с SMA поможет избежать неправильных сигналов. Поэтому я хочу отредактировать код сигнала так, чтобы он мог идентифицировать и условия RSI.

Что мне нужно:

Приходят сигналы со стрелками, но все они не являются истинными сигналами. Поэтому перед приходом стрелки должна быть еще одна проверка if, которая контролирует условия RSI.

if (мой текущий код && RSI выше/ниже SMA)

{ показать стрелку

}

Мне нужна эта красная часть.

 
triip:
Извините, я не упомянул, что сигналы стрелок не исходят от RSI. Это другой код, который я использую. Но я видел, что RSI с SMA поможет избежать неправильных сигналов. Поэтому мне нравится редактировать код сигнала так, чтобы он мог идентифицировать условия RSI тоже.

Мне нужно следующее:

Приходят сигналы со стрелками, но все они не являются истинными сигналами. Поэтому если стрелка приходит, то должна быть еще одна проверка if, которая контролирует условия RSI.

if (мой текущий код && RSI выше/ниже SMA)

{ показать стрелку

}

Мне нужна эта красная часть.

triip

Вы должны сделать следующее:

1. Сохранить значения RSI в буфере

2. Используйте iMAOnArray() для вычисления SMA этих значений RSI.

3. Сравните значение сохраненного RSI и значение вычисленного iMAOnArray() и это и есть ваше условие.

 
mladen:
triip

Вам необходимо сделать следующее :

1. Сохранить значения RSI в буфере

2. Использовать iMAOnArray() для вычисления SMA этих значений RSI.

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++, делающий то же самое?

Причина обращения: