Quantitative Handelsstrategie zur Umkehrung des ATR-Kanals

Schriftsteller:ChaoZhang, Datum: 2023-12-11
Tags:

img

Übersicht

Dies ist eine langfristige Strategie, die Eintrittssignale identifiziert, wenn die Preise unterhalb des unteren Bandes des ATR-Kanals brechen, und Gewinn macht, wenn die Preise das mittlere Band (EMA) oder das obere Band des ATR-Kanals erreichen.

Strategie Logik

Wenn der Preis unter dem unteren ATR-Band bricht, signalisiert dies einen Anomalie-Rückgang. Die Strategie wird bei der nächsten Kerzenöffnung lang gehen. Der Stop-Loss wird auf den Einstiegspreis minus ATR-Stop-Loss-Multiplikator mal ATR gesetzt. Take-Profit befindet sich im mittleren Band (EMA) oder oberen ATR-Band. Wenn der aktuelle Bar-Close niedriger ist als der vorherige Bar-Low, dann verwenden Sie die vorherigen Bar-Low als Take-Profit.

Insbesondere umfasst die Schlüssellogik:

  1. Berechnung der ATR und des mittleren Bandes (EMA)
  2. Zeitfilter definieren
  3. Identifizierung des langen Signals, wenn der Preis < unterer ATR-Band
  4. Eintritt bei der nächsten offenen Bar.
  5. Rekord-Eingangspreis
  6. Berechnung des Stop-Loss-Preises
  7. Gewinnspanne, wenn der Preis > mittlere Band (EMA) oder oberer ATR-Band
  8. Stopp-out, wenn der Preis < Stop-Loss-Preis

Analyse der Vorteile

Die Vorteile dieser Strategie:

  1. Verwendet ATR-Kanal für zuverlässige Ein- und Ausstiegssignale
  2. Nur lange nach dem Anomaliefall vermeidet das Verfolgen von Höhen
  3. Strenge Stop-Loss-Risikokontrollen
  4. Für schnelle kurzfristige Geschäfte geeignet
  5. Einfache Logik, einfach umzusetzen und zu optimieren

Risikoanalyse

Es gibt einige Risiken:

  1. Eine hohe Handelsfrequenz führt zu höheren Transaktionskosten und Verschiebungen
  2. Folgende Stop-Loss-Trigger können auftreten
  3. Eine unangemessene Optimierung der Parameter beeinträchtigt die Leistung
  4. Große Kursschwankungen können zu einem übergroßen Stop-Loss führen

Diese Risiken können durch Anpassung der ATR-Periode, des Stop-Loss-Multiplikators usw. verringert werden.

Optimierungsrichtlinien

Die Strategie kann verbessert werden, indem

  1. Hinzufügen anderer Filterindikatoren, um zu vermeiden, dass beste Eingangssignale fehlen
  2. Optimierung der ATR-Periode
  3. Überlegung eines Wiedereintrittsmechanismus
  4. Anpassungsfähige Stop-Loss-Größe
  5. Hinzufügen eines Trendfilters zur Vermeidung von Gegentrends

Schlussfolgerung

Zusammenfassend ist dies eine einfache und praktische Mittelumkehrstrategie, die auf dem ATR-Kanal basiert. Sie hat klare Einstiegsregeln, strenge Stop Loss und einen angemessenen Gewinn. Es gibt auch Raum für Parameter-Tuning. Wenn Händler das richtige Symbol wählen und das Risiko mit Stop Loss kontrollieren können, kann diese Strategie gute Ergebnisse erzielen.


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


Mehr