Die Ressourcen sind geladen. Beförderung...

Momentum-Breakout-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-28 10:33:31
Tags:

img

Dieser Artikel stellt eine Dynamik-Breakout-Handelsstrategie vor, die auf Candlestick-Mustern basiert.

Strategieübersicht

Die Momentum-Breakout-Strategie beurteilt hauptsächlich potenzielle Umkehrsignale, indem sie bullische oder bärische Umschlagmuster für den Markteintritt identifiziert.

Strategieprinzip

Die Kernlogik der Momentum-Breakout-Strategie basiert auf der Identifizierung von Abnahme-Mustern, einschließlich bullischer und bärischer Abnahmen.

Ein bullisches Schwellungsmuster entsteht, wenn der Schlusskurs des laufenden Zeitraums höher als der Eröffnungskurs ist und der Schlusskurs des vorhergehenden Zeitraums niedriger als der Eröffnungskurs des vorhergehenden Zeitraums ist.

Ein Bären-Schwelgungsmuster entsteht, wenn der Schlusskurs des laufenden Zeitraums niedriger als der Eröffnungskurs und der Schlusskurs des vorhergehenden Zeitraums höher als der Eröffnungskurs des vorhergehenden Zeitraums ist.

Nach der Identifizierung eines Verschwemmungsmusters stellt die Momentum-Breakout-Strategie schnell eine Position mit überschüssiger Hebelwirkung her, um den potenziellen Umkehrtrend zu verfolgen.

Vorteile

  1. Schnelle Identifizierung von Marktumkehrmöglichkeiten
  2. Ausgeglichene Risiko-Rendite-Ratio mit angemessener Stop-Loss- und Take-Profit
  3. Anpassungsfähige Hebelwirkung für verschiedene Risikobereitschaften
  4. Hohe Effizienz mit automatisiertem Handel

Risiken

  1. Schmelzmuster, die keine vollständige Umkehrung gewährleisten
  2. Wahrscheinlichkeit eines fehlgeschlagenen Ausbruchs und seitlicher Kursbewegung
  3. Liquidationsrisiko durch übermäßige Hebelwirkung
  4. Erforderung ausreichenden Kapitals zur Unterstützung einer angemessenen Positionsgröße

Verbesserungen

Die Strategie kann wie folgt optimiert werden:

  1. Einbeziehung anderer Indikatoren zum Filtern von Signalen
  2. Anpassung der Hebelwirkung zur Begrenzung des Risikos
  3. Skalieren auf niedrigere Kostenbasis
  4. Optimieren Sie den Stop Loss und nehmen Sie Gewinn, um Gewinne zu erzielen

Zusammenfassung

Die Momentum-Breakout-Strategie ist eine typische Mittelumkehrstrategie. Durch die Erfassung wichtiger Candlestick-Signale beurteilt und verfolgt sie schnell Markttrendumkehrungen. Obwohl Risiken bestehen, kann die Strategie durch mehrere Optimierungstechniken effektiv verbessert werden, um das Risiko-Rendite-Verhältnis zu kontrollieren. Sie eignet sich für aggressive Investoren, die eine arbitrageartige Rendite suchen.


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

//@version=5
strategy(title = "MomGulfing", shorttitle = "MomGulfing", overlay = true, initial_capital=10000, pyramiding=3, calc_on_order_fills=false, calc_on_every_tick=false, currency="USD", default_qty_type=strategy.cash, default_qty_value=1000, commission_type=strategy.commission.percent, commission_value=0.04)

syear = input(2021)
smonth = input(1)
sday = input(1)
fyear = input(2022)
fmonth = input(12)
fday = input(31)
start = timestamp(syear, smonth, sday, 01, 00)
finish = timestamp(fyear, fmonth, fday, 23, 59)
date = time >= start and time <= finish ? true : false

longs = input(true)
shorts = input(true)
rr = input(2.5)
position_risk_percent = input(1)/100
signal_bar_check = input.string(defval="3", options=["1", "2", "3"])
margin_req = input(80)
sl_increase_factor = input(0.2)
tp_decrease_factor = input(0.0)
check_for_volume = input(true)
var long_sl = 0.0
var long_tp = 0.0
var short_sl = 0.0
var short_tp = 0.0
var long_lev = 0.0
var short_lev = 0.0

initial_capital = strategy.equity
position_risk = initial_capital * position_risk_percent

bullishEngulfing_st = close[1] < open[1] and close > open and high[1] < close and (check_for_volume ? volume[1]<volume : true)
bullishEngulfing_nd = close[2] < open[2] and close[1] > open[1] and close > open and high[2] > close[1] and high[2] < close and (check_for_volume ? volume[2]<volume : true)
bullishEngulfing_rd = close[3] < open[3] and close[2] > open[2] and close[1] > open[1] and close > open and high[3] > close[2] and high[3] > close[1] and high[3] < close and (check_for_volume ? volume[3]<volume : true)
bullishEngulfing = signal_bar_check == "1" ? bullishEngulfing_st : signal_bar_check == "2" ? bullishEngulfing_st or bullishEngulfing_nd : bullishEngulfing_st or bullishEngulfing_nd or bullishEngulfing_rd
long_stop_level = bullishEngulfing_st ? math.min(low[1], low) : bullishEngulfing_nd ? math.min(low[2], low[1], low) : bullishEngulfing_rd ? math.min(low[3], low[2], low[1], low) : na
rr_amount_long = close-long_stop_level
long_exit_level = close + rr*rr_amount_long
long_leverage = math.floor(margin_req/math.floor((rr_amount_long/close)*100))

bearishEngulfing_st = close[1] > open[1] and close < open and low[1] > close and (check_for_volume ? volume[1]<volume : true)
bearishEngulfing_nd = close[2] > open[2] and close[1] < open[1] and close < open and low[2] < close[1] and low[2] > close and (check_for_volume ? volume[2]<volume : true)
bearishEngulfing_rd = close[3] > open[3] and close[2] < open[2] and close[1] < open[1] and close < open and low[3] < close[2] and low[3] < close[1] and low[3] > close and (check_for_volume ? volume[3]<volume : true)
bearishEngulfing = signal_bar_check == "1" ? bearishEngulfing_st : signal_bar_check == "2" ? bearishEngulfing_st or bearishEngulfing_nd : bearishEngulfing_st or bearishEngulfing_nd or bearishEngulfing_rd
short_stop_level = bearishEngulfing_st ? math.max(high[1], high) : bearishEngulfing_nd ? math.max(high[2], high[1], high) : bearishEngulfing_rd ? math.max(high[3], high[2], high[1], high) : na
rr_amount_short = short_stop_level-close
short_exit_level = close - rr*rr_amount_short
short_leverage = math.floor(margin_req/math.floor((rr_amount_short/short_stop_level)*100))

long = longs and date and bullishEngulfing
short = shorts and date and bearishEngulfing
bgcolor(long[1] ? color.new(color.teal, 80) : (short[1] ? color.new(color.purple, 80) : na))

if long and strategy.position_size <= 0
    long_lev := long_leverage

if short and strategy.position_size >= 0
    short_lev := short_leverage

long_pos_size = long_lev * position_risk
long_pos_qty = long_pos_size/close
short_pos_size = short_lev * position_risk
short_pos_qty = short_pos_size/close

if long
    if strategy.position_size <= 0
        long_sl := long_stop_level
        long_tp := long_exit_level

    else if strategy.position_size > 0
        long_sl := long_stop_level + sl_increase_factor*rr_amount_long
        long_tp := long_exit_level - tp_decrease_factor*rr_amount_long

    strategy.entry("L"+str.tostring(long_lev)+"X", strategy.long, qty=long_pos_qty)
    label_text = str.tostring(long_lev)+"X\nSL:"+str.tostring(long_sl)+"\nTP:"+str.tostring(long_tp)
    label.new(bar_index+1, na, text=label_text, color=color.green, style=label.style_label_up, xloc=xloc.bar_index, yloc=yloc.belowbar)

else if short
    if strategy.position_size >= 0
        short_sl := short_stop_level
        short_tp := short_exit_level

    else if strategy.position_size < 0
        short_sl := short_stop_level - sl_increase_factor*rr_amount_short
        short_tp := short_exit_level + tp_decrease_factor*rr_amount_short

    strategy.entry("S"+str.tostring(short_lev)+"X", strategy.short, qty=short_pos_qty)
    label_text = str.tostring(short_lev)+"X\nSL:"+str.tostring(short_sl)+"\nTP:"+str.tostring(short_tp)
    label.new(bar_index+1, na, text=label_text, color=color.red, style=label.style_label_down, xloc=xloc.bar_index, yloc=yloc.abovebar)

if (strategy.position_size > 0)
    strategy.exit(id="L TP/SL", stop=long_sl, limit=long_tp)

if (strategy.position_size < 0)
    strategy.exit(id="S TP/SL", stop=short_sl, limit=short_tp)

sl_level = strategy.position_size > 0 ? long_sl : strategy.position_size < 0 ? short_sl : na
plot(sl_level, color=color.red, style=plot.style_linebr)

tp_level = strategy.position_size > 0 ? long_tp : strategy.position_size < 0 ? short_tp : na
plot(tp_level, color=color.green, style=plot.style_linebr)


Mehr