TIMEFRAME (PB/PO)
TIMEFRAME i ProBacktest och ProOrder kör strategikod på en annan tidsram. Syntax, lägena updateonclose och default, och orderexempel med flera tidsramar.
Syntax
TIMEFRAME(TF, mode)TIMEFRAME(default)Parametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
TF | nyckelordet timeframe | ingen | Måltidsram för de följande raderna, till exempel 1 minute, 15 minutes, 1 hour, 4 hours, daily, weekly. Måste vara större än eller lika med tidsramen som strategin körs på. |
mode | updateonclose eller default | default | updateonclose uppdaterar sektionens värden endast när en TF baren stänger. default räknar om dem på varje bar i den minsta tidsramen, med den pågående TF bar. |
Så fungerar det
En strategi kopplas till en bastidsram när den startas, och den basen måste vara den minsta tidsram koden använder. Varje rad efter en TIMEFRAME(TF, mode) anropet utvärderas mot barer av TF fram till nästa TIMEFRAME-anrop. TIMEFRAME(default) växlar tillbaka till bastidsramen, som är där koden för orderhantering vanligtvis ligger.
Den mode argumentet styr när avsnittet med den högre tidsramen uppdateras. Med updateonclose, ändras variabler i den sektionen bara när baren i den högre tidsramen är klar, så ett RSI på 1 timme håller sitt värde hela timmen. Med default, räknas avsnittet om på varje bar i bastidsramen med den aktuella, ännu oavslutade baren i den högre tidsramen, så värdena rör sig inom baren och kan skilja sig från det slutliga värdet för den stängda baren.
Variabler behåller sina värden över TIMEFRAME-sektioner. En boolean som beräknas i en 1 hour blocket kan läsas i default blocket i samma körning, vilket är standardmönstret: härled signalen på den högre tidsramen och agera på den i den finare.
Exempel
Exempel 1, Timsignal med orderhantering på 1 minut (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-korsningen upptäcks en gång per stängd timbar, medan exitstoppen utvärderas minut för minut. Detta är det kanoniska exemplet från den officiella referensen.
Exempel 2, Trendfilter på dagsbasis för intraday-entries (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-periodiga dagsmedelvärdet fungerar som ett regimfilter. Entries utlöses endast på bastidsramen när dagsstängningen ligger över det.
Exempel 3, Intrabar-läsning av en 4-timmarsindikator (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
ENDIFEftersom 4-timmarsavsnittet använder default läge återspeglar RSI den pågående 4-timmarsbaren, så strategin kan reagera innan baren stänger.
Vanliga fel och fallgropar
- Bastidsramen är inte den minsta. Varje
TIMEFRAME(TF)anropet måste referera till en tidsram som är större än eller lika med den strategin startas på. Att begära en mindre tidsram än basen avvisas. - De två betydelserna av
default. Som enda argument,TIMEFRAME(default)återgår till bastidsramen. Som andra argument,defaultär ett uppdateringsläge.TIMEFRAME(4 hours, default)ochTIMEFRAME(default)gör olika saker. - Intrabarvärden ändras under
defaultläge. Ett villkor som är sant mitt i en bar kan vara falskt när baren i den högre tidsramen stänger. Användupdateonclosenär logiken bara ska se bekräftade barer, och räkna med att backtest-resultaten skiljer sig mellan de två lägena. - Fel TIMEFRAME-variant. ProScreener accepterar en annan form av den här instruktionen. Screener-syntax som klistras in i ProBacktest- eller ProOrder-kod, eller omvänt, kompilerar inte. Se
TIMEFRAME (PS).
Relaterade instruktioner
TIMEFRAME (PS), ProScreener-varianten av denna instruktion.DEFPARAM, parametrar på strateginivå, till exempel CumulateOrders.CumulateOrders, styr om upprepade entries staplas till en enda position.ONMARKET, sant så länge någon position är öppen.LONGONMARKET, sant så länge en long-position är öppen.TRADEPRICE, exekveringspriset för en tidigare affär.BUY, öppnar en long-position.SELL, stänger en long-position.