Bagaimana menemukan nilai terdekat dalam array pinescript?
Sep 29 2020
Dalam skrip pinus, saya memiliki array yang disebut level. Di sana, saya menambahkan beberapa nilai dan mengurutkannya. Sekarang saya ingin menemukan nilai terdekat dari larik tersebut dengan harga saat ini. Bagaimana aku melakukan itu?
levels = array.new_float(size = 3, initial_value = na)
// push all value into array
array.push(levels, valOne)
array.push(levels, valTwo)
array.push(levels, valThree)
.......
// sort the array
array.sort(levels, order.ascending)
// get s r value
supportForLong = array.min(levels) // I want to find the closest value in level and not min
resistanceForLong = array.max(levels)
plot(supportForLong, color = black)
plot(resistanceForLong, color = black)
// clear all element for next iteration
array.clear()
Jawaban
2 PineCoders-LucF Sep 30 2020 at 02:51
Versi 1
Saat ini tidak ada fungsi array untuk melakukannya, tetapi kita dapat membuat fungsi kustom untuk melakukannya. Ini mengembalikan indeks kemunculan pertama dari nilai dalam array, mulai dari awal array:
arrayFind(_id, _val) =>
int _return = na
for _i = 0 to array.size(_id) - 1
if array.get(_id, _i) == _val
_return := _i
break
_return
Anda bisa menggunakannya seperti ini:
plot(arrayFind(levels, close))
Versi 2
Tidak terlalu yakin apa yang saya pikirkan di sana, tetapi:
- Jawaban saya tidak benar secara fungsional karena tidak memenuhi kebutuhan Anda. Ia hanya menemukan nilai jika nilai eksak itu ada dalam larik, sedangkan Anda meminta indeks dari nilai terdekat dalam larik.
- Fungsi array yang sudah ada memungkinkan kita untuk menemukan indeks kemunculan pertama atau terakhir dari sebuah nilai dalam sebuah array: array.indexof()dan array.lastindexof(). Jadi, Anda bisa menggunakan bawaan,
array.indexof(levels, close)bukanarrayFind(levels, close).
Jawaban yang benar untuk pertanyaan Anda adalah:
arrayIndexOfClosest(_id, _val) =>
size = array.size(_id)
int _return = na
if size != 0
delta = abs(array.get(_id, 0) - _val)
_return := 0
for _i = 1 to size - 1
thisDelta = abs(array.get(_id, _i) - _val)
if thisDelta < delta
delta := thisDelta
_return := _i
_return
Ini akan mengembalikan indeks dari kecocokan terdekat dari sebuah nilai dalam sebuah array.
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'