Индикатор RSI - страница 2

 
Maksim Neimerik:

Оно и видно что вы не программист... "Пойди туда, не знаю, куда; возьми то, не знаю, что" - программист это все выяснит:) Даже если не брать заказ - разобраться с возможностями языка это святое!:)

И вообще, такое впечатление что вы свой комментарий случайно написали... Вы поняли о чем идет речь в этой теме?

Максим, какие возможности языка позволят Вам разработать советник, не понимая, как этот советник должен работать? 

 
Кстати, оставили свои комментарии только Артем и Игорь. Остальные самоудалились. 
 
Artyom Trishkin:
 iRSIOnArray(3, iMAOnArray(20, RSI(14)))

Можете подробнее объяснить почему именно так?

 
Maksim Neimerik:

Можете подробнее объяснить почему именно так?

Вы показали цепочку:
RSI(14) 47.6218 => MA(20) 47.8564 => RSI(3) 99.7174
Что тут: рси14 отправляется к ма20, а ма20 отправляется к рси3.
Что сиё означает: рси14 сглаживается машкой20. Затем на данных ма20 строится рси3.
Как сделать: 
1. Рассчитать ма20 на данных рси14
2. Рассчитать рси3 на данных ма20, рассчитанной на рси14.
На схеме расчёт идёт справа-налево, где схематически показано что на чём, и с каким периодом рассчитывается. 
 
Artyom Trishkin:
Вы показали цепочку:
RSI(14) 47.6218 => MA(20) 47.8564 => RSI(3) 99.7174
Что тут: рси14 отправляется к ма20, а ма20 отправляется к рси3.
Что сиё означает: рси14 сглаживается машкой20. Затем на данных ма20 строится рси3.
Как сделать: 
1. Рассчитать ма20 на данных рси14
2. Рассчитать рси3 на данных ма20, рассчитанной на рси14.
На схеме расчёт идёт справа-налево, где схематически показано что на чём, и с каким периодом рассчитывается. 

Большое спасибо!

 
Artyom Trishkin:
 iRSIOnArray(3, iMAOnArray(20, RSI(14)))

Артем, извиняюсь, но не работает так как вы написали! Хочет массив... В iRSIOnArray первым параметром должен быть массив для расчета

 
Maksim Neimerik:

Артем, извиняюсь, но не работает так как вы написали! Хочет массив... В iRSIOnArray первым параметром должен быть массив для расчета

Это был не код, а схема :)

Для кода нужно смотреть спецификацию функций и верно расставлять данные.

Вот это - схема:

 iRSIOnArray(3, iMAOnArray(20, RSI(14)))

В ней кратко записано моё объяснение, которое я вам к ней давал.

Сначала рассчитываете МАшку по данным rsi14 и записываете весь расчёт в расчётный буфер,

Затем на рассчитанных данных, записанных в расчётном буфере, рассчитываете rsi3, и этот расчёт помещаете в рисуемый буфер.

Итого - два цикла.

 
Artyom Trishkin:

Это был не код, а схема :)

Для кода нужно смотреть спецификацию функций и верно расставлять данные.

Вот это - схема:

В ней кратко записано моё объяснение, которое я вам к ней давал.

Сначала рассчитываете МАшку по данным rsi14 и записываете весь расчёт в расчётный буфер,

Затем на рассчитанных данных, записанных в расчётном буфере, рассчитываете rsi3, и этот расчёт помещаете в рисуемый буфер.

Итого - два цикла.

Я понял... буду пробовать

 

написал вот так:

   double mas[50],mas1[50];
   for(int i=0;i<5;i++)
   {
      mas[i]=NormalizeDouble(iRSI(Symbol(),PERIOD_CURRENT,14,PRICE_OPEN,i),_Digits);
   }
   for(int x=0;x<5;x++)
   {
      mas1[x]=NormalizeDouble(iMAOnArray(mas,0,20,0,MODE_LWMA,x),_Digits);
   }
   Print(mas1[0],"   ",mas1[1],"   ",mas1[2],"   ",mas1[3],"   ",mas1[4]);

не работает, принт выдает все елементы массива = 0.0

где я ошибся?

 

Увеличил размер массивов:

   double mas[200],mas1[200],res=0;
   
   for(int i=0;i<200;i++)
   {
      mas[i]=NormalizeDouble(iRSI(Symbol(),PERIOD_CURRENT,14,PRICE_OPEN,i),_Digits);
   }
   Print(mas[0],"   ",mas[1],"   ",mas[2],"   ",mas[3],"   ",mas[4]);
   for(int x=0;x<200;x++)
   {
      mas1[x]=NormalizeDouble(iMAOnArray(mas,0,20,0,MODE_LWMA,x),_Digits);
   }
   Print(mas1[0],"   ",mas1[1],"   ",mas1[2],"   ",mas1[3],"   ",mas1[4]);

Результат:

первый принт (тот что РСИ(14)) выдал правильные значения, а вот второй (тот что iMAOnArray) значения появились (что уже обнадеживает), но значения не правильные, не совпадают с теми что по факту на графике...