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
TIMEFRAME(TF, mode)TIMEFRAME(default)Parametere
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
TF | timeframe-nøkkelord | ingen | Må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å. |
mode | updateonclose eller default | default | updateonclose 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)
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 breakevenRSI-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)
// 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
ENDIFDet 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)
// 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
ENDIFFordi 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,defaulter en oppdateringsmodus.TIMEFRAME(4 hours, default)ogTIMEFRAME(default)gjør forskjellige ting. - Intrabar-verdier endres under
defaultmodus. En betingelse som er sann midt i en bar, kan være falsk når baren i høyere tidsramme lukkes. Brukupdateonclosenå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).
Relaterte instruksjoner
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.