Обсуждение статьи "Торговые идеи на основе направления и скорости движения цен" - страница 3

 
komposter:

Что некрасивого?

Ошибочка где то  у Вас ...

//else if ( rsi < 10.0 ) index_rsi = -4;   у Вас -5
//else if ( rsi < 20.0 ) index_rsi = -3;   у Вас -4
//else if ( rsi < 30.0 ) index_rsi = -2;   у Вас -3
//else if ( rsi < 40.0 ) index_rsi = -1;   у Вас -2

 
Наверно где то нормализовать надо
 
VOLDEMAR:

Ошибочка где то  у Вас ...

//else if ( rsi < 10.0 ) index_rsi = -4;   у Вас -5
//else if ( rsi < 20.0 ) index_rsi = -3;   у Вас -4
//else if ( rsi < 30.0 ) index_rsi = -2;   у Вас -3
//else if ( rsi < 40.0 ) index_rsi = -1;   у Вас -2

У меня или у вас?

rsi index
100.0 4.0
95.0 4.0
90.0 3.0
85.0 3.0
80.0 2.0
75.0 2.0
70.0 1.0
65.0 1.0
60.0 0.0
55.0 0.0
50.0 0.0
45.0 0.0
40.0 0.0
35.0 -1.0
30.0 -1.0
25.0 -2.0
20.0 -2.0
15.0 -3.0
10.0 -3.0
5.0 -4.0
0.0 -4.0
 

Вот еще немного подробнее на местах переходов через уровни:

rsi index
100.0 4.0
90.1 4.0
90.0 3.0
89.9 3.0
80.1 3.0
80.0 2.0
79.9 2.0
70.1 2.0
70.0 1.0
69.9 1.0
60.1 1.0
60.0 0.0
59.9 0.0
40.1 0.0
40.0 0.0
39.9 -1.0
30.1 -1.0
30.0 -1.0
29.9 -2.0
20.1 -2.0
20.0 -2.0
19.9 -3.0
10.1 -3.0
10.0 -3.0
9.9 -4.0
0.1 -4.0
0.0 -4.0
 
komposter:

Вот еще немного подробнее на местах переходов через уровни:

rsi index
100.0 4.0
90.1 4.0
90.0 3.0
89.9 3.0
80.1 3.0
80.0 2.0
79.9 2.0
70.1 2.0
70.0 1.0
69.9 1.0
60.1 1.0
60.0 0.0
59.9 0.0
40.1 0.0
40.0 0.0
39.9 -1.0
30.1 -1.0
30.0 -1.0
29.9 -2.0
20.1 -2.0
20.0 -2.0
19.9 -3.0
10.1 -3.0
10.0 -3.0
9.9 -4.0
0.1 -4.0
0.0 -4.0

Код

void refresh_depth_trend()
  {
   int index_rsi=0;
   double rsi=39/*iRSI(Symbol(),0,14,PRICE_CLOSE,0)*/,up=60,dw=40;

index_rsi = (int)MathFloor( (rsi-50.0)/10.0-(rsi-50.0)*0.0001 );
   Print(" index_rsi ",index_rsi);
  }

На выходе должны получить

//else if ( rsi < 40.0 ) index_rsi = -1;  

но получаем -2


 
VOLDEMAR:

Код

На выходе должны получить

//else if ( rsi < 40.0 ) index_rsi = -1;  

но получаем -2

Точно, экселевская ОКРУГЛВНИЗ отличается от MathFloor. Нужен аналог (своя функция) или вторая строка (для значений < 50).

Хотя, в одну тоже можно сделать, сейчас изображу.. 

 
komposter:

Точно, экселевская ОКРУГЛВНИЗ отличается от MathFloor. Нужен аналог (своя функция) или вторая строка (для значений < 50).

Хотя, в одну тоже можно сделать, сейчас изображу.. 

Вот:

= MathFloor( MathAbs( (rsi-50.0)/10.0 - (rsi-50.0)*0.0001 ) ) * ((rsi>50)-0.5)*2;
 
komposter:

Вот:

Мое почтение, для мня пока такие конструкции сложны, хотя если моцк напрячь думаю соображу...
 
VOLDEMAR:
Мое почтение, для мня пока такие конструкции сложны, хотя если моцк напрячь думаю соображу...

"((rsi>50)-0.5)*2" дает +1 для значений больше 50 и -1 для остальных, остальное было раньше. 

Уверен, можно проще, но мозг не соображает.

 
komposter:

"((rsi>50)-0.5)*2" дает +1 для значений больше 50 и -1 для остальных, остальное было раньше. 

Уверен, можно проще, но мозг не соображает.

так проще:

index_rsi = (int)((rsi-50.0)/10.000001);
Причина обращения: