
Cette stratégie est une stratégie de trading à intervalles réguliers basée sur la technologie dynamique, utilisant le stop loss ATR. La stratégie a été créée par Kory Hoang de Stable.
La stratégie utilise l’indicateur de dynamique pour identifier la direction de la tendance, en combinaison avec l’indicateur ATR pour définir une ligne de stop-loss, pour réaliser une stratégie de trading de choc bas à bas.
Le code définit d’abord le délai de réponse.
Ensuite, il y a la partie des indicateurs, qui comptera les indicateurs suivants:
La logique principale pour juger de la tendance est la suivante:
Si la clôture est supérieure à la ligne d’arrêt vstop précédant la baisse, elle est considérée comme tendance à la hausse; si la clôture est inférieure à la ligne d’arrêt vstop précédant la hausse, elle est considérée comme tendance à la baisse.
Ajustez la position de la ligne de stop lorsque la tendance change.
Plus précisément, dans une tendance à la hausse, le stop loss est défini comme le prix le plus élevé de la ligne K précédente moins le montant de l’ATR; dans une tendance à la baisse, le stop loss est défini comme le prix le plus bas de la ligne K précédente plus le montant de l’ATR.
Il s’agit d’une méthode qui permet de suivre la tendance et d’arrêter les pertes.
Dans la section des règles de négociation, il est recommandé de faire plus de couverture en cas de rupture de la ligne de stop-loss.
Cette stratégie présente les avantages suivants:
Cette stratégie comporte aussi des risques:
L’optimisation peut être réalisée dans les domaines suivants:
Cette stratégie peut être optimisée dans les directions suivantes:
Tester différents paramètres ATR pour trouver la combinaison optimale des paramètres. Les paramètres de plusieurs groupes peuvent être retestés pour évaluer le rapport bénéfice-risque.
La ligne d’arrêt optimisée en combinaison avec un indicateur de volatilité basé sur l’ATR. Des indicateurs de volatilité peuvent être introduits, assouplissant de manière appropriée la marge d’arrêt lorsque la volatilité augmente.
Le filtrage des tendances permet d’éviter que les marchés oscillants n’ouvrent des positions. Il est possible d’augmenter les indicateurs de jugement des tendances et de ne les ouvrir que lorsque la tendance est claire.
Augmentation du mécanisme de gestion des positions. Les positions peuvent être ajustées en fonction de l’utilisation des fonds, du nombre de arrêts de pertes consécutifs, etc.
Augmentation du contrôle des risques de la nuit. Il est possible d’arrêter activement les pertes avant la clôture pour éviter les sauts de prix de nuit.
Cette stratégie sert de base à la stratégie de trading sur les chocs intra-jour, la pensée générale est claire, l’utilisation de la dynamique technique pour juger de la tendance et l’utilisation de l’indicateur ATR pour le suivi des points de glissement et des arrêts de perte permettent de contrôler efficacement le risque.
Il y a beaucoup de place pour l’optimisation, et des améliorations peuvent être apportées à la suite de plusieurs aspects tels que le jugement de la tendance, la méthode de stop-loss et la gestion de la position, afin de rendre la stratégie plus adaptée à la négociation en bourse. Dans l’ensemble, cette stratégie fournit un bon cadre de base pour la négociation quantitative.
/*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