Chiến lược giao dịch đột phá động lượng dựa trên mô hình nến


Ngày tạo: 2023-11-28 10:33:31 sửa đổi lần cuối: 2023-11-28 10:33:31
sao chép: 0 Số nhấp chuột: 602
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch đột phá động lượng dựa trên mô hình nến

Bài viết này giới thiệu một chiến lược giao dịch đột phá động lực dựa trên hình dạng K-line. Chiến lược này đánh giá xu hướng thị trường và thời gian nhập cảnh bằng cách nhận biết hình dạng con lằn.

Tổng quan về chiến lược

Chiến lược đột phá động lực chủ yếu đánh giá tín hiệu đảo ngược tiềm năng, đi vào sân bằng cách nhận ra hình thức ăn nhiều đầu hoặc hình thức ăn không. Sau khi nhận ra tín hiệu, hãy nhanh chóng theo dõi xu hướng và đạt được lợi nhuận vượt mức.

Nguyên tắc chiến lược

Logic phán đoán cốt lõi của chiến lược đột phá động lực dựa trên nhận diện hình thức nuốt, hình thức nuốt được phân chia thành hai loại nuốt đa đầu và nuốt đầu trống.

Nhiều đầu nuốt có nghĩa là giá đóng cửa ngày cao hơn giá mở cửa và giá đóng cửa của dòng K trước thấp hơn giá mở cửa của dòng K trước. Hình thức này thường cho thấy sự thay đổi của tâm trạng thị trường, tâm lý đa không gian bị đảo ngược, vì vậy đây là thời điểm tốt để thực hiện theo dõi thích hợp.

Ăn đầu rỗng là điều ngược lại với ăn đầu nhiều, nghĩa là giá đóng cửa trong ngày thấp hơn giá mở và giá đóng cửa của dòng K trên cao hơn giá mở của dòng K trước. Điều này cũng cho thấy sự thay đổi tâm lý thị trường và do đó là cơ hội để can thiệp đầu rỗng.

Sau khi nhận ra các hình thức ăn uống, chiến lược phá vỡ động lực sẽ nhanh chóng thiết lập vị trí, thực hiện vượt quá đòn bẩy và theo dõi xu hướng đảo ngược tiềm năng. Ngoài ra, chiến lược cũng sẽ động điều chỉnh giá dừng lỗ và giá dừng, kiểm soát rủi ro nghiêm ngặt trong khi đảm bảo lợi nhuận.

Lợi thế chiến lược

  1. Đánh giá nhanh chóng khi thị trường thay đổi, nắm bắt cơ hội tiềm năng
  2. Rủi ro và lợi nhuận tương ứng, thiết lập dừng lỗ hợp lý
  3. Tỷ lệ đòn bẩy có thể được điều chỉnh để đáp ứng các sở thích rủi ro khác nhau
  4. Giao dịch hoàn toàn tự động, hiệu quả hơn

Rủi ro chiến lược

  1. Hình thức ăn uống chỉ để tham khảo, không thể xác định hoàn toàn sự đảo ngược
  2. Tỷ lệ thất bại trong vòng xoay có thể tạo ra một cú sốc hẹp
  3. Năng suất quá cao có thể phá vỡ vị thế
  4. Cần đủ tiền để hỗ trợ vị trí thích hợp

Đối với các rủi ro, có thể tối ưu hóa theo các khía cạnh sau:

  1. Kết hợp các chỉ số khác để lọc tín hiệu
  2. Điều chỉnh thích hợp rủi ro hạn chế đòn bẩy
  3. Tăng các bước xây dựng kho, giá trung bình chi phí hàng loạt
  4. Tối ưu hóa chiến lược dừng lỗ để đảm bảo lợi nhuận

Tối ưu hóa chiến lược

Chiến lược đột phá động lực có thể được tối ưu hóa từ các chiều sau:

  1. Xác minh đa yếu tố tín hiệu Có thể thêm các chỉ số như đường trung bình, tỷ lệ dao động để xác minh tín hiệu ăn vào, đảm bảo độ tin cậy của tín hiệu.

  2. Kết hợp các chỉ số cảm xúc để đánh giá tâm lý thị trường Kết hợp với chỉ số cảm xúc của thị trường, chẳng hạn như chỉ số hoảng loạn và chỉ số tham lam, nó có thể đánh giá chính xác hơn khi thị trường đảo ngược.

  3. Tối ưu hóa chiến lược dừng lỗ Có thể khóa lợi nhuận bằng cách dừng di chuyển, dừng dần và dừng di chuyển để giảm nguy cơ rút tiền.

  4. Tiến hành giao dịch thuật toán Các mô hình thuật toán như học máy có thể được sử dụng để hỗ trợ đánh giá các tín hiệu giao dịch, nâng cao mức độ tự động hóa chiến lược.

Tóm tắt

Chiến lược phá vỡ động lực nói chung là một chiến lược đảo ngược điển hình hơn. Nó đảo ngược xu hướng thị trường bằng cách nắm bắt các tín hiệu K quan trọng, phán đoán nhanh và theo dõi xu hướng thị trường. Mặc dù vẫn còn một số rủi ro, nhưng có thể được tối ưu hóa hiệu quả bằng nhiều cách, kiểm soát rủi ro lợi nhuận trong một khoảng cách hợp lý, phù hợp cho các nhà đầu tư tích cực.

Mã nguồn chiến lược
/*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)