расчет RSI - страница 2

 
komposter:
Точно, не обратил внимания. Тогда история нужна.

Вот уже ближе к теме. Мне нужно вызывать индикатор с разным периодом. Как этот период посчитать ?
 

Все-таки есть в индикаторе это экспоненциальное сглаживание. Вот эти строки:

 

      ExtPosBuffer[i]=(ExtPosBuffer[i-1]*(InpRSIPeriod-1)+(diff>0.0?diff:0.0))/InpRSIPeriod;

      ExtNegBuffer[i]=(ExtNegBuffer[i-1]*(InpRSIPeriod-1)+(diff<0.0?-diff:0.0))/InpRSIPeriod; 

 

Диапазон баров обычной ЕМА на которых надо выполнять расчет равен примерно 10-15 умножить на период сглаживания. Здесь коэффициенты сглаживания не как у ЕМА рассчитываются, здесь период 14 соответствует периоду 27, значит еще умножить на 2, получается 20-30. Значит для RSI(14) надо обсчитать 300-400 баров.

 

Долго мучился в 2013 году с RSI , у меня такой алгоритм получился - идентичен MT4

1. Распределяем цены закрытия по U (рост) D (падение), при этом незаполненный параметр равен 0.

2.  Считаем среднее значение U и D за период RSI.

3. Рассчитываем EMA за период RSI для усредненных значений U и D из второго пункта. При этом первое значение равно значению из 2 пункта, а не за весь период графика.

4. Делим значение из третьего пункта U на D.

5. 100-100/(1+"значение из 4 пункта") 

 
dimeon:

Вот уже ближе к теме. Мне нужно вызывать индикатор с разным периодом. Как этот период посчитать ?

Рассчитывать в советнике по формуле из стандартной поставки (RSI.mq4), начиная с 300-го бара в истории (заканчивая текущим).

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

Или просчитать все РСИ на истории со всеми периодами, записать в файл, а потом читать нужные значения. 

 
Integer:

Все-таки есть в индикаторе это экспоненциальное сглаживание. Вот эти строки:

Да, я тоже не сразу заметил, поэтому и сказал, что обычное. В описании индикатора на сайте говорится просто "среднее".
 
komposter:

...

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

...

да не работает же IndicatorRelease() в тестере.

с файлами возится не комильфо в данном случае.

остается вариант расчета индикатора с нужными параметрами в советнике.

 
joo:

да не работает же IndicatorRelease() в тестере.

с файлами возится не комильфо в данном случае.

остается вариант расчета индикатора с нужными параметрами в советнике.

Можно и вызывать индикатор, но не менять параметры в iCustom, а передавать их через глобальные переменные. Тогда будет загружен только один индикатор, но надо будет сделать, чтобы он пересчитывался при смене параметров.
 
с ног на голову всё придумали. Изначально в  составлении алгоритма есть грубая ошибка.
 
можно было сделать без цикла FOR
 
SAASA_IVANOV:
можно было сделать без цикла FOR

Yes!

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

Еще вариант - в одном индикаторе заделать расчет кучи rsi (без использования лишних буферов).