Trailing-Stop-Loss-Strategie basierend auf Unterstützungswiderstand und durchschnittlichem Volumendurchbruch


Erstellungsdatum: 2024-01-11 17:58:26 zuletzt geändert: 2024-01-11 17:58:26
Kopie: 0 Klicks: 548
1
konzentrieren Sie sich auf
1617
Anhänger

Trailing-Stop-Loss-Strategie basierend auf Unterstützungswiderstand und durchschnittlichem Volumendurchbruch

Überblick

Die Hauptidee der Strategie ist es, den Einstiegsmoment zu bestimmen, in Kombination mit einem Durchbruch der Unterstützung, der Resistenz und der Transaktionsmenge, und die Stop-Loss-Tracking-Preise nach dem Gewinn mit dem ATR-Indikator dynamisch anzupassen, um so mehr potenziellen Gewinn zu erzielen.

Strategieprinzip

Die Strategie besteht hauptsächlich aus folgenden Logiken:

  1. Mit den Funktionen ta.pivothigh und ta.pivotlow berechnen Sie die höchsten Werte der L_Bars-K-Linie und die niedrigsten Werte der R_Bars-K-Linie als Widerstands- und Unterstützungslinien.

  2. Wenn der Schlusskurs die Widerstandslinie überschreitet und der Umsatz die Schwelle des VolumeRange überschreitet, machen Sie einen Plus. Wenn der Schlusskurs die Unterstützungslinie unterschreitet und der Umsatz die Schwelle des VolumeRange überschreitet, machen Sie einen Minus.

  3. Nach dem Überschreiten wird mit close-ATR_LO als Long-Stop und nach dem Leerlegen mit close+ATR_SH als Short-Stop ein dynamisch angepasster Tracking-Stop umgesetzt.

  4. In den Handelszeiten ((0915-1445), nach dem ersten Handelssignal pro Tag, wird kein neuer Auftrag eröffnet, wenn der Gewinn oder der Verlust das Risiko erreicht hat.

Strategische Vorteile

  1. Der Einsatz von Stützungswiderstandstheorie in Kombination mit Verkehrsmesswerten ermöglicht eine präzisere Einstiegszeit.

  2. Die Verwendung von ATR-Indikatoren zur Verfolgung von Stop-Loss ermöglicht die flexible Anpassung der Stop-Loss-Position an die Marktschwankungen und reduziert die Wahrscheinlichkeit einer Gewinnwiedergabe nach Gewinn.

  3. Eine angemessene Kontrolle der Anzahl der täglichen Transaktionen und des Risikos für einzelne Transaktionen kann dazu beitragen, Trends zu erfassen und übermäßige Stop-Losses zu vermeiden.

Strategisches Risiko

  1. Die Trägerresistenz könnte versagen und kein wirksames Eintrittssignal liefern.

  2. Der ATR-Wert ist zu hoch gesetzt, was dazu führen kann, dass die Stop-Loss-Distanz zu weit ist und das Risiko von Verlusten erhöht wird.

  3. Ein zu kleiner Umsatz kann zu verpassten Chancen führen. Ein zu großer Umsatz kann zu falschen Signalen führen.

Die Lösung:

  • Anpassung der Stützungswiderstandsparameter an die Eigenschaften der verschiedenen Sorten

  • Optimierung der ATR-Multiplikatoren und der Umsatzdämpfung

  • Zeit für den Einstieg in Kombination mit anderen Indikatoren

Richtung der Strategieoptimierung

  1. In Kombination mit anderen Indikatoren, wie beispielsweise einem Moving Average, kann man die Zeit des Einstiegs bestimmen.

  2. Optimierung der ATR-Multiplikatoren und der Umsatzdämpfung

  3. Dynamische Parameteroptimierung in Kombination mit Machine Learning-Algorithmen

  4. Ausweitung auf andere Sorten und Suche nach Parameterregeln

Zusammenfassen

Die Strategie integriert mehrere Analyse-Tools und erzielt durch den Einsatz von Unterstützungswiderstand, Transaktionsmenge und Stop-Loss-Methoden eine bessere Wirkung in der Rückmessphase. In der Realität können jedoch mehr Unsicherheiten auftreten, die die Realität durch die Optimierung von Parametern und die Einführung anderer Urteilskennzahlen weiter verbessern müssen. Insgesamt ist die Strategie klar und leicht verständlich und bietet einen guten Referenzfall für quantitative Handelsstrategien.

Strategiequellcode
/*backtest
start: 2024-01-03 00:00:00
end: 2024-01-10 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//   ____________                _________                      _____________
//  |____________|             ||________|                      ||__________|
//       ||            ____    ||        ||                     ||                    ______ ________    _____ ________
//       ||    |   || ||       ||________|| |   || ||    ||     ||     |   ||   /\\   |   // |______| || ||    |______|
//       ||    |===|| |===     ||__________ |   || ||    ||     ||     |===||  /__\\  |===      ||    ||   \\     ||
//       ||    |   || ||___    ||        || |___|| ||___ ||___  ||     |   || /    \\ |   \\    ||    || ___||    ||
//       ||                    ||________||                     ||__________
//       ||                    ||________|                      ||__________|
  
//@version=5
strategy("SUPPORT RESISTANCE STRATEGY [5MIN TF]",overlay=true )
L_Bars = input.int(defval = 10, minval = 1 , maxval = 50, step =1)
R_Bars = input.int(defval = 15, minval = 1 , maxval = 50, step =1)
volumeRange = input.int(20, title='Volume Break [threshold]', minval = 1)

// ═══════════════════════════ //
// ——————————> INPUT <——————— //
// ═══════════════════════════ //

EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")


var initialCapital = strategy.equity
t = time(timeframe.period, '0915-1445:1234567')
time_cond = not na(t)

// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)

plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')

// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1

// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2

long_trail = close - ATR_LO
short_trail = close + ATR_SH

// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> RESISTANCE/SUPPORT LEVELS DATA <————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

Resistance_pi = fixnan(ta.pivothigh(L_Bars, R_Bars)[1])
Support_pi = fixnan(ta.pivotlow(L_Bars, R_Bars)[1])
r1 = plot(Resistance_pi, color=ta.change(Resistance_pi) ? na : color.red,  offset=-(R_Bars + 1),linewidth=2, title='RESISTANCE')
s1 = plot(Support_pi, color=ta.change(Support_pi) ? na : color.green, offset=-(R_Bars + 1),linewidth=2, title='SUPPORT')

//Volume 
vol_1 = ta.ema(volume, 5)
vol_2 = ta.ema(volume, 10)
osc_vol = 100 * (vol_1 - vol_2) / vol_2

// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******

if ( ta.crossover(close, Resistance_pi) and osc_vol > volumeRange and not(open - low > close - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "BUY")
    
plot(long_trail , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = long_trail ,comment='SELL')
 
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( ta.crossunder(close, Support_pi) and osc_vol > volumeRange and not(open - close < high - open)  and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "SELL") 

if strategy.position_size < 0
    strategy.exit("short tsl", "Short" ,  stop = short_trail ,comment='BUY')

// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)

// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS  <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)