Как отобразить результат по максимальному определению количества баров с барссинсом? - PullRequest
0 голосов
/ 23 апреля 2019

Попробуйте построить значение самых высоких баров между текущим баром и последним пересечением ema(50) и ema(200), используя barssince(cross(ema50,ema200)).Функция highest() хочет integer, а Barssince дает series integer.Все варианты получают ошибку, из-за которой pine не компилируется с ошибкой:

строка 4: Невозможно вызвать "наивысший" с аргументами (series [integer]);доступные перегрузки: наибольшая (серия, целое число) => серия;Наибольшее (целое) => Сценарий серии.

//@version=3
study("My Script")
o = 0
o := highest(barssince(cross(sma(close,50),sma(close,200))))
plot(o, color = yellow)

Крест ema является лишь примером.Моя цель - функция highest() с вычисленным количеством баров с barssince.

Как преобразовать форму результата в виде бара с целым числом, принятым highest()?Или есть другое решение?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Реализуйте самую высокую функцию самостоятельно:

//@version=3
study("My Script", max_bars_back=5000)

highest_pine(src, len) =>
    max = src[0]
    for i = 1 to len
        if src[i] > max
            max := src[i]
    max

o = 0.0
o := highest_pine(close, barssince(cross(sma(close,50),sma(close,200))))
plot(o, color = green)
0 голосов
/ 23 апреля 2019

Ссылка довольно запутанная, но немного поиграв с вашей функцией, мне удалось заставить ее работать:

Для функции highest() есть две перегрузки: - highest(length), эта занимаетinteger и возвращает серию - highest(source, length), этот принимает series и integer. В ссылке на функцию есть подсказка о том, что One arg version: x is a length. Algorithm uses high as a source series.

Проверка ссылки для barssince() Я вижу, что он принимает bool (логическое условие) и возвращает серию integer.

Теперь ясно, что highest(barssince(true)) не правильный синтаксис, потому что barssince() вернетseries, а не integer, в то время как highest() ожидает и целое число или ряд и и целое число.

Из возни и поиска в Интернете я пришел к выводу, что этоневозможно иметь переменную integer в сценарии Pine, которая не является series в то же время.Это заставляет меня поверить, что функция highest() не может использоваться динамически.

Мне удалось подражать поведению с помощью оператора if вместе с этим руководством по миграции

Это версия скрипта, которая работает для меня, она строит линию на max() максимумах, сбрасывая при появлении нового пересечения МА.

//@version=3
study("High since SMA Cross")

fast_sma = sma(close,10)
slow_sma = sma(close,20)

high_since_cross = 0.0
resistance = if(cross(fast_sma, slow_sma))
    high
else
    max(nz(high_since_cross[1]), high)
plot(resistance, color=yellow)

...