Chiến lược phá vỡ xu hướng - Bóng dài


Ngày tạo: 2023-11-15 16:43:17 sửa đổi lần cuối: 2023-11-15 16:43:17
sao chép: 2 Số nhấp chuột: 665
1
tập trung vào
1617
Người theo dõi

Chiến lược phá vỡ xu hướng - Bóng dài

Chiến lược này xác định xu hướng hiện tại bằng cách tính toán tỷ lệ chiều dài bóng dương của đường K, nhận dạng xu hướng bằng ATR với bước sóng thực trung bình, mở vị trí đảo ngược tại điểm phá vỡ, thiết lập điểm dừng lỗ và nắm bắt xu hướng ngắn hạn.

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

Chiến lược này chủ yếu bằng cách tính tỷ lệ chiều dài bóng dương của đường K, để xác định hướng xu hướng hiện tại, khi đường dương quá dài thì được đánh giá là xu hướng xuống, khi đường dương quá dài thì được đánh giá là xu hướng lên.

Chính sách này có thể được giải thích như sau:

  1. Tính độ bóng dưới của đường K: close-low
  2. Tính độ bóng trên của đường K: high-open ((giá cao nhất - giá mở)
  3. Lấy giá trị tối đa của bóng dưới và bóng trên làm chiều dài của bóng
  4. Tính toán chiều dài thực thể K: high-low ((giá cao nhất - giá thấp nhất)
  5. Tính tỷ lệ chiều dài bóng so với chiều dài thực thể
  6. Khi tỷ lệ lớn hơn 0,5 và bóng dưới lớn hơn bóng trên, đánh giá là xu hướng xuống, thiết lập nhiều lượt chơi
  7. Khi tỷ lệ lớn hơn 0,5 và bóng trên lớn hơn bóng dưới, đánh giá là xu hướng lên, đặt đơn trống vào sân
  8. Đánh giá đồng thời xem chiều dài của thực thể đường K lớn hơn 0,75 lần ATR trung bình tần số thực để tránh đột phá không hiệu quả
  9. Sau khi vào thị trường, thiết lập dừng lỗ, dừng lỗ là giá nhập cảnh nhân với hệ số, dừng là giá nhập cảnh nhân với hệ số 2 lần, để đạt tỷ lệ lợi nhuận lỗ là 2: 1

Đây là logic giao dịch cơ bản của chiến lược, bằng cách xác định điểm phá vỡ xu hướng để mở vị trí đảo ngược và tối ưu hóa lợi nhuận sau khi thiết lập điểm dừng lỗ.

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

  1. Sử dụng tỷ lệ bóng mặt trời để đánh giá xu hướng, phân biệt cao
  2. Kết hợp với chỉ số ATR để đánh giá đột phá hiệu quả, tránh tín hiệu giả
  3. Cài đặt Stop Loss Stop để kiểm soát rủi ro
  4. Đạt tỷ lệ lợi nhuận/lãi suất 2:1 phù hợp với tiêu chuẩn giao dịch định lượng
  5. Giao dịch ngắn hạn cho các cổ phiếu có biến động cao
  6. Lập luận chiến lược đơn giản, rõ ràng và dễ hiểu

Rủi ro chiến lược

  1. Khi giá cổ phiếu biến động mạnh, lệnh dừng có thể bị phá vỡ, gây ra tổn thất mở rộng
  2. Hiệu ứng có liên quan chặt chẽ đến thiết lập tham số, cần tối ưu hóa tham số
  3. Có thể sẽ có sự mất mát khi xu hướng thay đổi.
  4. Phương pháp mở rộng đồng thời phạm vi dừng và dừng sẽ làm tăng khả năng thua lỗ
  5. Nếu không có đột phá, bạn sẽ mất nhiều tiền.

Có thể kiểm soát rủi ro bằng cách dừng lỗ hợp lý, tối ưu hóa các tham số và dừng lỗ kịp thời.

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

Các chiến lược có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa tham số tỷ lệ bóng mặt trời để tìm ra giá trị tốt nhất
  2. Tối ưu hóa tham số ATR để xác định chiều dài K tốt nhất
  3. Tối ưu hóa hệ số dừng lỗ để đạt được tỷ lệ lợi nhuận rủi ro tối ưu
  4. Tăng quản lý vị trí, ví dụ như tăng vị trí dần dần
  5. Tăng theo dõi lỗ hổng và bảo vệ lợi nhuận
  6. Kết hợp các chỉ số khác để lọc tín hiệu vào sân
  7. Tối ưu hóa khoảng thời gian phản hồi, thử nghiệm hiệu quả của các giai đoạn thị trường khác nhau

Các chiến lược có thể được tối đa hóa thông qua thử nghiệm và tối ưu hóa đa phương.

Nhìn chung, chiến lược này là một chiến lược phá vỡ đường ngắn có hiệu quả ổn định, bằng cách nhận ra xu hướng và kiểm soát rủi ro để kiếm lợi nhuận từ biến động giá trong thời gian ngắn.

Mã nguồn chiến lược
/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ondrej17

//@version=4
strategy("longWickstrategy", overlay=true )
 
// Inputs
st_yr_inp = input(defval=2020, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sltp_inp = input(defval=0.8, title='N - % offset for N*SL and (2N)*TP')/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
canTrade = time >= start and time <= end
// Indicators Setup


 
// Strategy Calcuations
lowerWick = (open > close) ? close-low : open - low
upperWick = (open > close) ? high-open : high-close
wickLength = max(lowerWick,upperWick)
candleLength = high-low
wickToCandleRatio = wickLength / candleLength
entryFilterCandleLength = candleLength > 0.75*atr(48)


// Entries and Exits
 
longCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick > upperWick and canTrade and strategy.position_size == 0
shortCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick < upperWick and canTrade and strategy.position_size == 0

strategy.entry("pendingLong", strategy.long, limit=low+wickLength/2, when = longCondition)
strategy.entry("pendingShort", strategy.short, limit=high-wickLength/2, when = shortCondition)

longStop = strategy.position_size > 0 ? strategy.position_avg_price*(1-sltp_inp) : na
longTP = strategy.position_size > 0 ? strategy.position_avg_price*(1+2*sltp_inp) : na
shortStop = strategy.position_size < 0 ? strategy.position_avg_price*(1+sltp_inp) : na
shortTP = strategy.position_size < 0 ? strategy.position_avg_price*(1-2*sltp_inp) : na

strategy.exit("longSLTP","pendingLong", stop=longStop, limit = longTP)
strategy.exit("shortSLTP","pendingShort", stop=shortStop, limit = shortTP)  
 

plot(longStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(shortStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(longTP, color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTP, color=color.green, style=plot.style_linebr, linewidth=2)

plotLongCondition = longCondition ? high+abs(open-close) : na
plot(plotLongCondition, style=plot.style_circles, linewidth=4, color=color.green)
plotShortCondition = shortCondition ? high+abs(open-close) : na
plot(plotShortCondition, style=plot.style_circles, linewidth=4, color=color.red)