0
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 を使用してみてください

なぜこのエラーが発生するのですか? 私が変更しなければならない提案はありますか?

4

1 に答える 1

0

この記事で説明しています: https://www.tradingview.com/chart/?solution=43000587849

基本的には、あなたが使用low[n]high[n]ていて、いくつnかは不明であり、この変数の履歴バッファの外に出る可能性があるためです。max_bars_backパラメータで遊んでみましたか?


更新:

低解像度のバーで計算する場合、バーセット番号が 10001 より大きい場合、系列変数の最大履歴長が 10000 であるため、targetBarIndex = 10000 である low[targetBarIndex] のようなものを使用することは不可能です。スクリプトを書き直す必要があります。 .

  1. 私が見たように、この領域でのみ値が計算されるため、スクリプトが目的の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")

  1. 2 番目のアプローチでは、すべてのバーで過去の値を本当に計算する必要がある場合は、配列を使用して値をプッシュhighlow、それらから値を計算できます。配列サイズは、シリアル変数の履歴の 10 倍になる場合があります。
于 2021-12-07T07:36:56.307 に答える