Chiến lược giao dịch đảo ngược đột phá kênh


Ngày tạo: 2024-02-19 15:12:44 sửa đổi lần cuối: 2024-02-19 15:12:44
sao chép: 0 Số nhấp chuột: 603
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch đảo ngược đột phá kênh

Tổng quan

Chiến lược giao dịch đảo ngược phá vỡ kênh là một chiến lược giao dịch đảo ngược theo dõi điểm dừng chân di chuyển của kênh giá. Nó sử dụng phương pháp trung bình di chuyển có trọng lượng để tính toán kênh giá và thiết lập vị trí đầu nhiều hoặc trống khi giá phá vỡ kênh.

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

Chiến lược này đầu tiên sử dụng chỉ số Wilder Average True Range (ATR) để tính toán tỷ lệ biến động giá. Sau đó, tính toán hằng số phạm vi trung bình (ARC) dựa trên giá trị ATR. ARC là một nửa chiều rộng của kênh giá.

Cụ thể, ATR của đường N gốc K gần nhất được tính đầu tiên. ARC được nhân với ATR bằng một hệ số. ARC được nhân với hệ số có thể kiểm soát chiều rộng của kênh. ARC được cộng với giá đóng cửa ở điểm cao nhất trong đường N gốc K để có được đường dẫn lên, tức là SAR cao.

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

  1. Sử dụng các kênh thích ứng để tính toán biến động giá để theo dõi sự thay đổi của thị trường
  2. Giao dịch đảo ngược, phù hợp với thị trường đảo ngược xu hướng
  3. Mobile Stop Loss, khóa lợi nhuận, kiểm soát rủi ro

Rủi ro chiến lược

  1. Giao dịch chuyển đổi ngược dễ bị đặt cược, cần điều chỉnh các tham số phù hợp
  2. Dễ bị đóng vị trí trong thị trường biến động lớn
  3. Các tham số không đúng sẽ dẫn đến giao dịch quá thường xuyên

Giải pháp:

  1. Tối ưu hóa chu kỳ ATR và hệ số ARC để hợp lý hóa chiều rộng đường dẫn
  2. Kết hợp các chỉ số xu hướng để lọc vào thời gian
  3. Tăng chu kỳ ATR, giảm tần suất giao dịch

Hướng tối ưu hóa chiến lược

  1. Tối ưu hóa chu kỳ ATR và ARC
  2. Tăng điều kiện mở vị trí, ví dụ như kết hợp với chỉ số MACD
  3. Tăng chiến lược dừng lỗ

Tóm tắt

Chiến lược giao dịch đảo ngược phá vỡ kênh sử dụng kênh để theo dõi sự thay đổi giá, xây dựng vị trí đảo ngược khi biến động tăng lên và thiết lập dừng dừng động thích ứng. Chiến lược này được áp dụng cho thị trường hoàn thiện chủ yếu là đảo ngược, có thể nhận được lợi nhuận đầu tư tốt nếu xác định chính xác điểm đảo ngược. Tuy nhiên, cần lưu ý để ngăn chặn điểm dừng lỗ quá nới lỏng và tối ưu hóa tham số.

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

//@version=3
//@author=LucF

// Volatility System [LucF]
// v1.0, 2019.04.14

// The Volatility System was created by Welles Wilder.
// It first appeared in his seminal masterpiece "New Concepts in Technical Trading Systems" (1978).
// He describes it on pp.23-26, in the chapter discussing the first presentation ever of the "Volatility Index",
// which later became known as ATR.
// Performance of the strategy usually increases with the time frame.
// Tuning of ATR length and, especially, the ARC factor, is key.

// This code runs as a strategy, which cannot generate alerts.
// If you want to use the alerts it must be converted to an indicator.
// To do so:
//      1. Swap the following 2 lines by commenting the first and uncommenting the second.
//      2. Comment out the last 4 lines containing the strategy() calls.
//      3. Save.
strategy(title="Volatility System by Wilder [LucF]", shorttitle="Volatility System [Strat]", overlay=true, precision=8, pyramiding=0, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// study("Volatility System by Wilder [LucF]", shorttitle="Volatility System", precision=8, overlay=true)

// -------------- Colors
MyGreenRaw = color(#00FF00,0),      MyGreenMedium = color(#00FF00,50),  MyGreenDark = color(#00FF00,75),    MyGreenDarkDark = color(#00FF00,92)
MyRedRaw = color(#FF0000,0),        MyRedMedium = color(#FF0000,30),    MyRedDark = color(#FF0000,75),      MyRedDarkDark = color(#FF0000,90)

// -------------- Inputs
LongsOnly = input(false,"Longs only")
ShortsOnly = input(false,"Shorts only")
AtrLength = input(9, "ATR length", minval=2)
ArcFactor = input(1.8, "ARC factor", minval=0, type=float,step=0.1)
ShowSAR = input(false, "Show all SARs (Stop & Reverse)")
HideSAR = input(false, "Hide all SARs")
ShowTriggers = input(false, "Show Entry/Exit triggers")
ShowTradedBackground = input(false, "Show Traded Background")

FromYear  = input(defval = 2000,    title = "From Year", minval = 1900)
FromMonth = input(defval = 1,      title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1,       title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999,    title = "To Year", minval = 1900)
ToMonth   = input(defval = 1,       title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1,       title = "To Day", minval = 1, maxval = 31)

// -------------- Date range filtering
FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00)
ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59)
TradeDateIsAllowed() => true

// -------------- Calculate Stop & Reverse (SAR) points using Average Range Constant (ARC)
Arc   = atr(AtrLength)*ArcFactor
SarLo = highest(close, AtrLength)-Arc
SarHi = lowest(close, AtrLength)+Arc

// -------------- Entries/Exits
InLong = false
InShort = false
EnterLong = TradeDateIsAllowed() and not InLong[1] and crossover(close, SarHi[1])
EnterShort = TradeDateIsAllowed() and not InShort[1] and crossunder(close, SarLo[1])
InLong := (InLong[1] and not EnterShort[1]) or (EnterLong[1] and not ShortsOnly)
InShort := (InShort[1] and not EnterLong[1]) or (EnterShort[1] and not LongsOnly)

// -------------- Plots
// SAR points
plot( not HideSAR and ((InShort or EnterLong) or ShowSAR)? SarHi:na, color=MyRedMedium, style=circles, linewidth=2, title="SAR High")
plot( not HideSAR and ((InLong or EnterShort) or ShowSAR)? SarLo:na, color=MyGreenMedium, style=circles, linewidth=2, title="SAR Low")
// Entry/Exit markers
plotshape( ShowTriggers and not ShortsOnly and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyGreenRaw, size=size.small, text="")
plotshape( ShowTriggers and not LongsOnly and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyRedRaw, size=size.small, text="")
// Exits when printing only longs or shorts
plotshape( ShowTriggers and ShortsOnly and InShort[1] and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyRedMedium, transp=70, size=size.small, text="")
plotshape( ShowTriggers and LongsOnly and InLong[1] and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyGreenMedium, transp=70, size=size.small, text="")
// Background
bgcolor( color=ShowTradedBackground? InLong and not ShortsOnly?MyGreenDarkDark: InShort and not LongsOnly? MyRedDarkDark:na:na)

// ---------- Alerts
alertcondition( EnterLong or EnterShort, title="1. Reverse", message="Reverse")
alertcondition( EnterLong, title="2. Long", message="Long")
alertcondition( EnterShort, title="3. Short", message="Short")

// ---------- Strategy reversals
strategy.entry("Long", strategy.long, when=EnterLong and not ShortsOnly)
strategy.entry("Short", strategy.short, when=EnterShort  and not LongsOnly)
strategy.close("Short", when=EnterLong and ShortsOnly)
strategy.close("Long", when=EnterShort and LongsOnly)