Innertägige Pivot-Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-03 16:35:15
Tags:

img

Übersicht

Diese Strategie erzeugt Handelssignale auf der Grundlage von Preis-Breakouts innerhalb eines bestimmten Zeitraums.

Strategie Logik

Die Strategie berechnet den höchsten Höchststand und das niedrigste Tief des Preises innerhalb eines bestimmten Zeitrahmens, bekannt als Pivot-Hoch und Pivot-Tief, um die Preisbewegungen zu messen.

Es erzeugt ein langes Signal, wenn das aktuelle Bar-Hoch über das Pivot-Hoch bricht. Ein kurzes Signal wird erzeugt, wenn das aktuelle Bar-Low unter das Pivot-Tief bricht.

Nach dem Eintritt verwendet die Strategie ATR für Stop-Loss und Intraday-Stop-Loss. Sie schließt auch alle Positionen in einem bestimmten Zeitrahmen (z. B. 14:55).

Die Strategie erfasst effektiv Trends, indem sie einfache Preisbreaks in bestimmten Perioden verwendet, was sie ideal für den Intraday-Handel macht.

Vorteile

  • Trendveränderungen zuverlässig anhand von Preisdurchbrüchen erfassen
  • Einfache Umsetzung mit grundlegenden OHLC-Daten
  • Risikomanagement mit angemessenem Stop-Loss und Intraday-Stop-Loss
  • Vermeidet Übernachtrisiken, die für den Intraday-Handel geeignet sind
  • Wenige Parameter leicht zu optimieren

Risiken und Minderungsmaßnahmen

  • Potenzielle Verzögerung, kann frühen Trendstart verpassen

    Anpassung des Zeitrahmens oder Kombination anderer Indikatoren für die Einführung

  • Mehr falsche Signale, wenn der Trend unklar ist

    Stimmen Sie die Parameter ein, fügen Sie Filter wie Indikatoren, Lautstärke usw. hinzu.

  • Höhere Kapitalkosten für den aktiven Intraday-Handel

    Anpassung der Positionsgröße, Verlängerung der Haltedauer

  • Abhängigkeit von Parameteroptimierung

    Anpassung von Parametern an sich ändernde Marktbedingungen durch maschinelles Lernen usw.

Möglichkeiten zur Verbesserung

  • Testen Sie andere Preisdaten wie typischen Preis, Medianpreis usw.

  • Fügen Sie Filter wie Volumen, Volatilität

  • Versuchen Sie verschiedene Parameterkombinationen

  • Einbeziehung von Trendindikatoren zur Bestimmung der Richtung

  • Automatische Optimierung von Parametern mithilfe von maschinellem Lernen

  • Erweiterung auf mehrere Zeitrahmen für besseren Eintrag

Schlussfolgerung

Die Strategie hat eine klare und prägnante Logik und nutzt Preisschwankungen effektiv, um kurzfristige Trends mit guten Gewinnfaktoren zu erfassen. Mit wenigen passenden Parametern, die leicht zum Testen und Optimieren sind, eignet sie sich gut für den Intraday-Handel. Während Verzögerungen und falsche Signale vorhanden sind, können sie durch Parameter-Tuning, Hinzufügen von Filtern usw. behoben werden.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//   ____________        _________           _____________
//  |____________|      ||________|          ||__________|
//       ||             ||        ||         ||
//       ||             ||________||         ||
//       ||     H E     ||________   U L L   ||       H A R T I S T
//       ||             ||        ||         ||
//       ||             ||________||         ||__________
//       ||             ||________|          ||__________|
  
//@version=5
// strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0)
leftbars = input(defval = 10)
rightbars = input(defval = 15)

// ═══════════════════════════ //
// ——————————> INPUTS <——————— //
// ═══════════════════════════ //

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, '0935-1400:1234567')
time_cond = true

// ══════════════════════════════════ //
// ———————————> 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

longStop = close - ATR_LO
shortStop = 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')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

ph = ta.pivothigh(close,leftbars, rightbars)
pl = ta.pivotlow(close,leftbars, rightbars)

pvt_condition1 = not na(ph)

upper_price = 0.0
upper_price := pvt_condition1 ? ph : upper_price[1]

pvt_condition2 = not na(pl)

lower_price = 0.0
lower_price := pvt_condition2 ? pl : lower_price[1]

// Signals
long  = ta.crossover(high, upper_price + syminfo.mintick)
short = ta.crossunder(low, lower_price - syminfo.mintick)

plot(upper_price, color= close > ema1  ? color.green : na, style=plot.style_line, title='PH')

plot(lower_price,  color= close <  ema1  ? color.red : na, style=plot.style_line, title='PL')


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

if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "B")
    
//plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = longStop ,comment='S')
 

// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "S") 

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

// ════════════════════════════════════════════════//
// ————————> 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