Stratégie de négociation quantitative de réversion moyenne du canal ATR

Auteur:ChaoZhang est là., Date: 2023-12-11 15h38 et 25h
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie à long terme qui identifie les signaux d'entrée lorsque les prix dépassent la bande inférieure du canal ATR et tire profit lorsque les prix atteignent la bande moyenne (EMA) ou la bande supérieure du canal ATR.

La logique de la stratégie

Lorsque le prix dépasse la bande inférieure de l'ATR, cela indique une baisse d'anomalie. La stratégie sera longue à l'ouverture de la prochaine bougie. Le stop loss est fixé au prix d'entrée moins le multiplicateur de la perte d'arrêt de l'ATR fois l'ATR. Le profit est au niveau de la bande moyenne (EMA) ou de la bande supérieure de l'ATR. Si la fermeture actuelle des barres est inférieure à celle des barres précédentes, utilisez les barres précédentes comme prise de profit.

Plus précisément, la logique clé comprend:

  1. Calcul de l'ATR et de la bande moyenne (EMA)
  2. Définir les filtres de temps
  3. Identifier le signal long lorsque le prix < bande ATR inférieure
  4. Entrez long au prochain bar ouvert
  5. Prix d'entrée record
  6. Calcul du prix de stop-loss
  7. Prise de profit lorsque le prix est supérieur à la fourchette moyenne (EMA) ou supérieure à la fourchette ATR
  8. Arrêt lorsque le prix < prix stop-loss

Analyse des avantages

Les avantages de cette stratégie:

  1. Utilise le canal ATR pour des signaux d'entrée et de sortie fiables
  2. Ce n'est que longtemps après que l'anomalie a chuté qu'il a évité de courir après des sommets
  3. Contrôles stricts du risque de stop-loss
  4. Convient pour les transactions rapides à court terme
  5. La logique est simple, facile à mettre en œuvre et à optimiser.

Analyse des risques

Il y a des risques:

  1. Une fréquence de négociation élevée entraîne des coûts de transaction plus élevés et des glissements
  2. Des déclencheurs de stop loss consécutifs peuvent se produire
  3. L'optimisation inappropriée des paramètres affecte les performances
  4. Les grandes fluctuations de prix peuvent entraîner un stop loss trop important

Ces risques peuvent être réduits en ajustant la période d'ATR, le multiplicateur de stop loss, etc. Le choix de courtiers avec de faibles frais de négociation est également important.

Directions d'optimisation

La stratégie peut être améliorée par:

  1. Ajout d'autres indicateurs de filtre pour éviter de manquer les meilleurs signaux d'entrée
  2. Optimisation de la période ATR
  3. L'examen du mécanisme de réentrée
  4. Taille du stop-loss adaptatif
  5. Ajout d'un filtre de tendance pour éviter les transactions contre-tendance

Conclusion

En résumé, il s'agit d'une stratégie simple et pratique de réversion moyenne basée sur le canal ATR. Elle comporte des règles d'entrée claires, un stop loss strict et un profit raisonnable. Il y a également de la place pour l'ajustement des paramètres. Si les traders peuvent choisir le bon symbole et contrôler le risque avec un stop loss, cette stratégie peut obtenir de bons résultats.


/*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)


Plus de