Per iniziare
Configura PineBag una volta, quindi prepara il tuo primo test in pochi minuti.
Hai bisogno di tre cose
- Google Chrome 116 o successivo.
- Un conto TradingView registrato con accesso ai simboli che desideri testare.
- Un file Pine Script che dichiara
strategy(), non soloindicator().
Installa e apri PineBag
-
Installa l'estensione.
Utilizza il pulsante di installazione di PineBag. Blocca l'estensione se desideri un accesso rapido. -
Apri un grafico TradingView.
Accedi prima, quindi apri qualsiasi mercato e periodo di tempo supportati. -
Ricarica la scheda della carta.
Eseguire questa operazione dopo aver installato o aggiornato PineBag in modo che la carta possa connettersi. -
Apri PineBag.
Seleziona l'icona PineBag. L'indicatore di connessione diventa verde quando la carta è pronta.
Il pannello laterale, controllo per controllo
I numeri sull'interfaccia reale corrispondono alle spiegazioni. Niente in questa immagine è un modello.
1
2
3
4
5
6
7
8
9
10
11
- 1Strategia
La strategia caricata. Clicca sulla scheda per aprirla nell'editor; il cestino nell'intestazione della sezione la rimuove.
- 2Esegui riepilogo
Tempi, capitale, dimensione dell'ordine e commissione che verrà utilizzata.
- 3Cerca
Apre la ricerca dei simboli di TradingView in modo da poter aggiungere un ticker qualificato per lo scambio.
- 4Copia borsa
Copia ogni ticker, uno
EXCHANGE:SYMBOLper riga. - 5Busta per pasta
Accetta righe, virgole, punto e virgola o spazi e ignora i duplicati.
- 6Cancella
Chiede un secondo clic, copia i ticker e poi svuota l'elenco; «Incolla i ticker» lo ripristina.
- 7Tag ticker
Mostra il bagaglio attuale. Utilizzare × per rimuovere un simbolo; somma fino a 500.
- 8Avvia backtest
Convalida l'impostazione e avvia l'esecuzione sequenziale del portafoglio.
- 9Report
Salva gli ultimi 50 report localmente ed esporta JSON o CSV.
- 10Giorni rimanenti
Active days: 05— Giorni rimanenti. - 11Supporto
Il supporto è disponibile per richieste tecniche, di fatturazione, di licenza e di privacy.
Carica una strategia
- Scegli la fonte.
Rilascia a.pinein Strategy, oppure apri Editor e incolla il codice. - Correggi qualsiasi messaggio di convalida.
Lo script deve contenerestrategy(). PineBag mostra un chiaro errore se non può essere utilizzato. - Controlla il riepilogo.
Conferma il nome dello script, l'intervallo di tempo, il capitale e la dimensione dell'ordine mostrati sopra Esegui.
indicator(), convertilo in una strategia prima di eseguire PineBag.Modello di strategia
Ogni campo della scheda Properties di TradingView corrisponde a un argomento di strategy(). Tieni i valori come costanti con nome all'inizio dello script: con la priorità script, ogni ticker viene testato con le stesse ipotesi.
TIMEFRAMETimeframe
INITIAL_CAPITAL · CURRENCYCapitale iniziale
ORDER_SIZE · ORDER_SIZE_TYPEDimensione ordine predefinita
PYRAMIDINGPiramidazione
BAR_MAGNIFIERDettaglio delle barre
CALC_EVERY_TICK · CALC_ON_FILLSEsecuzione dello script
COMMISSION · COMMISSION_TYPECommissione
MARGIN_LONG · MARGIN_SHORTLeva long e short
SLIPPAGESlippage
LIMIT_FILL_TICKSEsecuzione degli ordini limite
FILL_ON_BAR_CLOSERitardo di esecuzione degli ordini
runtime.error()Interrompe lo script su qualsiasi altro timeframe.
//@version=6
// ============================================================================
// Trend breakout · ATR risk — PineBag strategy template
// ============================================================================
// ----------------------------------------------------------------------------
// STRATEGY PROPERTIES (TradingView: Settings → Properties)
// ----------------------------------------------------------------------------
// TIMEFRAME takes a standard TradingView interval. Paste one of these, by the
// lowest TradingView plan that has it (tradingview.com/pricing, Charts):
// Basic days "1D" "1W" "1M" "3M" "6M" "12M"
// Essential minutes "1" "3" "5" "15" "30" "45"
// hours "60" "120" "180" "240"
// ranges "1R" "10R" "100R" "1000R"
// Premium seconds "1S" "5S" "10S" "15S" "30S" "45S"
// Ultimate ticks "1T" "10T" "100T" "1000T"
// Other intervals are custom and not used: a week is "1W", not "7D".
const string TIMEFRAME = "1D" // Chart timeframe
const float INITIAL_CAPITAL = 100000 // Initial capital
const string CURRENCY = currency.USD // Initial capital currency
const float ORDER_SIZE = 100 // Default order size
const string ORDER_SIZE_TYPE = strategy.percent_of_equity // Order size: % of equity
const int PYRAMIDING = 1 // Pyramiding
const bool BAR_MAGNIFIER = false // Bar detalization: Default (4 ticks per bar)
const bool CALC_EVERY_TICK = false // Script execution: On bar close
const bool CALC_ON_FILLS = false // Script execution: no recalculation after fills
const float COMMISSION = 0 // Commission
const string COMMISSION_TYPE = strategy.commission.percent // Commission: Percent
const float MARGIN_LONG = 100 // Long leverage 1x (leverage = 100 / margin)
const float MARGIN_SHORT = 100 // Short leverage 1x
const int SLIPPAGE = 0 // Slippage, ticks
const int LIMIT_FILL_TICKS = 0 // Limit order execution: Requested price
const bool FILL_ON_BAR_CLOSE = false // Order execution delay: One tick
strategy("Trend breakout · ATR risk", overlay = true,
initial_capital = INITIAL_CAPITAL,
currency = CURRENCY,
default_qty_type = ORDER_SIZE_TYPE,
default_qty_value = ORDER_SIZE,
pyramiding = PYRAMIDING,
use_bar_magnifier = BAR_MAGNIFIER,
calc_on_every_tick = CALC_EVERY_TICK,
calc_on_order_fills = CALC_ON_FILLS,
commission_type = COMMISSION_TYPE,
commission_value = COMMISSION,
margin_long = MARGIN_LONG,
margin_short = MARGIN_SHORT,
slippage = SLIPPAGE,
backtest_fill_limits_assumption = LIMIT_FILL_TICKS,
process_orders_on_close = FILL_ON_BAR_CLOSE)
// Stops with a clear message on any other timeframe; PineBag reads TIMEFRAME
// and selects it for the run.
if timeframe.period != TIMEFRAME
runtime.error("Switch the chart to the " + TIMEFRAME + " timeframe.")
// ----------------------------------------------------------------------------
// INPUT SETTINGS (TradingView: Settings → Inputs)
// ----------------------------------------------------------------------------
fastLength = input.int(20, "Fast EMA", minval = 1)
slowLength = input.int(50, "Slow EMA", minval = 2)
breakoutLength = input.int(20, "Breakout lookback", minval = 2)
atrLength = input.int(14, "ATR length", minval = 1)
atrStop = input.float(2.0, "ATR stop multiplier", minval = 0.1, step = 0.1)
// ----------------------------------------------------------------------------
// CALCULATIONS
// ----------------------------------------------------------------------------
fast = ta.ema(close, fastLength)
slow = ta.ema(close, slowLength)
atr = ta.atr(atrLength)
highestBefore = ta.highest(high, breakoutLength)[1]
// ----------------------------------------------------------------------------
// ENTRIES AND EXITS
// ----------------------------------------------------------------------------
longSignal = fast > slow and close > highestBefore
if longSignal and strategy.position_size == 0
strategy.entry("Long", strategy.long)
stopPrice = strategy.position_avg_price - atr * atrStop
strategy.exit("ATR stop", "Long", stop = stopPrice)
// ----------------------------------------------------------------------------
// PLOTS
// ----------------------------------------------------------------------------
plot(fast, "Fast EMA", color = color.rgb(0, 153, 255))
plot(slow, "Slow EMA", color = color.rgb(123, 97, 255))
Valori di TIMEFRAME
Scrivi tra virgolette uno degli intervalli standard di TradingView. Quali si caricano dipende dal tuo piano TradingView, come indicato su tradingview.com/pricing.
Giorni, settimane e mesi.
"1D" "1W" "1M" "3M" "6M" "12M"
Minuti, ore e barre range. I minuti non hanno lettera; un’ora è 60.
"1" "3" "5" "15" "30" "45""60" "120" "180" "240""1R" "10R" "100R" "1000R"
Intervalli in secondi.
"1S" "5S" "10S" "15S" "30S" "45S"
Intervalli a tick.
"1T" "10T" "100T" "1000T"
const string TIMEFRAME = "1D" // 1 day
// const string TIMEFRAME = "1W" // 1 week
// const string TIMEFRAME = "240" // 4 hours
// const string TIMEFRAME = "15" // 15 minutes
// const string TIMEFRAME = "30S" // 30 seconds, Premium and higher
Dimensione dell’ordine: percentuale, importo o quantità
ORDER_SIZE contiene il numero e ORDER_SIZE_TYPE indica cosa significa. Insieme compilano il campo Order size della scheda Properties di TradingView.
strategy.percent_of_equity
Una percentuale del capitale attuale. 10 significa il 10% del capitale per operazione.
strategy.cash
Un importo nella valuta della strategia. 1000 significa 1.000 USD per operazione.
strategy.fixed
Un numero di contratti, azioni o coin. 0.5 significa 0,5 BTC per operazione.
qty = …
La dimensione predefinita vale solo per gli ordini senza un proprio qty. Un ingresso con qty = … usa invece quel valore.
// 10% of equity per trade
const float ORDER_SIZE = 10
const string ORDER_SIZE_TYPE = strategy.percent_of_equity
// 1,000 USD per trade (CURRENCY = currency.USD)
// const float ORDER_SIZE = 1000
// const string ORDER_SIZE_TYPE = strategy.cash
// 0.5 contracts, shares or coins per trade
// const float ORDER_SIZE = 0.5
// const string ORDER_SIZE_TYPE = strategy.fixed
Variabili personali
Tieni le impostazioni della tua logica di strategia in un blocco INPUT SETTINGS separato. Ogni chiamata a input.int(), input.float() o input.bool() diventa un campo della scheda Inputs di TradingView, così puoi regolarla senza modificare il codice.
// ----------------------------------------------------------------------------
// INPUT SETTINGS (TradingView: Settings → Inputs)
// ----------------------------------------------------------------------------
fastLength = input.int(20, "Fast EMA", minval = 1)
slowLength = input.int(50, "Slow EMA", minval = 2)
breakoutLength = input.int(20, "Breakout lookback", minval = 2)
atrLength = input.int(14, "ATR length", minval = 1)
atrStop = input.float(2.0, "ATR stop multiplier", minval = 0.1, step = 0.1)