Ошибка приведения типа Pine-script? Ищете обходной путь - PullRequest
1 голос
/ 18 июня 2020

Кто-нибудь знает, почему я получаю эту ошибку в pinescript, когда пытаюсь построить сигнал выхода?

Ошибка: не удается преобразовать тип error 'series [bool]' в ожидаемый тип 'series [float] 'в' plot_2 '?

Больше ни для чего не отображается. Как только я включаю сюжет, он появляется.

Я не знаком с этой ошибкой в ​​пинескрипте и не припомню, чтобы видел что-либо подобное в прошлом. Если кто-то сможет объяснить мне, что я делаю неправильно, это будет здорово

Вот код:

fish = 0.0
fish := (2.5)*(0.5 * log((1 + v1) / (1 - v1))) + (0.5 * nz(fish[1]))
fishColor = sig > 0 ? color.green : sig < 0 ? color.red : color.black

plot(fish, title="FisherTransform", color=fishColor, linewidth=2)




highpassLength = 48
ssfLength = 10
numberOfPoles = input(title="Number of Poles", type=input.integer, defval=2, options=[2, 3])
src = input(title="Source", type=source, defval=close)

PI = 2 * asin(1)

twoPoleSuperSmootherFilter(src, length) =>
    arg = sqrt(2) * PI / length
    a1 = exp(-arg)
    b1 = 2 * a1 * cos(arg)
    c2 = b1
    c3 = -pow(a1, 2)
    c1 = 1 - c2 - c3

    ssf = 0.0
    ssf := c1 * src + c2 * nz(ssf[1]) + c3 * nz(ssf[2])

threePoleSuperSmootherFilter(src, length) =>
    arg = PI / length
    a1 = exp(-arg)
    b1 = 2 * a1 * cos(1.738 * arg)
    c1 = pow(a1, 2)

    coef2 = b1 + c1
    coef3 = -(c1 + b1 * c1)
    coef4 = pow(c1, 2)
    coef1 = 1 - coef2 - coef3 - coef4

ssf = 0.0
ssf := coef1 * src + coef2 * nz(ssf[1]) + coef3 * nz(ssf[2]) + coef4 * nz(ssf[3])

roofingFilter(src, highpassLength, ssfLength, numberOfPoles) =>
    alphaArg = 2 * PI / (highpassLength * sqrt(2))

    alpha = 0.0
    alpha := cos(alphaArg) != 0
         ? (cos(alphaArg) + sin(alphaArg) - 1) / cos(alphaArg)
         : nz(alpha[1])

    highpass = 0.0
    highpass := pow(1 - (alpha / 2), 2) * (src - 2 * nz(src[1]) + nz(src[2])) + 2 * (1 - alpha) * nz(highpass[1]) - pow(1 - alpha, 2) * nz(highpass[2])

    numberOfPoles == 2
     ? twoPoleSuperSmootherFilter((highpass + nz(highpass[1])) / 2, ssfLength)
     : threePoleSuperSmootherFilter((highpass + nz(highpass[1])) / 2, ssfLength)

erf = roofingFilter(src, highpassLength, ssfLength, numberOfPoles)

erfColor = erf >= 0.0 ? #0ebb23 : #ff0000

plot(erf, title="ERF", linewidth=2, color=erfColor, transp=0)

//Center Line
hline(0, title="Zero line", color=color.black)

//exitlong  = (fish < 0.000)

exitlong = (fish <0) and (erf <0)

plot(exitlong, title="Exit", color=fishColor, linewidth=2)

1 Ответ

0 голосов
/ 18 июня 2020

Ваша переменная exitlong имеет тип bool. series аргумент функции plot() ожидает целое число или float типов.

Если вы действительно хотите построить значение логического переменной, вы можете сделать следующее:

exitlong = (fish <0) and (erf <0)

plot(exitlong ? 1 : 0, title="Exit", color=fishColor, linewidth=2)

С exitlong ? 1 : 0 вы в основном конвертируете bool в int .

...