Novità in Pine Script®: backtest realistici su Heikin Ashi, comandi integrati per informazioni sui simboli, ecc.

Jun 30, 2023

As we continue to add the improvements you request to our programming language, it can be a challenge to keep up. This post goes through our most important recent additions, so you don’t miss out on them.Continuiamo ad aggiungere al nostro linguaggio di programmazione i miglioramenti che ci richiedete, ma può essere difficile tenere il passo. Questo post passa in rassegna le novità più recenti.

Backtest più realistici sui grafici Heikin Ashi

I backtest eseguiti sui grafici Heikin Ashi producevano in genere risultati inaffidabili perché l’emulatore del broker riempiva sempre gli ordini utilizzando i prezzi del grafico, che nel caso dei grafici HA sono sintetici. Una nuova funzione chiamata “Riempi gli ordini utilizzando l’OHLC standard” allevia questo problema. Se utilizzata, le strategie in esecuzione sui grafici HA riempiranno gli ordini ai prezzi di mercato reali, simulando così più fedelmente il comportamento della strategia in tempo reale.

Gli utenti possono attivare questa funzione nella scheda “Proprietà” delle strategie. Per impostazione predefinita, la funzione è disattivata.

Si noti che questa funzione modifica solo il comportamento delle strategie eseguite sui grafici HA. Su altri tipi di grafici sintetici, come Renko, il backtesting continuerà a compilare gli ordini ai prezzi del grafico sintetico, indipendentemente dall’impostazione della funzione.

Nuovo parametro display per le funzioni input.*()

Un nuovo parametro display consente di controllare meglio la visualizzazione dei valori di input accanto al nome di uno script. È possibile utilizzare quattro argomenti: display.status_line, display.data_window, display.all e display.none. Sono consentite combinazioni di argomenti con segni più o meno e, indipendentemente dall’argomento utilizzato, i valori di input continueranno sempre a comparire nella scheda “Input” delle impostazioni dello script.

Il nuovo parametro consente di nascondere i valori di input dalla riga di stato quando normalmente vi appaiono, oppure di visualizzare i valori degli input che normalmente sarebbero nascosti, ovvero gli input booleani, di colore o di data. Utilizzando il nuovo parametro, è anche possibile mostrare gli input accanto al nome dello script nella finestra dei dati. La visualizzazione predefinita degli input rimane invariata quando il parametro non viene utilizzato.

//@version=5

indicator("RSI")

rsiLengthInput = input.int(14, minval=1, title="RSI Length", display=display.data_window+display.status_line)

rsiSourceInput = input.source(close, "Source", display=display.data_window)

rsi = ta.rsi(rsiSourceInput, rsiLengthInput)

plot(rsi, "RSI")

Nuovi comandi integrati per accedere alle informazioni sugli strumenti

Abbiamo aggiunto tre comandi integrati a syminfo: syminfo.sector, syminfo.industry, e syminfo.country. Essi restituiscono stringhe che forniscono ulteriori informazioni sul simbolo corrente. Le informazioni sul paese sono fornite nel formato ISO 3166-1 alpha-2.

Disabilitazione degli alert per gli ordini eseguiti nelle strategie

È ora possibile disabilitare le notifiche per i singoli ordini nelle strategie utilizzando disable_alert = true nelle funzioni utilizzate per creare tali ordini. Ad esempio:

//@version=5
strategy("My strategy", overlay=true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("Long", strategy.long, alert_message = "Go Long!")
    strategy.exit("Exit", "Long", profit = 300, loss = 100, disable_alert = true)

È utile per filtrare ordini specifici quando si utilizza la funzione alert() per generare messaggi personalizzati per notifiche o webhook durante l’esecuzione della strategia.

Modifica del calcolo del drawdown e del run-up massimo nelle strategie

Il calcolo del drawdown massimo e del run-up massimo è stato migliorato per tenere conto del capitale potenziale che si sarebbe potuto ottenere in un’operazione. In precedenza, venivano considerati solo i valori del capitale ai punti di entrata e di uscita, il che poteva portare a valori di drawdown e run-up massimi che non corrispondevano ai loro valori potenziali massimi. I nuovi metodi sono spiegati negli articoli del Centro di supporto sul drawdown e run-up massimo.

Supporto del modificatore varip nelle tipologie scelte dall’utente

Il modificatore varip, che consente alle variabili di mantenere i valori tra ogni esecuzione dello script sulla stessa barra, può ora essere applicato alle tipologie definite dall’utente. N.B.: I campi che non utilizzano varip saranno riportati indietro a ogni barra, quindi i valori assegnati ad essi durante le esecuzioni multiple sulla stessa barra non saranno conservati, anche se l’oggetto che li contiene è stato creato con varip.

Ad esempio:

//@version=5
indicator("`varip` field")

type TypeWithVaripField
    varip int varipCounter = 0
    int counter = 0

varip TypeWithVaripField myCounter = TypeWithVaripField.new(0)
// This field preserves values between script executions.
myCounter.varipCounter := myCounter.varipCounter + 1
// This field does not because it wasn't declared using `varip`.
myCounter.counter := myCounter.counter + 1

plot(myCounter.varipCounter, "myCounter.varipCounter")
plot(myCounter.counter, "myCounter.counter")

Richiesta del tasso di conversione della valuta

Abbiamo introdotto una nuova funzione request.currency_rate() che consente di recuperare il tasso di conversione da una valuta all’altra. Questa funzione richiede due parametri: from e to, entrambi definiti con una stringa di tre lettere che segue lo standard ISO 4217.

Ecco un esempio di utilizzo per convertire il prezzo di uno strumento in sterline inglesi (GBP):

//@version=5
indicator("Close in British Pounds")
rate = request.currency_rate(syminfo.currency, "GBP")
plot(close * rate)

Nuove funzioni all’interno dell’universo array

Sono state aggiunte quattro nuove funzioni per gli array:

  • array.first() — restituisce il primo elemento dell’array.
  • array.last() — restituisce l’ultimo elemento dell’array.
  • array.every() — restituisce true se ogni elemento dell’array è true; altrimenti, restituisce false.
  • array.some() — restituisce true se almeno un elemento dell’array è true; altrimenti, restituisce false.

Per rimanere informati sulle nuove funzionalità di Pine Script®, tenete d’occhio le Note di rilascio del Manuale utente. Anche l’account PineCoders trasmette gli aggiornamenti dalla sua Squawk Box su Telegram, dal suo account su Twitter e dalla chat pubblica Pine Script® Q&A.

Riteniamo che queste funzioni, molto richieste, vi siano utili e vi invitiamo a continuare a inviarci feedback e suggerimenti, in modo da poter rendere la piattaforma la migliore possibile. Costruiamo TradingView per voi e siamo sempre desiderosi di ascoltare le vostre opinioni.

Team TradingView

Look first Then leap

TradingView è realizzato per te. Assicurati di sfruttare al massimo tutte le sue funzionalità
Apri grafico