Come trovare il valore più vicino nell'array pinescript?
Sep 29 2020
In pine script, ho un array chiamato livelli. Lì, aggiungo diversi valori e lo risolvo. Ora voglio trovare il valore più vicino da quell'array al prezzo corrente. Come lo faccio?
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()
Risposte
2 PineCoders-LucF Sep 30 2020 at 02:51
Versione 1
Al momento non esiste una funzione di matrice per eseguire ciò, ma possiamo creare una funzione personalizzata per farlo. Restituisce l'indice della prima occorrenza del valore nell'array, a partire dall'inizio dell'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
Potresti usarlo in questo modo:
plot(arrayFind(levels, close))
Versione 2
Non sono troppo sicuro di cosa stessi pensando lì, ma:
- La mia risposta non è funzionalmente corretta in quanto non soddisfa le tue esigenze. Trova un valore solo se quel valore esatto è nell'array, mentre hai chiesto l'indice del valore più vicino nell'array.
- Le funzioni array esistenti ci consentono già di trovare l'indice della prima o dell'ultima occorrenza di un valore in un array: array.indexof()e array.lastindexof(). Quindi potresti usare il built-in
array.indexof(levels, close)invece diarrayFind(levels, close).
La risposta corretta alla tua domanda sarebbe:
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
Ciò restituirebbe l'indice della corrispondenza più vicina di un valore in un array.