Il s'agit d'une stratégie de trading d'intervalle quotidien basée sur des techniques de momentum utilisant des arrêts ATR. Elle a été créée par Kory Hoang de Stably.
La stratégie identifie la direction de la tendance à l'aide d'indicateurs de dynamique et définit des lignes de stop-loss basées sur l'ATR pour mettre en œuvre un swing trading à faible prix d'achat et à forte valeur de vente.
Le code définit d'abord la plage de temps de backtesting.
Ensuite, dans la section des indicateurs, les indicateurs suivants sont calculés:
La logique principale pour juger de la tendance est:
Si la clôture est supérieure à la ligne de stop-loss à la baisse précédente, elle est jugée comme une tendance haussière; si la clôture est inférieure à la ligne de stop-loss à la baisse précédente, elle est jugée comme une tendance à la baisse.
Lorsque la tendance change, ajustez la position de la ligne stop loss.
Plus précisément, dans une tendance haussière, la ligne d'arrêt-perte est réglée sur le prix le plus élevé de la barre précédente moins la valeur ATR; dans une tendance baissière, la ligne d'arrêt-perte est réglée sur le prix le plus bas de la barre précédente plus la valeur ATR.
Il s'agit de réaliser la tendance après le stop loss.
Dans la section "Règles de négociation", ouvrez des positions longues ou courtes lorsque le prix franchit la ligne de stop loss.
Les avantages de cette stratégie:
Il y a aussi des risques:
Quelques optimisations:
Quelques pistes pour optimiser cette stratégie:
Testez différents paramètres ATR pour trouver l'optimum, testez plusieurs ensembles de paramètres et évaluez le rapport rendement/risque.
Optimiser le stop loss en combinant des métriques de volatilité en plus de l'ATR. Ajouter des métriques de volatilité, détendre correctement le stop loss pendant les périodes de volatilité croissante.
Ajouter des indicateurs de jugement de tendance, ne négocier que lorsque la tendance est claire.
Ajustez la taille de la position en fonction du ratio d'utilisation du compte, des temps de stop loss consécutifs, etc.
Ajoutez un contrôle du risque de déficit du jour au lendemain.
En tant que stratégie de trading quotidien de base, la logique générale est claire: elle juge la tendance avec des techniques de dynamique et utilise l'ATR pour suivre le stop loss, contrôlant efficacement le risque.
La stratégie de trading quantitative est une stratégie de trading quantitative qui permet d'optimiser la stratégie de trading quantitative et de l'améliorer.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100) ///////////////////////////////////////////////////////////// //START - SET DATE RANGE // === BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1) FromDay = input(defval = 1, title = "From Day", minval = 1) FromYear = input(defval = 2010, title = "From Year") ToMonth = input(defval = 12, title = "To Month", minval = 1) ToDay = input(defval = 31, title = "To Day", minval = 1) ToYear = input(defval = 2020, title = "To Year") startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1) endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59) withinTimeRange = true ///////////////////////////////////////////////////////////// //END - SET DATE RANGE ///////////////////////////////////////////////////////////// //START - INDICATORS length = input(3) mult = input(1, minval = 0.01) atr_ = atr(length) max1 = max(nz(max_[1]), close) min1 = min(nz(min_[1]), close) is_uptrend_prev = nz(is_uptrend[1], true) stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_ vstop_prev = nz(vstop[1]) vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop) is_uptrend = close - vstop1 >= 0 is_trend_changed = is_uptrend != is_uptrend_prev max_ = is_trend_changed ? close : max1 min_ = is_trend_changed ? close : min1 vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1 plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2) ///////////////////////////////////////////////////////////// //END - INDICATORS ///////////////////////////////////////////////////////////// //START - TRADING RULES direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1) strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) condition1 = close > vstop and withinTimeRange condition2 = close < vstop and withinTimeRange strategy.entry("BUY", strategy.long, when = condition1) strategy.entry("SELL", strategy.short, when = condition2) ///////////////////////////////////////////////////////////// //END - TRADING RULES