pine-script #pine-script-v4
#pine-script #pine-script-v4
Вопрос:
structureLookback = input(title="Lookback", type=input.integer, defval=7, group=trs)
targetBarIndex = input(title="Bar Index", type=input.integer, defval=0, group=trs)
//bar_index low high
n = bar_index < targetBarIndex ? na : bar_index - targetBarIndex
pivotLowHigh = tradeType == "Long" ? (bar_index < targetBarIndex ? na : low[n]) : bar_index < targetBarIndex ? na : high[n]
//Fib Trailing variablen
var Price = 0.0
t_Price = tradeType == "Long" ? highest(high, structureLookback) : lowest(low, structureLookback)
//Berechnung des Fib-Levels
fib_m23 = Price-(Price-pivotLowHigh)*(-0.236)
//Update Price aufgrund von Price Action
if ((bar_index >= targetBarIndex and targetBarIndex != 0)or targetBarIndex==0)
//long version
if (t_Price > Price or Price == 0.0) and tradeType == "Long"
Price := t_Price
plot(pivotLowHigh, color=color.gray, title="SwingLow")
Эта часть функции для получения моего сводного значения с заданным индексом бара работает, но через 10-20 секунд я получаю ошибку во время выполнения.
Pine не может определить ссылочную длину ряда. Попробуйте использовать max_bars_back
почему возникает эта ошибка? и какие-либо предложения, что я должен изменить?
Ответ №1:
Эта статья объясняет это: https://www.tradingview.com/chart/?solution=43000587849
В основном это потому, что вы используете low[n]
and high[n]
с некоторыми n
, которые неизвестны и могут выходить за пределы буфера истории этих переменных. Вы пытались поиграть с max_bars_back
параметром?
UPD:
Когда вы вычисляете на столбцах с низким разрешением, ваш номер набора столбцов больше 10001, невозможно использовать что-то вроде low[targetBarIndex] , где targetBarIndex = 10000, потому что максимальная длина истории последовательных переменных равна 10000. Вам нужно переписать свой скрипт.
- Я предлагаю вам добавить дополнительное условие, которое заставит ваш скрипт вычислять только вокруг желаемого
targetBarIndex
(if bar_index > targetBarIndex and bar_index<targetBarIndex 2
) , потому что, как я вижу,pivotLowHigh
значение вычисляется только в этой области.
//@version=4
strategy("My Strategy", overlay=false, margin_long=100, margin_short=100, max_bars_back = 5000)
structureLookback = input(title="Lookback", type=input.integer, defval=7)
targetBarIndex = input(title="Bar Index", type=input.integer, defval=0)
tradeType = "Long"
// //bar_index low high
var float pivotLowHigh = na
var int n = na
if bar_index > targetBarIndex and bar_index<targetBarIndex 2
n := bar_index - targetBarIndex
pivotLowHigh := tradeType == "Long" ? low[n] : high[n]
//Fib Trailing variablen
var Price = 0.0
t_Price = tradeType == "Long" ? highest(high, structureLookback) : lowest(low, structureLookback)
//Berechnung des Fib-Levels
fib_m23 = Price-(Price-pivotLowHigh)*(-0.236)
//Update Price aufgrund von Price Action
if ((bar_index >= targetBarIndex and targetBarIndex != 0)or targetBarIndex==0)
//long version
if (t_Price > Price or Price == 0.0) and tradeType == "Long"
Price := t_Price
plot(pivotLowHigh, color=color.gray, title="SwingLow")
- Второй подход, если вам действительно нужно вычислять прошлые значения в каждом баре, тогда вы можете использовать массивы для
high
ввода иlow
значений и вычислять значения из них. Размер массива может быть в 10 раз больше, чем история последовательной переменной.
Комментарии:
1. я пытался использовать его, но не понимаю, как это работает. Существует несколько методов для реализации, какой из них правильный и как мне его правильно использовать?
2. Пожалуйста, предоставьте больше вашего кода, я вам помогу
3. я отредактировал больше кода, спасибо.
4. Обновленный ответ.