
Diese Strategie ist eine auf Dynamiktechnik basierende Intervall-Shock-Trading-Strategie mit ATR-Stopp. Die Strategie wurde von Kory Hoang von Stably entwickelt.
Die Strategie nutzt Dynamik-Indikatoren, um die Richtung des Trends zu erkennen, in Kombination mit dem ATR-Indikator, um eine Stop-Loss-Linie zu setzen, um eine Shock-Trading-Strategie zu erreichen, bei der es zu niedrigen und hohen Verkaufszahlen kommt.
Der Code setzt zunächst den Zeitrahmen für die Rückmessung ein.
Im folgenden Abschnitt werden die folgenden Indikatoren berechnet:
Die wichtigste Logik für die Beurteilung von Trends ist:
Wenn der Schlusskurs höher ist als der Stop-Line-V-Stop, der zuvor gefallen ist, wird er als Aufwärtstrend beurteilt. Wenn der Schlusskurs niedriger ist als der Stop-Line-V-Stop, der zuvor gestiegen ist, wird er als Abwärtstrend beurteilt.
Die Position der Stop-Line wird angepasst, wenn sich der Trend ändert.
Im Aufwärtstrend wird die Stop-Line als der höchste Preis der vorherigen K-Linie minus der ATR definiert. Im Abwärtstrend wird die Stop-Line als der niedrigste Preis der vorherigen K-Linie plus der ATR definiert.
Dies ermöglicht eine Trend-Tracking-Stop-Loss.
Der Teil der Handelsregeln beinhaltet, dass bei einem Bruch der Stop-Loss-Linie ein Plus-Low-Low-Position eröffnet wird.
Diese Strategie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken:
Die Optimierung kann in folgenden Bereichen erfolgen:
Die Strategie kann in folgenden Richtungen optimiert werden:
Verschiedene ATR-Parameter werden getestet, um die optimale Kombination von Parametern zu finden. Mehrfache Parameter können zurückgetestet werden, um den Gewinn-Risiko-Verhältnis zu bewerten.
Die Stop-Line kann in Kombination mit einem Volatilitätsindikator auf der Grundlage des ATR optimiert werden. Es kann ein Volatilitätsindikator eingeführt werden, der die Stop-Line bei zunehmender Volatilität angemessen lockert.
In Kombination mit einem Trendfilter ist es unnötig, Positionen zu eröffnen, wenn der Markt im Aufprall ist. Sie können die Indikatoren für die Trendbeurteilung erhöhen und nur dann Positionen eröffnen, wenn der Trend eindeutig ist.
Erhöhung des Positionsmanagementsystems. Die Positionen können anhand der Kapitalnutzung und der Anzahl der aufeinanderfolgenden Stop-Loss-Funktionen angepasst werden.
Erhöhung der Risikokontrolle für die Übernachtungszeit. Sie können die Verluste vor dem Schließen aktiv stoppen, um zu verhindern, dass die Preise über Nacht springen.
Diese Strategie dient als Basis für eine intraday-Schock-Trading-Strategie, die übersichtliche Überlegung, die Verwendung von Dynamiktechniken, um Trends zu beurteilen, und die Verwendung von ATR-Indikatoren für die Verfolgung von Stop-Loss-Schieben, um das Risiko effektiv zu kontrollieren.
Es gibt noch viel Optimierungsmöglichkeiten, und es können weitere Verbesserungen vorgenommen werden, um die Strategie für den realen Handel zu optimieren. Insgesamt bietet die Strategie einen guten Rahmen für den quantitativen Handel.
/*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