Iāve been running a backtest on BTC/USD (1 hour timeframe) and the results are decent over the last year. However, when I look closely at the trade list, the drawdown is heavy on Saturdays and Sundays.
It feels like the technicals donāt respect the support/resistance levels as much when the traditional banks are closed and volume is lower.
Does anyone here have a reliable code snippet to automatically close all positions on Friday night and restart Monday morning? Or is it better to just filter the entries and keep the winning trades open?
I am trading with IG data if that makes a difference.
Oui ā sur ProRealTime, il est tout Ć fait possible de Ā« dĆ©sactiver Ā» lāexposition au week-end dans les backtests en (1) forƧant une mise Ć plat le vendredi Ć une heure prĆ©cise, et (2) en bloquant toute nouvelle entrĆ©e jusquāĆ une heure donnĆ©e le lundi. Cāest gĆ©nĆ©ralement prĆ©fĆ©rable au simple filtrage des entrĆ©es, car un filtrage seul peut encore vous laisser en position pendant le week-end (lĆ où le drawdown se produit).
- Approche A (recommandƩe dans ton cas) : ClƓturer toutes les positions le vendredi soir + dƩsactiver les entrƩes pendant le week-end.
- Approche B : Filtrer uniquement les entrées. à utiliser seulement si ton edge dépend réellement du maintien des positions pendant le week-end (ce qui est rarement le cas lorsque la structure et les volumes du week-end sont différents).
Logique centrale (pourquoi Ƨa fonctionne) :
- On calcule un booléen allowTrading à partir de dayofweek et time.
- Quand allowTrading = 0, on bloque toute nouvelle entrƩe.
- Le vendredi, Ć partir de lāheure de coupure dĆ©finie, on force la clĆ“ture de toute position long ou short afin de ne pas porter de risque sur le samedi/dimanche.
Extrait ProBacktest / ProOrder (à placer en haut de ta stratégie) :
// ===== Mise Ć plat week-end + filtre dāentrĆ©es (BTC/USD H1) =====
// Ajuste ces horaires selon tes besoins (heure de la plateforme)
DEFPARAM CumulateOrders = False
fridayCutoff = 220000 // Vendredi 22:00:00
mondayRestart = 010000 // Lundi 01:00:00
// dayofweek : 1=Lundi … 5=Vendredi … 7=Dimanche
allowTrading = 1
// Blocage du trading pendant le week-end + avant lāheure de reprise du lundi
IF dayofweek = 6 OR dayofweek = 7 THEN
allowTrading = 0
ELSIF dayofweek = 5 AND time >= fridayCutoff THEN
// ClƓture forcƩe de toute position ouverte
IF longonmarket THEN
SELL AT MARKET
ELSIF shortonmarket THEN
EXITSHORT AT MARKET
ENDIF
// Blocage des nouvelles entrĆ©es aprĆØs lāheure de coupure
allowTrading = 0
ENDIF
// Exemple dāutilisation : encapsuler les conditions dāentrĆ©e
// IF allowTrading AND conditionLong THEN
// BUY 1 CONTRACT AT MARKET
// ENDIF
// IF allowTrading AND conditionShort THEN
// SELLSHORT 1 CONTRACT AT MARKET
// ENDIF
Points importants pour les donnƩes BTC/USD (IG) :
- Fuseau horaire : la variable time est Ć©valuĆ©e selon lāheure de lāinstrument et de la session du graphique. Si ton Ā« vendredi soir Ā» diffĆØre, ajuste fridayCutoff et mondayRestart.
- Barre dāexĆ©cution : en H1, ā22:00:00ā correspond Ć lāhorodatage de la bougie de 22h. La clĆ“ture se dĆ©clenchera sur la premiĆØre bougie où time ā„ fridayCutoff et où lāon est vendredi.
- Effet spread / volatilité : se mettre à plat avant le week-end réduit souvent le risque de queues de distribution et de mouvements erratiques, mais peut aussi couper certaines continuations de tendance. Le backtest te dira ce qui domine.
Quand le simple filtrage des entrƩes est prƩfƩrable :
- Si lāedge de ton systĆØme repose sur un momentum multi-jours et que le maintien des positions le week-end fait partie intĆ©grante de la stratĆ©gie, alors conserve les positions, mais envisage un stop ou une taille spĆ©cifique au week-end ou un plafond de risque.
- Dans le cas contraire, si ton drawdown se concentre sur le samedi/dimanche, la règle mise à plat + blocage des entrées est la solution la plus propre et la plus contrÓlable.