Bli medlem i dag
ProBacktest/probacktest · proorder

TIMEFRAME (PB/PO)

TIMEFRAME i ProBacktest og ProOrder kjører strategikode på en annen tidsramme. Syntaks, updateonclose vs standardmodus, og eksempler på ordrer i flere tidsrammer.

Syntaks

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

Parametere

NavnTypeStandardBeskrivelse
TFtimeframe-nøkkelordingenMåltidsramme for linjene som følger, for eksempel 1 minute, 15 minutes, 1 hour, 4 hours, daily, weekly. Må være større enn eller lik tidsrammen strategien kjører på.
modeupdateonclose eller defaultdefaultupdateonclose oppdaterer seksjonens verdier bare når en TF baren lukkes. default beregner dem på nytt på hver bar i den minste tidsrammen, ved å bruke den utviklende TF bar.

Slik fungerer det

En strategi knyttes til én basistidsramme når den startes, og den basisen må være den minste tidsrammen koden bruker. Hver linje etter en TIMEFRAME(TF, mode) kallet evalueres mot barer på TF til neste TIMEFRAME-kall. TIMEFRAME(default) bytter tilbake til grunntidsrammen, som er der kode for ordrehåndtering vanligvis ligger.

Den mode argumentet styrer når seksjonen for høyere tidsramme oppdateres. Med updateonclose, endres variabler i den seksjonen bare når baren i den høyere tidsrammen fullføres, så en RSI på 1 time holder verdien sin hele timen. Med default, beregnes seksjonen på nytt på hver bar i basistidsrammen med den gjeldende, ennå ikke ferdige baren i den høyere tidsrammen, så verdiene beveger seg intrabar og kan avvike fra den endelige avlesningen på lukket bar.

Variabler beholder verdiene sine på tvers av TIMEFRAME-seksjoner. En boolsk verdi beregnet i en 1 hour blokken kan leses i default blokk i samme kjøring, som er standardmønsteret: utled signalet på den høyere tidsrammen, og handle på det i den finere.

Eksempler

Eksempel 1, Timesignal med ordrehåndtering på 1 minutt (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

RSI-kryssingen oppdages én gang per lukket timesbar, mens utgangsstoppen evalueres minutt for minutt. Dette er det kanoniske eksempelet fra den offisielle referansen.

Eksempel 2, Daglig trendfilter for intraday-innganger (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

Det 200-perioders daglige gjennomsnittet fungerer som et regimefilter. Innganger utløses bare på basistidsrammen så lenge den daglige lukkekursen ligger over det.

Eksempel 3, Intrabar-lesing av en 4-timers indikator (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

Fordi 4-timersdelen bruker default -modus reflekterer RSI den utviklende 4-timersbaren, så strategien kan reagere før baren lukkes.

Vanlige feil og fallgruver

  • Basistidsrammen er ikke den minste. Hver TIMEFRAME(TF) -kallet må referere til en tidsramme som er større enn eller lik den strategien kjøres på. Å be om en mindre tidsramme enn basen blir avvist.
  • De to betydningene av default. Som eneste argument, TIMEFRAME(default) returnerer til grunntidsrammen. Som andre argument, default er en oppdateringsmodus. TIMEFRAME(4 hours, default) og TIMEFRAME(default) gjør forskjellige ting.
  • Intrabar-verdier endres under default modus. En betingelse som er sann midt i en bar, kan være falsk når baren i høyere tidsramme lukkes. Bruk updateonclose når logikken bare skal se bekreftede barer, og forvent at backtest-resultatene skiller seg mellom de to modusene.
  • Feil TIMEFRAME-variant. ProScreener godtar en annen form av denne instruksjonen. Screener-syntaks limt inn i ProBacktest- eller ProOrder-kode, eller omvendt, kompilerer ikke. Se TIMEFRAME (PS).
  • TIMEFRAME (PS), ProScreener-varianten av denne instruksjonen.
  • DEFPARAM, parametere på strateginivå, som CumulateOrders.
  • CumulateOrders, styrer om gjentatte innganger stables til én posisjon.
  • ONMARKET, sann så lenge en posisjon er åpen.
  • LONGONMARKET, sann så lenge en long-posisjon er åpen.
  • TRADEPRICE, utførelsesprisen for en tidligere handel.
  • BUY, åpner en long-posisjon.
  • SELL, lukker en long-posisjon.