Как Pine-скрипт рассчитывает RSI, используя 2 серии вместо 1 и точку? - PullRequest
0 голосов
/ 13 мая 2018

У меня есть сценарий Pine, который я пытаюсь преобразовать в Python.

Тем не менее, сценарий Pine позволяет RSI иметь в качестве входных данных 2 серии вместо традиционных серий и периодов.

Myвопрос в том, как это реализовано, я попробовал реализацию на их документации, но это не считается для второй серии:

pine_rsi(x, y) => 
u = max(x - x[1], 0) // upward change
d = max(x[1] - x, 0) // downward change
rs = rma(u, y) / rma(d, y)
res = 100 - 100 / (1 + rs)
res

Спасибо,

Ответы [ 3 ]

0 голосов
/ 19 августа 2018

Я не специалист по Python или чему-то еще, но я думаю, что вы пытаетесь разделить на ноль.

Уравнение для RSI:

RSI= 100 - { 100 \ (1+RS) }

, где

RS = SMMA(U,n) / SMMA(D,n)

Логика в вашем уравнении, по-видимому, не учитывает тот факт, что RS будет иметь ноль в знаменателе, если нисходящее значение rma равно нулю.Это условие возникает всякий раз, когда цена имеет тенденцию к снижению в течение 14 последовательных периодов или любого периода RSI.

Сценарий Pine Editor учитывает это, устанавливая RSI равным 100, когда возникает описанная выше ситуация.

В строке 6 ниже: RSI переключается на 100 каждый раз, когда член rma равен 0. Вторая часть строки выполняется только тогда, когда код не делится на ноль.

1  //@version=3
2  study(title="Relative Strength Index", shorttitle="RSI")
3  src = close, len = input(14, minval=1, title="Length")
4  up = rma(max(change(src), 0), len)
5  down = rma(-min(change(src), 0), len)
6  rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
7  plot(rsi, color=purple)
8  band1 = hline(70)
9  band0 = hline(30)
10 fill(band1, band0, color=purple, transp=90)
0 голосов
/ 30 апреля 2019

В Pine Script существует такая вещь, как "вторая серия".Из документации:

rsi(x,y)

"If x is a series and y is integer then x is a source series and y is a length.
If x is a series and y is a series then x and y are considered to be 2 calculated MAs for upward and downward changes"

Однако это не объясняет, в чем заключается цель, так как в функцию rsi () не вводится длина - что Pine должен делать с данными?

Как и OP, я также хотел бы знать назначение 2-х серий в качестве входных данных для портирования на python.На это еще не ответили.

0 голосов
/ 17 мая 2018

как это реализовано .. это не считается для второй серии : ?

Не существует такой вещи, как " секунда " серия


Давайте рассмотрим код,
оригинал выглядит так:

pine_rsi( x, y ) => 
     u   = max(x - x[1], 0) // upward change
     d   = max(x[1] - x, 0) // downward change
     rs  = rma(u, y) / rma(d, y)
     res = 100 - 100 / (1 + rs)
     res

пока, если мы расшифруем логику в немного более удобочитаемую форму, мы получим:

pine_rsi(        aTimeSERIE, anRsiPERIOD ) => 
     up   = max( aTimeSERIE
               - aTimeSERIE[1], 0 )     //         upward changes

     down = max( aTimeSERIE[1]
               - aTimeSERIE,    0 )     //       downward changes

     rs   = ( rma( up,   anRsiPERIOD )  //  RMA-"average" gains  over period
            / rma( down, anRsiPERIOD )  //  RMA-"average" losses over period
              )

     res  = 100 - 100 / ( 1 + rs )      //  

     res

что именно то, что Дж. Уэллс Уайлдер назвал Индекс относительной силы, не так ли?

Так что просто передайте правильные типы данных, как предписывает вызывающая подпись, и все готово.

...