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
| Campo | Predefinito | Che 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. |
| qty | 1 | Contratti. Arrotondato per difetto e portato ad almeno 1. |
| stopTicks | nessuno | Distanza di uscita in perdita, in tick dal prezzo di esecuzione. |
| targetTicks | nessuno | Distanza di uscita in profitto, in tick. |
| null | — | Nessuna 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.
Pagine correlate
- Eseguire una strategia sul conto simulato
- Galleria dei modelli di script
- Script Python (motore Pyodide)
- Backtest
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.