Strategi dagangan pelarian momentum berdasarkan corak candlestick


Tarikh penciptaan: 2023-11-28 10:33:31 Akhirnya diubah suai: 2023-11-28 10:33:31
Salin: 0 Bilangan klik: 602
1
fokus pada
1617
Pengikut

Strategi dagangan pelarian momentum berdasarkan corak candlestick

Artikel ini membentangkan strategi perdagangan terobosan dinamik berdasarkan bentuk garis K. Strategi ini menilai trend pasaran dan masa masuk dengan mengenal pasti bentuk kerucut.

Gambaran Keseluruhan Strategi

Strategi penembusan dinamik terutamanya menilai isyarat pembalikan yang berpotensi, masuk ke dalam bidang dengan mengenal pasti bentuk multicore atau airborne. Setelah mengenal pasti isyarat, ikuti tren dengan cepat, dan capai keuntungan tambahan.

Prinsip Strategi

Logik penghakiman teras strategi penembusan dinamik adalah berdasarkan pengenalan bentuk menelan, bentuk menelan dibahagikan kepada dua jenis, iaitu menelan berbilang kepala dan menelan kosong.

Melancap berbilang adalah harga penutupan hari yang lebih tinggi daripada harga pembukaan, dan harga penutupan K baris di atas adalah lebih rendah daripada harga pembukaan K baris di atas. Bentuk ini biasanya menandakan perubahan dalam sentimen pasaran, psikologi berbilang berbalik, dan oleh itu adalah masa yang baik untuk mengejar dengan betul.

Pencerobohan kepala kosong adalah bertentangan dengan pencerobohan kepala berbilang, yang bermaksud bahawa harga penutupan pada hari itu adalah lebih rendah daripada harga pembukaan, dan harga penutupan pada baris K teratas adalah lebih tinggi daripada harga pembukaan pada baris K teratas. Ini juga menandakan perubahan sentimen pasaran, dan oleh itu peluang untuk campur tangan kepala kosong.

Setelah mengenal pasti corak penelan, strategi pemecahan momentum akan dengan cepat membina kedudukan, mencapai kelebihan leverage, dan mengesan trend pembalikan yang berpotensi. Selain itu, strategi ini juga akan secara dinamik menyesuaikan harga hentian dan harga hentian, dan mengawal risiko dengan ketat sambil memastikan keuntungan.

Kelebihan Strategik

  1. Mencari peluang dengan cepat
  2. Risiko-keuntungan yang bersesuaian, penyetempatan stop loss yang munasabah
  3. Leverage boleh disesuaikan untuk memenuhi pilihan risiko yang berbeza
  4. Perdagangan automatik sepenuhnya, lebih cekap

Risiko Strategik

  1. Pencerobohan hanya untuk rujukan, tidak dapat dipastikan sepenuhnya
  2. Kemungkinan kegagalan putaran balik, kemungkinan untuk membentuk gegaran sempit
  3. Leverage terlalu tinggi boleh menyebabkan kerugian.
  4. Keperluan dana yang mencukupi untuk menyokong kedudukan yang betul

Mengambil kira risiko, anda boleh mengoptimumkan dari beberapa aspek berikut:

  1. Gabungan dengan petunjuk lain untuk menapis isyarat
  2. Pengaturan yang sesuai untuk risiko pengehadkan leverage
  3. Langkah-langkah untuk membina lebih banyak gudang, kos purata bagi setiap kumpulan
  4. Mengoptimumkan strategi hentian dan penghentian kerugian untuk memastikan keuntungan

Pengoptimuman Strategi

Strategi penembusan momentum boleh dioptimumkan dari dimensi berikut:

  1. Pengesahan pelbagai faktor kebolehpercayaan isyarat Indikator seperti garis rata-rata, kadar lonjakan dan lain-lain boleh dimasukkan untuk mengesahkan isyarat menelan dan memastikan kebolehpercayaan isyarat.

  2. Kaedah untuk menilai sentimen pasaran dengan menggunakan emosi Indeks sentimen, seperti indeks panik dan indeks keserakahan, yang digabungkan dengan pasaran, dapat lebih tepat menentukan kapan pasaran akan berbalik.

  3. Mengoptimumkan strategi hentian hentian Anda boleh mengunci keuntungan dan mengurangkan risiko penarikan balik dengan cara berhenti bergerak, hentian beransur-ansur, dan hentian bergerak.

  4. Pengenalan perdagangan algoritma Model algoritma seperti pembelajaran mesin boleh digunakan untuk membantu menilai isyarat perdagangan dan meningkatkan tahap automasi strategi.

ringkaskan

Strategi penembusan momentum secara keseluruhan adalah strategi pembalikan yang lebih tipikal. Ia membalikkan dengan menangkap isyarat K-line yang penting, membuat penilaian cepat dan mengikuti trend pasaran. Walaupun masih ada risiko tertentu, ia boleh dioptimumkan dengan berkesan dengan pelbagai cara, mengawal risiko berbanding keuntungan dalam julat yang munasabah, sesuai untuk pelabur yang proaktif.

Kod sumber strategi
/*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)