Chiến lược siêu xu hướng song phương


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

Tổng quan

Chiến lược này đánh giá hướng xu hướng hiện tại dựa trên các chỉ số ATR được tính toán trên đường lên và đường xuống và cung cấp tín hiệu mua và bán. Khi giá phá vỡ đường lên, giá sẽ tăng, khi giá phá vỡ đường xuống, giá sẽ giảm.

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

  1. Tính toán chỉ số ATR, biểu thị phạm vi biến động trung bình của giá
  2. Đường lên và đường xuống theo giá trị ATR nhân với một số nhân
  3. Xác định mối quan hệ giữa giá và đường ray lên xuống, xác định hướng xu hướng
    • Khi giá lên đường, xu hướng tăng giá
    • Khi giá dưới đường mòn, xu hướng giảm giá
  4. Đưa ra tín hiệu mua và bán khi xu hướng thay đổi
    • Khi từ xu hướng giảm trở thành xu hướng tăng, tín hiệu mua được đưa ra gần đường ray trên
    • Khi một xu hướng tăng trở thành xu hướng giảm, một tín hiệu bán ra được đưa ra gần đường ray xuống
  5. Hiển thị hình ảnh đường đi, hướng xu hướng và tín hiệu mua và bán

Phân tích lợi thế

  • Sử dụng chỉ số ATR để đánh giá xu hướng, bạn có thể đặt các tham số phù hợp dựa trên mức độ biến động của thị trường, giúp đường ray lên xuống phù hợp hơn với xu hướng thị trường
  • Sử dụng đột phá lên xuống để đánh giá xu hướng biến đổi, có thể bắt kịp thời xu hướng đảo ngược
  • Kết hợp các tín hiệu lọc theo xu hướng để tránh bị gián đoạn bởi các đột phá giả mạo trong thị trường
  • Các tín hiệu mua và bán được hiển thị trực quan trên đường ray, ngay lập tức.

Phân tích rủi ro

  • Các tham số ATR được đặt quá lớn hoặc quá nhỏ sẽ làm cho đường lên xuống rời khỏi giá và không thể theo dõi xu hướng hiệu quả
  • Các tham số nhân quá lớn sẽ làm tăng tín hiệu giả; số nhân quá nhỏ sẽ gây ra sự chậm trễ tín hiệu
  • Không nắm bắt chính xác thời gian đảo ngược, có thể mở vị trí đảo ngược có tổn thất
  • Cần kết hợp các tín hiệu chiến lược lọc các chỉ số khác để giảm nguy cơ bị đánh giá

Hướng tối ưu hóa

  • Có thể xem xét động tối ưu hóa các tham số chu kỳ ATR để phù hợp hơn với biến động thị trường
  • Các chiến lược điều chỉnh tham số cho các chu kỳ khác nhau của các giống khác nhau
  • Có thể kết hợp với các chỉ số khác để xác định xu hướng, chẳng hạn như xác nhận giá tăng
  • Các thiết lập tham số có thể được tối ưu hóa thông qua công nghệ học máy

Tóm tắt

Chiến lược này thực hiện toàn bộ ý tưởng đánh giá xu hướng hai chiều dựa trên chỉ số ATR, phá vỡ đường ray lên xuống để cung cấp tín hiệu mua và bán, sau đó lọc kết hợp với hướng xu hướng, tránh bị nhiễu bởi tín hiệu giả. Bằng cách điều chỉnh tham số, có thể thích ứng với môi trường thị trường khác nhau. Tuy nhiên, cũng có một số rủi ro cần được tối ưu hóa hơn nữa.

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

TradeId = "RVG"

InitCapital = 1000
InitPosition = 1000
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true

//@version=4
// strategy("Supertrend RG", overlay = true,process_orders_on_close=true,commission_type=strategy.commission.percent,commission_value=InitCommission,
//  currency=currency.USD,initial_capital=InitCapital,default_qty_type=strategy.cash, default_qty_value=InitPosition, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick,pyramiding=InitPyramidMax)

//
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2018, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2100, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


strategy.entry(TradeId + " Long", true, when=buySignal[1] and time_cond)
strategy.entry(TradeId + " Short", false, when=sellSignal[1] and time_cond)