Chiến lược siêu xu hướng điểm trung tâm

Tác giả:ChaoZhang, Ngày: 2024-02-26 10:57:20
Tags:

img

Tổng quan

Chiến lược Pivot Point SuperTrend là một chiến lược theo dõi xu hướng sáng tạo kết hợp hai chỉ số phổ biến Pivot Points và SuperTrend, trong khi giới thiệu một bộ lọc xu hướng bổ sung để tăng độ chính xác.

Chiến lược logic

Cơ sở của chiến lược nằm trong sự hợp nhất của các chỉ số Pivot Points và SuperTrend, cộng với việc thêm một bộ lọc xu hướng mạnh mẽ. Nó bắt đầu bằng cách tính toán Pivot Highs và Lows trong một khoảng thời gian cụ thể, phục vụ như các điểm tham chiếu quan trọng cho phân tích xu hướng. Thông qua tính toán trung bình trọng số, các Pivot Points tạo ra một đường trung tâm, tinh chỉnh chỉ số tổng thể.

Tiếp theo, dựa trên đường trung tâm và phạm vi trung bình thực sự (ATR) với một yếu tố được xác định bởi người dùng, các dải trên và dưới được tạo ra. Các dải này thích nghi với sự biến động của thị trường, thêm sự linh hoạt cho chiến lược.

Bộ lọc xu hướng bổ sung được đưa vào chiến lược tăng thêm khả năng của nó. Bộ lọc này dựa trên đường trung bình động, cung cấp đánh giá năng động về sức mạnh và hướng của xu hướng. Bằng cách kết hợp bộ lọc xu hướng này với các tín hiệu Pivot Point SuperTrend ban đầu, chiến lược nhằm mục đích đưa ra các quyết định giao dịch sáng suốt và đáng tin cậy hơn.

Phân tích lợi thế

  1. Cải thiện độ chính xác: Việc kết hợp bộ lọc xu hướng cải thiện độ chính xác của chiến lược bằng cách xác nhận hướng xu hướng tổng thể trước khi tạo ra tín hiệu.

  2. Tiếp tục xu hướng: Việc tích hợp các điểm Pivot và SuperTrend, cùng với bộ lọc xu hướng, nhằm mục đích kéo dài giao dịch trong thời gian xu hướng thị trường mạnh mẽ, có khả năng tối đa hóa cơ hội lợi nhuận.

  3. Giảm Whipsaws: Chiến lược tính toán trung bình trọng số, kết hợp với bộ lọc xu hướng, giúp giảm thiểu các tín hiệu sai và giảm whipsaws trong điều kiện thị trường không chắc chắn hoặc bên cạnh.

  4. Thông tin chi tiết về hỗ trợ và kháng cự: Chiến lược tiếp tục cung cấp các mức hỗ trợ và kháng cự bổ sung dựa trên các điểm trục trặc, cung cấp thông tin ngữ cảnh có giá trị cho các nhà giao dịch.

Phân tích rủi ro

  1. Tùy thuộc vào tham số: Chiến lược nhạy cảm với các tham số như thời gian ATR và nhân.

  2. Sự đảo ngược xu hướng: Gần điểm đảo ngược xu hướng, chiến lược có thể tạo ra các tín hiệu sai dẫn đến tổn thất không cần thiết.

  3. Tối ưu hóa quá mức: Các thông số có thể được tối ưu hóa để có kết quả tốt nhất nhưng không có khả năng sống sót về phía trước.

  4. Rủi ro khoảng cách: Khi giá di chuyển ra ngoài các dải, chiến lược đi vào một vị trí phẳng. Điều này có thể bỏ lỡ cơ hội khi xu hướng tiếp tục sau một khoảng cách.

Hướng dẫn tối ưu hóa

  1. Các bộ lọc bổ sung: Các bộ lọc khối lượng, biến động v.v. có thể được thêm để tăng cường độ vững chắc của chiến lược.

  2. Các thông số động: Các phương pháp tối ưu hóa tự động hoặc điều chỉnh thích nghi các thông số dựa trên các điều kiện thị trường thay đổi có thể làm cho chiến lược linh hoạt hơn.

  3. Stop Losses: Nghiên cứu cách thiết kế các cơ chế dừng lỗ trong khi duy trì logic chiến lược để kiểm soát hiệu quả downside.

  4. Tối ưu hóa tài sản chéo: Đánh giá các tham số chiến lược trên các thị trường và công cụ khác nhau. Tối ưu hóa các tham số theo đặc điểm của mỗi thị trường.

Tóm lại

Chiến lược Pivot Point SuperTrend thể hiện những điểm mạnh độc đáo trên các khía cạnh như sự đơn giản và khả năng theo dõi xu hướng. Đồng thời, các khía cạnh như tham số, dừng lỗ, tối ưu hóa các tài sản cung cấp không gian để cải thiện nó thành một công cụ phổ quát và đáng tin cậy hơn. Nhìn chung, nó trao quyền cho các nhà giao dịch một phương tiện hiệu quả để nắm bắt xu hướng thị trường.


/*backtest
start: 2023-02-19 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Julien_Eche
// Strategy based on "Pivot Point Supertrend" Indicator by LonesomeTheBlue

//@version=4

strategy("PPS", overlay=true, initial_capital=500000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

prd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50)
Factor=input(defval = 3, title = "ATR Factor", minval = 1, step = 0.1)
Pd=input(defval = 10, title = "ATR Period", minval=1)
showpivot = input(defval = false, title="Show Pivot Points")
showlabel = input(defval = true, title="Show Buy/Sell Labels")
showcl = input(defval = false, title="Show PP Center Line")
showsr = input(defval = false, title="Show Support/Resistance")

// get Pivot High/Low
float ph = pivothigh(prd, prd)
float pl = pivotlow(prd, prd)

// drawl Pivot Points if "showpivot" is enabled
plotshape(ph and showpivot, text="H",  style=shape.labeldown, color=na, textcolor=color.red, location=location.abovebar, transp=0, offset = -prd)
plotshape(pl and showpivot, text="L",  style=shape.labeldown, color=na, textcolor=color.lime, location=location.belowbar, transp=0, offset = -prd)

// calculate the Center line using pivot points
var float center = na
float lastpp = ph ? ph : pl ? pl : na
if lastpp
    if na(center)
        center := lastpp
    else
        //weighted calculation
        center := (center * 2 + lastpp) / 3

// upper/lower bands calculation
Up = center - (Factor * atr(Pd))
Dn = center + (Factor * atr(Pd))

// get the trend
float TUp = na
float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// plot the trend
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")
 
plot(showcl ? center : na, color = showcl ? center < hl2 ? color.blue : color.red : na)

// check and plot the signals
bsignal = Trend == 1 and Trend[1] == -1
ssignal = Trend == -1 and Trend[1] == 1
plotshape(bsignal and showlabel ? Trailingsl : na, title="Buy", text="Buy", location = location.absolute, style = shape.labelup, size = size.tiny, color = color.lime, textcolor = color.black, transp = 0)
plotshape(ssignal and showlabel ? Trailingsl : na, title="Sell", text="Sell", location = location.absolute, style = shape.labeldown, size = size.tiny, color = color.red, textcolor = color.white, transp = 0)

//get S/R levels using Pivot Points
float resistance = na
float support = na
support := pl ? pl : support[1]
resistance := ph ? ph : resistance[1]

// if enabled then show S/R levels
plot(showsr and support ? support : na, color = showsr and support ? color.lime : na, style = plot.style_circles, offset = -prd)
plot(showsr and resistance ? resistance : na, color = showsr and resistance ? color.red : na, style = plot.style_circles, offset = -prd)

// Trend Filter from SuperTrend Long Strategy
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)

// Combine the SuperTrend calculations
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

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

// Strategy Entry Conditions
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       

window()  => time >= start and time <= finish ? true : false

// Combined entry conditions
longCondition = (trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window())
shortCondition = (trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window())

if (longCondition)
    strategy.entry("BUY", strategy.long)

if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short)

buy1 = barssince((trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window()))
sell1 = barssince((trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window()))
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(color1)

Thêm nữa