Ошибка скрипта Pine при применении цветов к полосам громкости - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь выделить полосы громкости, которые на 200% или больше, чем предыдущая, но продолжаю получать следующую ошибку Error: Undeclared identifier volColor, однако она объявлена, поэтому я не понимаю ошибку.

study("200% Volume Highlight", shorttitle="Vol_200%")

v = volume
v0=volume[0]
v1=volume[1]

pct = (v0-v1)/v1*100

volColor = iff(pct>200, #DC143C)
plot(series=volume, style=histogram, color=volColor)

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

У вас не назначен цвет для случая, когда pct>200 ложно. Сейчас используется na, но вы, конечно, можете заменить его цветом по вашему выбору.

Пожалуйста, включите директиву компилятора //@version= в свои фрагменты, чтобы мы знали, какую версию Pine вы используете.

//@version=3
study("200% Volume Highlight", shorttitle="Vol_200%")

v = volume
v0=volume[0]
v1=volume[1]

pct = (v0-v1)/v1*100

volColor = iff(pct>200, #DC143C, na)
plot(series=volume, style=histogram, color=volColor)

enter image description here

1 голос
/ 28 мая 2020

Ошибка volColor не является проблемой.
Это последняя ошибка, с которой столкнулся компилятор, потому что предыдущий оператор не скомпилировался.
Ваша полная ошибка такова:

Error: Cannot call `iff` with arguments (series__bool, literal__color); available overloads: iff(bool, integer, integer) => integer; iff(bool, float, float) => float; iff(bool, series, series) => series; iff(bool, series__color, series__color) => series__color; iff(bool, bool, bool) => bool; iff(bool, string, string) => string; iff(series__bool, integer, integer) => series__integer; iff(series__bool, float, float) => series; iff(series__bool, series, series) => series; iff(series__bool, series__color, series__color) => series__color; iff(series__bool, bool, bool) => series__bool; iff(float, integer, integer) => integer; iff(float, float, float) => float; iff(float, series, series) => series; iff(float, series__color, series__color) => series__color; iff(float, bool, bool) => bool; iff(float, string, string) => string; iff(series, integer, integer) => series__integer; iff(series, float, float) => series; iff(series, series, series) => series; iff(series, series__color, series__color) => series__color; iff(series, bool, bool) => series__bool;
Error: Undeclared identifier `volColor`

Настоящая проблема в том, что iif принимает 3 входа вместо 2.

Это будет работать.

//@version=4
study("200% Volume Highlight", shorttitle="Vol_200%")

signalThreshold = input(defval=200, title="Threshold (%)", type=input.float, minval=0)

v  = volume
v0 = volume[0] // volume[0] is the volume on the current bar. So it's the same as just using 'volume'. Or in your case, variable 'v'.
v1 = volume[1]

color volColor = na
color defaultColor = color.blue
color signalColor = #DC143C

pct = (v0-v1)/v1*100

volColor := iff(pct>signalThreshold, signalColor, defaultColor)

// This code will be faster. It does the same thing, but doesn't call a function.
//volColor := pct > signalThreshold ? signalColor : defaultColor

plot(series=volume, style=plot.style_histogram, color=volColor)

Примечание: Вы всегда должны использовать //@version=x в качестве первая строка ваших скриптов.

...