Я пытаюсь немного повозиться со стандартным стохастическим индикатором. Я хочу использовать разные цвета и ширину линий в зависимости от того, %K и %D находятся над/под горизонтальной линией. Однако я не могу заставить его работать. Ниже приведен минимальный пример (я пропустил часть %D, потому что это практически то же самое). Я получаю следующее сообщение об ошибке:
Cannot call 'plot' with arguments (series[float], title=literal string, color=series[color], linewidth=series[integer]); available overloads: plot(series[float], const string, series[color], input integer, input integer, input bool, input integer, input float, series[integer], input bool, series[float], const bool, input integer, const integer, string) => plot; plot(<arg_series_type>, const string, <arg_color_type>, input integer, input integer, input bool, input integer, input float, series[integer], input bool, series[float], const bool, input integer, const integer, string) => plot
//@version=4
study(title = "Stochastic", shorttitle = "Stoch", format=format.price, precision=2, resolution = "")
periodK = input(14, title = "K", minval=1)
periodD = input(3, title = "D", minval=1)
smoothK = input(3, title = "Smooth", minval=1)
upTHR = input(80, title = "Up Threshold", minval=0)
downTHR = input(20, title = "Down Threshold", minval=0)
k = sma(stoch(close, high, low, periodK), smoothK)
h0 = hline(upTHR, "Upper Band", color=#606060)
h1 = hline(downTHR, "Lower Band", color=#606060)
kColor = k >= 80 or k <= 20 ? #0d47a1 : #2196f3
kLinewidth = k >= 80 or k <= 20 ? 2 : 1
plot(k, title = "%K", color=kColor, linewidth=kLinewidth)
Проблема в том, что вы используете изменяемую переменную kLinewidth
в качестве аргумента ширины строки функции plot()
. Этот аргумент должен быть фиксированным целым числом.
Это скомпилирует:
//@version=4
study(title = "Stochastic", shorttitle = "Stoch", format=format.price, precision=2, resolution = "")
periodK = input(14, title = "K", minval=1)
periodD = input(3, title = "D", minval=1)
upTHR = input(80, title = "Up Threshold", minval=0)
downTHR = input(20, title = "Down Threshold", minval=0)
smoothK = 5 // added to get it compiled.
k = sma(stoch(close, high, low, periodK), smoothK)
h0 = hline(upTHR, "Upper Band", color=#606060)
h1 = hline(downTHR, "Lower Band", color=#606060)
kColor = k >= 80 or k <= 20 ? #0d47a1 : #2196f3
kLinewidth = k >= 80 or k <= 20 ? 2 : 1
// plot(k, title = "%K", color=kColor, linewidth=kLinewidth)
plot(k, title = "%K", color=kColor, linewidth=1)
Обновление от 10 декабря 2020 г.:
Я думаю, вы могли бы использовать трюк, нарисовав 2 линии друг над другом.
Вы строите более тонкую линию как обычно (непрерывно), а более толстую линию строите только в те моменты, когда она должна быть толще. В моменты, когда он не должен быть толще, вы просто перестаете рисовать его, рисуя значение na
.
Так:
//@version=4
study(title = "Stochastic", shorttitle = "Stoch", format=format.price, precision=2, resolution = "")
periodK = input(14, title = "K", minval=1)
periodD = input( 3, title = "D", minval=1)
upTHR = input(80, title = "Up Threshold", minval=0)
downTHR = input(20, title = "Down Threshold", minval=0)
smoothK = 5 // added to get it compiled.
k = sma(stoch(close, high, low, periodK), smoothK)
h0 = hline(upTHR, "Upper Band", color=#606060)
h1 = hline(downTHR, "Lower Band", color=#606060)
kColor = k >= 80 or k <= 20 ? #0d47a1 : #2196f3
kLinewidth = k >= 80 or k <= 20 ? 2 : 1
// plot(k, title = "%K", color=kColor, linewidth=kLinewidth)
plot(k, title = "%K", color=kColor, linewidth=1, style=plot.style_linebr)
plot(kLinewidth == 2 ? k : na, title = "%K", color=kColor, linewidth=5, style=plot.style_linebr)
Который дает:
Возможно, это может быть решением (на самом деле, скорее обходным путем) вашей проблемы.
Обновил мой ответ возможным обходным путем.
Знаешь что. Я только что проснулся. Еще раз проверил документ и подумал, что тот же обходной путь может сработать. Спасибо за помощь.
Привет Бьорн. Я понимаю. И нет способа преобразовать изменяемое в фиксированное целое число? Я не мог найти ни одного. Я думаю, это моя проблема, не так ли.