Iscriviti ora
ProBacktest/probacktest · proorder

TIMEFRAME (PB/PO)

TIMEFRAME in ProBacktest e ProOrder esegue il codice della strategia su un altro timeframe. Sintassi, modalità updateonclose e predefinita, ed esempi di ordini multi-timeframe.

Sintassi

probuilder
TIMEFRAME(TF, mode)
probuilder
TIMEFRAME(default)

Parametri

NomeTipoPredefinitoDescrizione
TFparola chiave timeframenessunoTimeframe di destinazione per le righe seguenti, per esempio 1 minute, 15 minutes, 1 hour, 4 hours, daily, weekly. Deve essere maggiore o uguale al timeframe su cui gira la strategia.
modeupdateonclose o defaultdefaultupdateonclose aggiorna i valori della sezione solo quando un TF il bar chiude. default li ricalcola su ogni bar del timeframe più piccolo, usando il valore in formazione TF barra.

Come funziona

Una strategia viene associata a un solo timeframe di base quando viene avviata, e quella base deve essere il timeframe più piccolo usato dal codice. Ogni riga dopo un TIMEFRAME(TF, mode) la chiamata viene valutata su bar di TF fino alla successiva chiamata TIMEFRAME. TIMEFRAME(default) torna al timeframe di base, dove normalmente risiede il codice di gestione degli ordini.

Il mode argomento controlla quando la sezione a timeframe superiore si aggiorna. Con updateonclose, le variabili in quella sezione cambiano solo quando la bar del timeframe superiore si completa, quindi un RSI a 1 ora mantiene il suo valore per tutta l'ora. Con default, la sezione viene ricalcolata su ogni bar del timeframe di base usando il bar del timeframe superiore corrente, ancora in formazione, quindi i valori si muovono all'interno del bar e possono differire dalla lettura finale a bar chiuso.

Le variabili mantengono i loro valori tra le sezioni TIMEFRAME. Un booleano calcolato in un 1 hour il blocco può essere letto nel default blocco nella stessa esecuzione, che è il pattern standard: deriva il segnale sul timeframe superiore, agisci su di esso in quello più fine.

Esempi

Esempio 1, Segnale orario con gestione degli ordini a 1 minuto (ProOrder)

probuilder
defparam cumulateorders = false

// Compute the entry signal on the 1-hour timeframe
TIMEFRAME(1 hour, updateonclose)
myrsi = rsi[14]
buycondition = myrsi crosses over 50

// Manage orders on the 1-minute base timeframe
TIMEFRAME(1 minute, default)
if buycondition then
  buy 10 contract at market
endif

if not onmarket then
  breakeven = 0
endif

if longonmarket and close - tradeprice >= 15 * pointsize then
  breakeven = 1
endif

if breakeven = 1 then
  sell at tradeprice + 5 * pointsize stop
endif

graph breakeven

L'incrocio dell'RSI viene rilevato una volta per ogni bar oraria chiusa, mentre lo stop di uscita viene valutato minuto per minuto. Questo è l'esempio canonico tratto dalla documentazione ufficiale.

Esempio 2, Filtro di trend giornaliero per ingressi intraday (ProBacktest)

probuilder
// Trend filter computed on closed daily bars
TIMEFRAME(daily, updateonclose)
dailyMA = Average[200](close)
uptrend = close > dailyMA

// Entries and exits on the base timeframe
TIMEFRAME(default)
IF NOT onmarket AND uptrend AND close CROSSES OVER Average[20](close) THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

IF longonmarket AND close CROSSES UNDER Average[20](close) THEN
  SELL AT MARKET
ENDIF

La media giornaliera a 200 periodi funge da filtro di regime. Gli ingressi scattano sul timeframe di base solo mentre la chiusura giornaliera si trova sopra di essa.

Esempio 3, Lettura intrabar di un indicatore a 4 ore (ProOrder)

probuilder
// The 4-hour RSI updates on every base-timeframe bar (default mode)
TIMEFRAME(4 hours, default)
h4rsi = RSI[14](close)

// Act on the base timeframe
TIMEFRAME(default)
IF NOT onmarket AND h4rsi < 30 THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

IF longonmarket AND h4rsi > 70 THEN
  SELL AT MARKET
ENDIF

Poiché la sezione a 4 ore usa default modalità, l'RSI riflette la bar a 4 ore in formazione, quindi la strategia può reagire prima della chiusura della bar.

Errori e insidie comuni

  • Il timeframe di base non è il più piccolo. Ogni TIMEFRAME(TF) chiamata deve fare riferimento a un timeframe maggiore o uguale a quello su cui la strategia viene lanciata. Richiedere un timeframe inferiore a quello di base viene rifiutato.
  • I due significati di default. Come unico argomento, TIMEFRAME(default) torna al timeframe di base. Come secondo argomento, default è una modalità di aggiornamento. TIMEFRAME(4 hours, default) e TIMEFRAME(default) fanno cose diverse.
  • I valori intrabar cambiano sotto default modalità. Una condizione vera a metà bar può essere falsa quando la bar del timeframe superiore chiude. Usa updateonclose quando la logica deve vedere solo bars confermate, e aspettati che i risultati del backtest differiscano tra le due modalità.
  • Variante TIMEFRAME errata. ProScreener accetta una forma diversa di questa istruzione. La sintassi dello screener incollata nel codice ProBacktest o ProOrder, o viceversa, non compila. Vedi TIMEFRAME (PS).
  • TIMEFRAME (PS), la variante ProScreener di questa istruzione.
  • DEFPARAM, parametri a livello di strategia come CumulateOrders.
  • CumulateOrders, controlla se ingressi ripetuti si cumulano in un'unica posizione.
  • ONMARKET, vero mentre una qualsiasi posizione è aperta.
  • LONGONMARKET, vero mentre una posizione long è aperta.
  • TRADEPRICE, il prezzo di esecuzione di un'operazione passata.
  • BUY, apre una posizione long.
  • SELL, chiude una posizione long.