strategi perdagangan momentum breakout

Penulis:ChaoZhang, Tanggal: 2023-11-28 10:33:31
Tag:

img

Artikel ini memperkenalkan strategi perdagangan momentum yang didasarkan pada pola candlestick. Strategi ini mengidentifikasi tren pasar dan peluang masuk dengan mengenali formasi candlestick.

Tinjauan Strategi

Strategi momentum breakout terutama menilai sinyal pembalikan potensial dengan mengidentifikasi pola bullish engulfing atau pola bearish engulfing untuk memasuki pasar. Setelah mengidentifikasi sinyal, itu dengan cepat melacak tren untuk mencapai hasil yang berlebihan.

Prinsip Strategi

Logika inti dari strategi momentum breakout didasarkan pada identifikasi pola engulfing, termasuk engulfing bullish dan engulfing bearish.

Sebuah pola bullish engulfing terbentuk ketika harga penutupan periode saat ini lebih tinggi dari harga pembukaan, dan harga penutupan periode sebelumnya lebih rendah dari harga pembukaan periode sebelumnya.

Pola penyerapan bearish terbentuk ketika harga penutupan periode saat ini lebih rendah dari harga pembukaan, dan harga penutupan periode sebelumnya lebih tinggi dari harga pembukaan periode sebelumnya.

Setelah mengidentifikasi pola engulfing, strategi momentum breakout dengan cepat menetapkan posisi dengan leverage berlebih untuk melacak tren pembalikan potensial.

Keuntungan

  1. Mengidentifikasi peluang pembalikan pasar dengan cepat
  2. Rasio risiko-manfaat yang seimbang dengan stop loss dan take profit yang tepat
  3. Pendapatan leverage yang dapat disesuaikan dengan selera risiko yang berbeda
  4. Efisiensi tinggi dengan perdagangan otomatis

Risiko

  1. Pola menelan tidak sepenuhnya memastikan pembalikan
  2. Probabilitas kegagalan breakout dan pergerakan harga sampingan
  3. Risiko likuidasi akibat leverage yang berlebihan
  4. Membutuhkan modal yang cukup untuk mendukung ukuran posisi yang memadai

Peningkatan

Strategi dapat dioptimalkan dengan cara berikut:

  1. Masukkan indikator lain untuk menyaring sinyal
  2. Sesuaikan leverage untuk membatasi risiko
  3. Skala ke basis biaya yang lebih rendah
  4. Optimalkan stop loss dan mengambil keuntungan untuk mengunci keuntungan

Ringkasan

Strategi momentum breakout adalah strategi reversi rata-rata yang khas. Dengan menangkap sinyal candlestick utama, ia dengan cepat menilai dan melacak pembalikan tren pasar. Meskipun risiko ada, strategi dapat secara efektif ditingkatkan melalui beberapa teknik optimasi untuk mengontrol rasio risiko-balasan.


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


Lebih banyak