我正在嘗試測驗我的腳本,并且我想繪制一些我擁有的變數。問題是在“for”陳述句之前繪制的所有內容都有效,但除此之外沒有任何效果。我做了一個測驗來繪制“bar”變數,當我這樣做時,它會彈出一個錯誤:未宣告的識別符號“bar”。當我嘗試繪制“bar”變數時會發生這種情況。
'SwingIndex' 變數包含我最終想在指標中繪制的結果,但是當我嘗試繪制它時,指標視窗上出現一個錯誤,顯示“研究錯誤負指數 -1”。某些東西在“for”陳述句中的某處引起了問題。
就我個人而言,我認為由于 'bar' 變數不起作用(在我的代碼的第 39 行中宣告),所以沒有其他作用。但我不知道為什么不起作用。
誰能幫我找出我的錯誤在哪里?我會把代碼留在這里。
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// ? TD_DaFen
//@version=5
// Indicator name
indicator("DAF_Swing_Index", shorttitle= 'DAF_SwInd', overlay=false)
// Input
T = input.int(30000, title = 'Ratio de escala', minval = 1000, maxval = 150000)
Shift = input.int(0, title = 'Desplazamiento horizontal', minval = 0, maxval = 100)
// Other variable
var float SwingIndex = 0
var int StartBars = 1
Prev_calculated = bar_index
Rates_total = bar_index 1
var float SH1 = 0
var float SI = 0
var float R = 0
// Array
Open = array.new_float(Rates_total)
Open1 = array.new_float(Rates_total)
Close = array.new_float(Rates_total)
Close1 = array.new_float(Rates_total)
High = array.new_float(Rates_total)
Low = array.new_float(Rates_total)
// Initial bar verification
if Rates_total < StartBars
SwingIndex := 0
Primero = 1
if Prev_calculated > Rates_total or Prev_calculated <= 0
Primero := 1
else
Primero := Prev_calculated -1
// Main process
for bar= Primero to Rates_total-1
array.push(Open, high[bar])
array.push(Open1, open[bar-1])
array.push(Close, close[bar])
array.push(Close1, close[bar-1])
array.push(High, high[bar])
array.push(Low, low[bar])
K = math.max(math.abs(array.get(High, bar)- array.get(Close1, bar)), math.abs(array.get(Low, bar) - array.get(Close1, bar)))
TR = math.max(math.max(math.abs(array.get(High, bar) - array.get(Close1, bar)), math.abs(array.get(Low, bar) - array.get(Close1, bar))), math.abs(array.get(High, bar) - array.get(Low, bar)))
ER = 0.0
if array.get(Close1, bar) > array.get(High, bar)
ER := math.abs(array.get(High, bar) - array.get(Close1, bar))
if array.get(Close1, bar) < array.get(Low, bar)
ER := math.abs(array.get(Low, bar) - array.get(Close1, bar))
SH1 := math.abs(array.get(Close1, bar) - array.get(Open1, bar))
R := TR - 0.5 * ER 0.25 * SH1
SI := 0.0
if R != 0
SI := 50 * ((array.get(Close, bar) - array.get(Close1, bar)) 0.5 * (array.get(Close, bar) - array.get(Open1, bar))) * (K / T) / R
SwingIndex := SI
// ploting partial results to see if its working
plot(SwingIndex, title = 'Swing Index', style = plot.style_line, color = color.rgb(193, 150, 51, 10))
uj5u.com熱心網友回復:
您的問題出在 for 回圈中。錯誤訊息告訴您您正在嘗試訪問負索引 -1 處的元素。
以下兩個array.push呼叫導致了問題:
for bar= Primero to Rates_total-1
array.push(Open1, open[bar-1])
array.push(Close1, close[bar-1])
那是因為在圖表的第二個條形處,Primero變為零,使您的 for 回圈從零 ( for bar = Primero)開始。然后從零中減去 1,因此嘗試訪問負索引 -1 處的元素。
我們怎么知道?
請記住,您的腳本將針對每個柱線執行。讓我們分析您的第一個和第二個柱的以下代碼段。
Prev_calculated = bar_index
Rates_total = bar_index 1
Primero = 1
if Prev_calculated > Rates_total or Prev_calculated <= 0
Primero := 1
else
Primero := Prev_calculated -1
第一個柱 (bar_index = 0)
Prev_calculated = 0
Rates_total = 1
Primero = 1 (if branch -> Prev_calculated <= 0 is true)
第二個柱 (bar_index = 1)
Prev_calculated = 1
Rates_total = 2
Primero = 0 (else branch)
此外,此Prev_calculated > Rates_total檢查將始終為false.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348124.html
上一篇:嘗試創建一個for回圈,該回圈將對我的資料集Python中每四個數字的連續數字求和
下一篇:如何呼叫嵌套回圈中的值?
