
Artikel ini membentangkan strategi perdagangan terobosan dinamik berdasarkan bentuk garis K. Strategi ini menilai trend pasaran dan masa masuk dengan mengenal pasti bentuk kerucut.
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.
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.
Mengambil kira risiko, anda boleh mengoptimumkan dari beberapa aspek berikut:
Strategi penembusan momentum boleh dioptimumkan dari dimensi berikut:
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.
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.
Mengoptimumkan strategi hentian hentian Anda boleh mengunci keuntungan dan mengurangkan risiko penarikan balik dengan cara berhenti bergerak, hentian beransur-ansur, dan hentian bergerak.
Pengenalan perdagangan algoritma Model algoritma seperti pembelajaran mesin boleh digunakan untuk membantu menilai isyarat perdagangan dan meningkatkan tahap automasi strategi.
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.
/*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)