Scripting: scrivere una strategia

Uno script strategia definisce decide(bars, params, ctx, state) e restituisce una decisione per ogni barra chiusa. La decisione guida il conto di valutazione simulato e nient'altro.

Senzoukria · Documentazione · Aggiornato a settembre 2026


Dove trovarlo

Dove
Pagina Scripting → Nuova strategia
Punto di ingresso
decide(bars, params, ctx, state), che restituisce una decisione oppure null
Cadenza
Una volta per barra chiusa — la barra in formazione non viene mai passata
Conto
Il conto di valutazione simulato su questa macchina; la piattaforma non instrada alcun ordine verso un broker
Linguaggi
JavaScript e Python condividono lo stesso punto di ingresso e la stessa forma di decisione

Che cosa fa

Una strategia gira nella stessa sandbox di un indicatore. Dopo il tuo codice viene aggiunto un breve wrapper — dopo, così i numeri di riga restano quelli che vedi nell'editor — che chiama decide(), normalizza ciò che torna e trasporta l'oggetto state alla barra successiva.

Se decide() non è definita, l'esecuzione fallisce con un messaggio che ricorda che una strategia deve definire decide(bars, params, ctx, state). Se restituisce undefined o null, è una risposta valida che significa «nessuna operazione su questa barra», e la fascia di esecuzione riporta «Nessuna operazione su questo campione».

Il contesto porta la posizione simulata, un indicatore di posizione piatta e la dimensione del tick, così le distanze si esprimono in tick e lo stesso script funziona su un altro contratto senza modifiche.

L'oggetto decisione

Che cosa può restituire decide()
CampoPredefinitoChe cosa cambia
action: "buy"Apre un long a mercato sul conto simulato, nel rispetto dei limiti del conto.
action: "sell"Apre uno short a mercato, con gli stessi limiti.
action: "close"Chiude la posizione aperta; innocuo se sei già piatto.
qty1Contratti. Arrotondato per difetto e portato ad almeno 1.
stopTicksnessunoDistanza di uscita in perdita, in tick dal prezzo di esecuzione.
targetTicksnessunoDistanza di uscita in profitto, in tick.
nullNessuna operazione su questa barra.
state{}Tutto ciò che memorizzi sull'oggetto state ti viene restituito alla barra successiva; viene azzerato quando lo script cambia.

Come usarla

  • Parti dal modello Strategia di breakout: compra la rottura del massimo di N barre con stop e target fissi, e mostra come usare lo stato trasportato per contare le barre di permanenza in posizione.
  • Esegui prima sui dati di esempio — l'esecuzione di una strategia dice se una decisione è stata restituita o no, il modo più rapido per scoprire una condizione che non scatta mai.
  • Poi montala nel pannello Strategia automatica del Replay per vederla decidere barra per barra su dati reali riprodotti.
  • Esprimi il rischio in tick, non in prezzi: la dimensione del tick arriva nel contesto e il conto traduce la distanza in un livello di uscita.

Limiti e trappole

  • I limiti del conto si applicano prima di ogni ingresso: un drawdown superato, un limite di perdita giornaliera raggiunto o un tetto di contratti oltrepassato lo rifiutano, e il pannello mostra il motivo.
  • Un valore di ritorno che non è una decisione riconosciuta viene segnalato come tale, con l'elenco delle forme accettate.
  • Poiché le decisioni si prendono su barre chiuse, una strategia non può agire su un movimento infrabarra — è questo che rende confrontabili un'esecuzione live in simulato e un backtest dello stesso codice.
  • Nessuno script può raggiungere un broker. Qui una strategia è una strategia su carta, e nessun risultato che produce è una promessa sul trading reale.

Questa pagina in altre lingue

Domande frequenti

Si può scrivere una strategia in Python?
Sì. Il wrapper esiste in ogni linguaggio e viene aggiunto nel linguaggio dello script, quindi una strategia Python riceve un wrapper Python. Scrivi le chiavi della decisione come stopTicks e targetTicks: è quello che legge il pannello Strategia automatica. Il ciclo di backtest Python accetta anche stop_ticks e target_ticks.
Come conservo un valore tra una barra e l'altra?
Scrivilo sull'oggetto state passato come quarto argomento. Ti viene restituito alla chiamata successiva e azzerato quando cambi script.
Perché il mio acquisto è stato rifiutato?
O l'ha bloccato un limite del conto — il motivo viene stampato — oppure non era disponibile alcun prezzo live per il simbolo, e in quel caso l'ingresso attende invece di inventare un'esecuzione.