Word nu lid
ProBacktest/probacktest · proorder

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

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

Parameters

NaamTypeStandaardBeschrijving
TFtimeframe-keywordgeenDoeltijdframe 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.
modeupdateonclose of defaultdefaultupdateonclose 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)

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

De 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)

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

Het 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)

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

Omdat 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, default is een updatemodus. TIMEFRAME(4 hours, default) en TIMEFRAME(default) doen verschillende dingen.
  • Intrabarwaarden veranderen onder default modus. Een voorwaarde die midden in een bar waar is, kan onwaar zijn zodra de bar van het hogere tijdframe sluit. Gebruik updateonclose wanneer 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).
  • 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.