TIMEFRAME (PB/PO)
TIMEFRAME dans ProBacktest et ProOrder exécute le code de stratégie sur une autre unité de temps. Syntaxe, modes updateonclose et par défaut, et exemples d'ordres multi-unités de temps.
Syntaxe
TIMEFRAME(TF, mode)TIMEFRAME(default)Paramètres
| Nom | Type | Par défaut | Description |
|---|---|---|---|
TF | mot-clé timeframe | aucun | Unité de temps cible pour les lignes suivantes, par exemple 1 minute, 15 minutes, 1 hour, 4 hours, daily, weekly. Doit être supérieure ou égale à l'unité de temps sur laquelle la stratégie s'exécute. |
mode | updateonclose ou default | default | updateonclose actualise les valeurs de la section uniquement lorsqu'une TF la bar clôture. default les recalcule sur chaque bar de la plus petite unité de temps, en utilisant la valeur en cours de formation TF barre. |
Comment ça marche
Une stratégie est rattachée à une unité de temps de base à son lancement, et cette base doit être la plus petite unité de temps utilisée par le code. Chaque ligne après un TIMEFRAME(TF, mode) appel est évalué sur des bars de TF jusqu'au prochain appel TIMEFRAME. TIMEFRAME(default) revient à l'unité de temps de base, là où se trouve habituellement le code de gestion des ordres.
Le mode argument contrôle le moment où la section en unité de temps supérieure se met à jour. Avec updateonclose, les variables de cette section ne changent que lorsque le bar de l'unité de temps supérieure est achevé, un RSI 1 heure conserve donc sa valeur pendant toute l'heure. Avec default, la section est recalculée à chaque bar de l'unité de temps de base en utilisant le bar en cours de formation de l'unité de temps supérieure, les valeurs bougent donc intrabar et peuvent différer de la lecture finale sur bar clôturé.
Les variables conservent leurs valeurs d'une section TIMEFRAME à l'autre. Un booléen calculé dans une 1 hour bloc peut être lu dans le default bloc sur la même exécution, ce qui est le schéma standard : dériver le signal sur l'unité de temps supérieure, agir dessus sur la plus fine.
Exemples
Exemple 1, Signal horaire avec gestion des ordres en 1 minute (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 breakevenLe croisement du RSI est détecté une fois par bar horaire clôturé, tandis que le stop de sortie est évalué minute par minute. C'est l'exemple canonique de la référence officielle.
Exemple 2, Filtre de tendance journalier pour des entrées intraday (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
ENDIFLa moyenne journalière sur 200 périodes sert de filtre de régime. Les entrées ne se déclenchent sur l'unité de temps de base que tant que la clôture journalière se situe au-dessus.
Exemple 3, Lecture intra-bar d'un indicateur 4 heures (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
ENDIFParce que la section 4 heures utilise default mode, le RSI reflète la bar 4 heures en cours de formation, la stratégie peut donc réagir avant la clôture de la bar.
Erreurs et pièges courants
- L'unité de temps de base n'est pas la plus petite. Chaque
TIMEFRAME(TF)l'appel doit référencer une unité de temps supérieure ou égale à celle sur laquelle la stratégie est lancée. Demander une unité de temps plus petite que la base est rejeté. - Les deux sens de
default. Comme seul argument,TIMEFRAME(default)revient à l'unité de temps de base. En second argument,defaultest un mode de mise à jour.TIMEFRAME(4 hours, default)etTIMEFRAME(default)font des choses différentes. - Les valeurs intrabar changent sous
defaultmode. Une condition vraie en cours de bar peut être fausse une fois la bar de l'unité de temps supérieure clôturée. Utilisezupdateoncloselorsque la logique ne doit voir que des barres confirmées, et attendez-vous à ce que les résultats de backtest diffèrent entre les deux modes. - Mauvaise variante de TIMEFRAME. ProScreener accepte une forme différente de cette instruction. La syntaxe screener collée dans du code ProBacktest ou ProOrder, ou l'inverse, ne compile pas. Voir
TIMEFRAME (PS).
Instructions liées
TIMEFRAME (PS), la variante ProScreener de cette instruction.DEFPARAM, paramètres au niveau de la stratégie tels que CumulateOrders.CumulateOrders, contrôle si des entrées répétées s'accumulent en une seule position.ONMARKET, vrai tant qu'une position est ouverte.LONGONMARKET, vrai tant qu'une position long est ouverte.TRADEPRICE, le prix d'exécution d'un trade passé.BUY, ouvre une position long.SELL, clôture une position long.