Sự đột phá xu hướng - Chiến lược bóng dài

Tác giả:ChaoZhang, Ngày: 2023-11-15 16:43:17
Tags:

img

Chiến lược này đánh giá hướng xu hướng hiện tại bằng cách tính toán tỷ lệ chiều dài bóng tăng / giảm, và xác định xu hướng bằng chỉ số ATR. Nó mở vị trí đảo ngược tại các điểm đột phá và thiết lập dừng lỗ và lấy lợi nhuận để nắm bắt xu hướng ngắn hạn.

Chiến lược logic

Chiến lược chủ yếu đánh giá xu hướng hiện tại bằng cách tính tỷ lệ bóng tăng / giảm.

Lý thuyết cụ thể là:

  1. Tính toán bóng giảm: gần - thấp
  2. Tính toán bóng tăng: cao - mở
  3. Hãy lấy tối đa của bóng giảm và bóng tăng như chiều dài bóng
  4. Tính toán chiều dài thân nến: cao - thấp
  5. Tính toán tỷ lệ giữa bóng và chiều dài cơ thể
  6. Nếu tỷ lệ > 0,5 và giảm > tăng, đánh giá xu hướng giảm và vị trí dài
  7. Nếu tỷ lệ > 0,5 và tăng > giảm, đánh giá xu hướng tăng và vị trí ngắn
  8. Xác nhận sự đột phá với chiều dài nến > 0,75 * ATR
  9. Thiết lập stop loss và take profit sau khi tham gia, với tỷ lệ 2: 1

Điều trên là logic giao dịch cơ bản, xác định các điểm đột phá ngược với phát hiện xu hướng và tối ưu hóa lợi nhuận với dừng lỗ / lấy lợi nhuận.

Ưu điểm

  1. Tỷ lệ bóng đánh giá chính xác xu hướng
  2. ATR lọc ra các tín hiệu thoát hiểm sai
  3. Dừng lỗ và lấy lợi nhuận quản lý rủi ro
  4. Tỷ lệ 2: 1 rủi ro-lợi nhuận đáp ứng tiêu chuẩn giao dịch lượng
  5. Thích hợp cho giao dịch ngắn hạn trên các cổ phiếu biến động cao
  6. Logic đơn giản và rõ ràng, dễ hiểu

Rủi ro

  1. Sự biến động giá có thể ảnh hưởng đến việc dừng lỗ và tăng lỗ
  2. Hiệu suất phụ thuộc rất nhiều vào điều chỉnh tham số
  3. Sự đảo ngược xu hướng có thể dẫn đến tổn thất
  4. Mở rộng stop loss/take profit có thể làm tăng xác suất lỗ
  5. Thất bại có thể dẫn đến tổn thất lớn.

Rủi ro có thể được quản lý bằng cách dừng lỗ hợp lý, tối ưu hóa tham số và thoát khỏi vị trí kịp thời.

Tăng cường

Chiến lược có thể được tối ưu hóa theo những cách sau:

  1. Tối ưu hóa tham số tỷ lệ bóng cho giá trị tốt nhất
  2. Tối ưu hóa tham số ATR cho chiều dài nến tốt nhất
  3. Tối ưu hóa hệ số dừng lỗ / lấy lợi nhuận cho lợi nhuận rủi ro tối ưu
  4. Thêm kích thước vị trí như tăng vị trí dần dần
  5. Thêm stop loss để bảo vệ lợi nhuận
  6. Thêm các chỉ số khác vào các tín hiệu lọc
  7. Tối ưu hóa thời gian backtest và thử nghiệm các giai đoạn thị trường khác nhau

Với thử nghiệm và tối ưu hóa đa khía cạnh, hiệu suất chiến lược có thể được tối đa hóa.

Nhìn chung, chiến lược này lợi nhuận từ biến động giá ngắn hạn thông qua xác định xu hướng và quản lý rủi ro. Khi tối ưu hóa, nó có thể trở thành một chiến lược đột phá ngắn hạn mạnh mẽ cho giao dịch lượng.


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



Thêm nữa