TIMEFRAME (PB/PO)
TIMEFRAME in ProBacktest en ProOrder voert strategiecode uit op een ander tijdframe. Syntaxis, updateonclose versus de standaardmodus en ordervoorbeelden met meerdere tijdframes.
Syntaxis
TIMEFRAME(TF, mode)TIMEFRAME(default)Parameters
| Naam | Type | Standaard | Beschrijving |
|---|---|---|---|
TF | timeframe-keyword | geen | Doeltijdframe voor de volgende regels, bijvoorbeeld 1 minute, 15 minutes, 1 hour, 4 hours, daily, weekly. Moet groter dan of gelijk zijn aan het tijdframe waarop de strategie loopt. |
mode | updateonclose of default | default | updateonclose vernieuwt de waarden van de sectie alleen wanneer een TF bar sluit. default herberekent ze op elke bar van het kleinste tijdframe, met gebruik van de nog vormende TF bar. |
Hoe het werkt
Een strategie wordt bij het starten aan één basistijdframe gekoppeld, en dat basistijdframe moet het kleinste tijdframe zijn dat de code gebruikt. Elke regel na een TIMEFRAME(TF, mode) aanroep wordt geëvalueerd tegen bars van TF tot de volgende TIMEFRAME-aanroep. TIMEFRAME(default) schakelt terug naar het basistijdframe, waar ordermanagementcode gewoonlijk staat.
De mode argument bepaalt wanneer de sectie met het hogere tijdframe wordt bijgewerkt. Met updateonclose, veranderen variabelen in die sectie alleen wanneer de bar van het hogere tijdframe is voltooid, dus een RSI op 1 uur houdt zijn waarde het hele uur vast. Met default, herberekent de sectie op elke bar van het basistijdframe met de huidige, nog vormende bar van het hogere tijdframe, dus waarden bewegen intrabar en kunnen afwijken van de uiteindelijke waarde bij barclose.
Variabelen behouden hun waarden over TIMEFRAME-secties heen. Een boolean berekend in een 1 hour blok kan gelezen worden in de default blok in dezelfde run, en dat is het standaardpatroon: leid het signaal af op het hogere tijdframe en handel erop op het fijnere.
Voorbeelden
Voorbeeld 1, Signaal op uurbasis met orderbeheer op 1 minuut (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 breakevenDe RSI-kruising wordt eenmaal per gesloten uurbar gedetecteerd, terwijl de uitstapstop minuut voor minuut wordt geëvalueerd. Dit is het canonieke voorbeeld uit de officiële referentie.
Voorbeeld 2, Dagelijks trendfilter voor intraday instappen (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
ENDIFHet daggemiddelde over 200 periodes werkt als regimefilter. Instappen worden alleen geactiveerd op het basistijdframe zolang de dagelijkse slotkoers erboven ligt.
Voorbeeld 3, Intrabar uitlezen van een 4-uursindicator (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
ENDIFOmdat de 4-uursectie gebruikmaakt van default modus weerspiegelt de RSI de zich vormende 4-uursbar, zodat de strategie kan reageren voordat de bar sluit.
Veelvoorkomende fouten en valkuilen
- Basistijdframe niet het kleinste. Elke
TIMEFRAME(TF)aanroep moet verwijzen naar een tijdframe dat groter is dan of gelijk aan het tijdframe waarop de strategie wordt gestart. Een kleiner tijdframe dan het basistijdframe opvragen wordt geweigerd. - De twee betekenissen van
default. Als enige argument,TIMEFRAME(default)gaat terug naar het basistijdframe. Als tweede argument,defaultis een updatemodus.TIMEFRAME(4 hours, default)enTIMEFRAME(default)doen verschillende dingen. - Intrabarwaarden veranderen onder
defaultmodus. Een voorwaarde die midden in een bar waar is, kan onwaar zijn zodra de bar van het hogere tijdframe sluit. Gebruikupdateonclosewanneer de logica alleen bevestigde bars mag zien, en verwacht dat backtest-resultaten tussen de twee modi verschillen. - Verkeerde TIMEFRAME-variant. ProScreener accepteert een andere vorm van deze instructie. Screenersyntaxis die in ProBacktest- of ProOrder-code wordt geplakt, of omgekeerd, compileert niet. Zie
TIMEFRAME (PS).
Gerelateerde instructies
TIMEFRAME (PS), de ProScreener-variant van deze instructie.DEFPARAM, parameters op strategieniveau zoals CumulateOrders.CumulateOrders, bepaalt of herhaalde instappen zich opstapelen in één positie.ONMARKET, waar zolang er een positie open is.LONGONMARKET, waar zolang er een long positie open is.TRADEPRICE, de uitvoeringsprijs van een eerdere trade.BUY, opent een long positie.SELL, sluit een long positie.