
Cette stratégie est une stratégie de simple surplus qui utilise la rupture du prix de la limite inférieure du canal ATR pour déterminer le moment d’entrée et la sortie avec la ligne moyenne du canal ATR ou la limite supérieure du canal ATR comme arrêt. En même temps, elle utilise également l’ATR pour calculer le prix d’arrêt.
Lorsque le prix dépasse la limite inférieure du canal ATR, cela indique qu’il y a une baisse anormale du prix. À ce moment-là, la stratégie effectue une entrée supplémentaire lors de l’ouverture de la prochaine ligne K. Le prix d’arrêt est le prix d’entrée moins le coefficient d’arrêt ATR multiplié par ATR. Le prix d’arrêt est la ligne moyenne du canal ATR ou la limite du canal ATR.
Plus précisément, la stratégie est basée sur la logique suivante:
Cette stratégie présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Il est également important de choisir un courtier dont les frais de transaction sont moins élevés.
La stratégie peut également être optimisée pour:
La stratégie est globalement simple et pratique. Elle a des règles d’entrée claires, un mécanisme de stop-loss strict et une méthode de stop-loss parfaite. Elle offre également un espace d’optimisation pour l’ajustement de certains paramètres.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bcullen175
//@version=5
strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5)
SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended")
src = input(close, title="Source")
period = input.int(10, "ATR & MA PERIOD")
plot(open+ta.atr(period))
plot(open-ta.atr(period))
plot((ta.ema(src, period)), title = "Mean", color=color.white)
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")
// Check filter(s)
f_dateFilter = true
atr = ta.atr(period)
// Check buy/sell conditions
var float buyPrice = 0
buyCondition = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter
sellCondition = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period))
stopDistance = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na
stopPrice = strategy.position_size > 0 ? (buyPrice - SLx*atr): na
stopCondition = strategy.position_size > 0 and low < stopPrice
// Enter positions
if buyCondition
strategy.entry(id="Long", direction=strategy.long)
if buyCondition[1]
buyPrice := open
// Exit positions
if sellCondition or stopCondition
strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
buyPrice := na
// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)