Май 17, 2017

Расширение возможностей констант времени компиляции

В языке Pine Script существовали литеральные типы, не-литеральные типы, и серийные типы.

Первое — фиксированные значения: 15.5, -2.
Второе — то, что имеет одно единственное значение на всех барах, но не литералы: ticker, interval, sin(1).
Третье — числа, имеющие разные значения на разных барах: close, time[1].

Некоторые функции (input, color) в качестве определённых аргументов принимают только литералы, и это не всегда удобно. Поэтому мы добавляем ещё одну градацию типов: константы, которые можно вычислить на этапе компиляции. Помимо литералов к ним относятся математические выражения, использующие другие литералы и константы.

В Pine Script литерал любого типа (integer, float, boolean, string) — наиболее специфичный тип, а серия — наиболее общий. Константы времени компиляции займут место между литеральным и не-литеральным значением. Все функции которые принимали в качестве аргумента литерал теперь будут принимать константы времени компиляции.


chrome_2017-05-17_13-37-43

На практике это означает что следующие варианты вызова функций теперь возможны:

pi = acos(-1)
r = input(pi)

mins = input(24*60)
la = barmerge.lookahead_on
daily = security(tickerid, 'D', close, lookahead=la)
daily_low = security(tickerid, 'D', low, lookahead=la)
in_sma='SMA', in_ema='EMA', in_mixed='1/2 SMA + 1/2 EMA'
smoothing = input(in_sma, options=[in_sma, in_ema, in_mixed])

smoothed = na
if smoothing == in_sma
     smoothed := sma(close, 7)

if smoothing == in_ema
     smoothed := ema(close, 7)

if smoothing == in_mixed
     smoothed := 0.5*sma(close, 7) + 0.5*ema(close, 7)