Unterstützungs- und Widerstandsstrategie mit Volumenbruch und Trailing Stop Loss

Schriftsteller:ChaoZhang, Datum: 2024-01-11 17:58:26
Tags:

img

Übersicht

Die Hauptidee dieser Strategie besteht darin, Unterstützung/Widerstandsniveaus und Volumen-Ausbrüche zu kombinieren, um Eingangssignale zu ermitteln, und den ATR-Indikator zu verwenden, um den Stop-Loss für die Gewinnentnahme dynamisch anzupassen, um mehr potenzielle Gewinne zu erzielen.

Strategie Logik

Die Strategie besteht aus folgenden Hauptlogiken:

  1. Verwenden Sie ta.pivothigh und ta.pivotlow, um den höchsten Preis der vorherigen L_Bars-Kerzen und den niedrigsten Preis der vorherigen R_Bars-Kerzen als Widerstands- und Unterstützungsniveau zu berechnen.

  2. Wenn der Schlusskurs über die Widerstandsstufe und das Volumen über die VolumeRange-Schwelle geht, geht man lang.

  3. Nach einem langen Eintritt setzt man den Stop-Loss auf close-ATR_LO. Nach einem kurzen Eintritt setzt man den Stop-Loss auf close+ATR_SH. Dies ermöglicht eine dynamische Einstellung des Trailing-Stop-Loss.

  4. Es werden keine neuen Aufträge nach Erreichen der durch den Risikobereitwert definierten Tagesrisikogrenze aufgenommen.

Analyse der Vorteile

  1. Verwenden Sie die Stützungs-Widerstandstheorie in Kombination mit dem Volumenindikator, um die Eingangsgenauigkeit zu verbessern.

  2. Der auf ATR basierende Trailing-Stop-Loss kann den Stop-Level flexibel anhand der Marktvolatilität anpassen und somit die Chance auf Gewinnrückführung verringern.

  3. Eine angemessene Kontrolle der täglichen Handelszeiten und des jeweiligen Handelsrisikos hilft, den Trend zu erfassen und einen übermäßigen Stop-Loss zu vermeiden.

Risikoanalyse

  1. Unterstützungs-/Widerstandsniveaus können versagen und keine wirksamen Eintrittssignale liefern.

  2. Der zu hohe ATR-Multiplikator kann dazu führen, dass der Stop-Loss zu weit entfernt ist, was das Verlustrisiko erhöht.

  3. Eine zu niedrige Volumenschwelle kann Gelegenheiten verpassen, zu hohe kann zu falschen Signalen führen.

Lösungen:

  • Anpassung der Stützungs-/Widerstandsparameter anhand verschiedener Produkte-Eigenschaften.

  • Optimierung des ATR-Multiplikators und der Volumenschwellenparameter.

  • Hinzufügen anderer Indikatoren zur Bestätigung der Eingangssignale.

Optimierungsrichtlinien

  1. Hinzufügen anderer Indikatoren wie gleitender Durchschnittswerte, um Eingangssignale zu bestimmen.

  2. Optimieren Sie Parameter wie ATR-Multiplikator und Volumenschwelle.

  3. Verwenden Sie Machine-Learning-Algorithmen, um dynamische Parameteroptimierung zu realisieren.

  4. Strategie auf andere Produkte ausweiten, um Parametermuster zu finden.

Zusammenfassung

Die Strategie integriert verschiedene Analysewerkzeuge, wendet Support/Resistance, Volumen und Stop-Loss-Methoden an und erzielt gute Backtest-Ergebnisse.


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



Mehr