April 9, 2021
Una carrellata di novità per Pine

Se dovessimo pubblicare un articolo del blog per ogni novità di Pine, non finiremmo mai di scrivere. Per questo motivo, abbiamo deciso di raccogliere tutti gli aggiornamenti recenti più interessanti in un unico post.

La sigla varip è utile per chi vuole tenere traccia di alcuni dati (e delle loro variazioni) all’interno di una stessa barra che viene creata in tempo reale. Tutte le variabili classiche di Pine sono soggette al cosiddetto rollback, che implica che ad ogni nuovo tick lo stato di ogni variabile sia riportato al valore della barra precedente (storica) prima di considerare i dati forniti dalla barra in tempo reale. Lo scopo di varip è proprio quello di sottrarsi a questo meccanismo e permettere il confronto del valore corrente di una variabile con quello corrispondente ai tick precedenti (invece del classico confronto con le barre storiche), aprendo una marea di possibilità. Ecco un esempio di uno da uno dei nostri Maestri Pine, LonesomeTheBlue:

https://www.tradingview.com/script/ygNO2G1V-Tick-Chart/

Per maggiori informazioni, abbiamo pubblicato una spiegazione approfondita su varip tramite l’account PineCoders (inglese):

https://www.tradingview.com/script/ppQxBISk-Using-varip-variables-PineCoders/

Inoltre, per gli appassionati di formule matematiche, abbiamo rilasciato un nuovo gruppo di funzioni e costanti:

  • Nuove costanti math.pi, math.phi, math.rphi and math.e
  • Nuova funzionalità round() — ora la funzione vi permette di specificare la sensibilità dell’arrotondamento, invece che procedere sempre con l’arrotondamento al numero intero più vicino
  • median()
  • mode()
  • range()
  • todegrees()
  • toradians()
  • random()

Per gli amanti del caso, ecco un esempio di strategia che genera ordini di ingresso/uscita in modo randomico sulla base delle percentuali inserite dall’utente nella sezione degli Input. Tutto grazie alla nuova funzione random():

//@version=4
strategy("I’m feeling lucky", overlay=true)
seed = input(1, "Seed, increase to recalculate the strategy", minval=1)
entryPerc = input(20.0, "Entry chance, %", minval=0.0, maxval=100.0)
exitPerc = input(10.0, "Exit chance, %", minval=0.0, maxval=100.0) 
roll = random(0, 100, seed)
positionSize = floor(random(1, (strategy.equity / close), seed))
if roll < entryPerc
    strategy.entry("My Long Entry Id", strategy.long, qty=positionSize)
if roll < exitPerc
    strategy.close_all()

Altro paragrafo, altra novità: questa volta è il turno degli operatori. L’operatore := è stato unito ai vari segni algebrici per ottenere nuovi operatori di assegnazione come +=, -=, *=, /= e %=. Saranno molto utili per snellire il codice degli script: invece che usare a := a + 1 potrete semplicemente scrivere a += 1. Una piccola ma significativa novità.

Vi siete mai domandati se fosse possibile convertira una stringa in un numero? Ora lo è, grazie all’inserimento della funzione tonumber(). Nello script qui sotto, ad esempio, tonumber() usato insieme a altre funzioni stringo-centriche come str.split() e str.replace_all() permette ad un singolo input stringa di restituire diversi valori numerici da usare come periodi nel calcolo delle SMA. Non c’è alcun motivo razionale per preferire questo metodo a quello tradizionale, ma ci piace sempre accompagnare le spiegazioni da un po’ di esempi pratici:

//@version=4
study("My SMAs", overlay=true)
sma_lengths = input("5, 10, 20, 30, 50", title = "SMA Lengths (separated by comma)")
sma_lengths_array = str.split(str.replace_all(sma_lengths, " ", ""), ",")
sma_len(index) =>
    index > array.size(sma_lengths_array) - 1 ? 10 :
     int(tonumber(array.get(sma_lengths_array, index)))
sma0 = sma(close, sma_len(0))
sma1 = sma(close, sma_len(1))
sma2 = sma(close, sma_len(2))
sma3 = sma(close, sma_len(3))
sma4 = sma(close, sma_len(4))
plot(sma0, color=color.blue)
plot(sma1, color=color.red)
plot(sma2, color=color.green)
plot(sma3, color=color.orange)
plot(sma4, color=color.purple)

Abbiamo aggiunto la variabile time_tradingday che restituisce il valore timestamp in formato UNIX dell’inizio della sessione giornaliera di trading. Molto utile per chi analizza simboli scambiati durante la notte, come EURUSD, che portano a discrepanze tra l’inizio della sessione e il giorno effettivo di trading (la sessione del Lunedì di EURUSD comincia di Domenica sera).

La nuova funzione time_close() vi permette di ottenere l’orario di chiusura di una barra specificando timeframe e sessione (a differenza della variabile usata in precedenza, time_close, che funziona solo sulla base del/della timeframe/sessione del grafico). Specialmente d’interesse per i disegni, poiché consente di tracciarli più precisamente anche nel futuro. Per vedere il tutto in azione, date un’occhiata all’indicatore Pivot Point di JayRogers:

https://www.tradingview.com/script/7EwXUkBE-Pivotal-Multi-Pivot-Selector/

Con il nuovo parametro format.percent relativo a study(), l’output del tuo script può essere formattato in automatico in percentuale. Ecco un esempio con l’indicatore integrato Aroon:

//@version=4
study(title="Aroon", shorttitle="Aroon", overlay=false, format=format.percent, precision=2, resolution="")
length = input(14, minval=1)
upper = 100 * (highestbars(high, length+1) + length)/length
lower = 100 * (lowestbars(low, length+1) + length)/length
plot(upper, "Aroon Up", color=#FF6A00)
plot(lower, "Aroon Down", color=#0094FF)

Tre nuove variabili – session.ismarket, session.ispremarket e session.ispostmarket permettono di controllare a quale parte della sessione di trading la barra corrente fa riferimento. N.B.: gli orari di negoziazione estesi compaiono solo nei grafici intraday e solo quando sono abilitati dalle impostazioni.

Per rimanere sempre aggiornati sulle novità man mano che vengono rilasciate, potete monitorare le Note di rilascio incluse nel Manuale utente. L’account PineCoders ha anche un canale Telegram (Squawk Box) dove pubblica tutte queste chicce.

Speriamo che la carrellata vi sia piaciuta. Continuate ad inviare suggerimenti e segnalazioni. Siamo felici di lavorare per voi.

La strada più veloce per i mercati

Apri grafico