Theo dõi chiến lược siêu xu hướng

Tác giả:ChaoZhang, Ngày: 2023-12-26 15:58:55
Tags:

img

Tổng quan

Đây là một chiến lược theo dõi siêu xu hướng chủ yếu kết hợp các chỉ số siêu xu hướng với các cài đặt tham số khác nhau để đạt được hiệu ứng theo dõi và sử dụng chỉ số lọc để kiểm soát rủi ro. Ý tưởng cốt lõi của chiến lược đơn giản và thực tế, dễ hiểu và phù hợp cho người mới bắt đầu học.

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

Chiến lược này chủ yếu bao gồm ba nhóm chỉ số siêu xu hướng với các thiết lập tham số khác nhau. Nhóm đầu tiên là chỉ số siêu xu hướng chính sử dụng các tham số mặc định để đánh giá các xu hướng thị trường cơ bản. Nhóm thứ hai là chỉ số siêu xu hướng phó đạt được theo dõi sự thay đổi giá nhạy cảm hơn bằng cách giảm khoảng thời gian ATR và tăng nhân ATR. Nhóm thứ ba là chỉ số siêu xu hướng lọc tăng đúng khoảng thời gian ATR và nhân ATR để lọc các đột phá sai.

Khi siêu xu hướng chính phát ra tín hiệu mua, nếu siêu xu hướng phụ cũng phát ra tín hiệu đồng bộ và hướng siêu xu hướng bộ lọc tăng lên, chiến lược sẽ theo dõi mua. Khi siêu xu hướng chính phát ra tín hiệu bán, nếu siêu xu hướng phụ cũng phát ra tín hiệu đồng bộ và hướng siêu xu hướng bộ lọc giảm xuống, chiến lược sẽ theo dõi bán. Điều này có thể nắm bắt xu hướng chính trong khi sử dụng chỉ số siêu xu hướng phụ linh hoạt để theo dõi các điều chỉnh nhỏ và đạt được bước vào và dừng lỗ kịp thời.

Ưu điểm

  1. Ý tưởng chiến lược đơn giản và rõ ràng, dễ hiểu, phù hợp cho người mới bắt đầu học
  2. Việc thiết lập tham số chiến lược là hợp lý để theo dõi hiệu quả thị trường và kiểm soát rủi ro
  3. Tín hiệu chiến lược chính xác hơn và đáng tin cậy với tỷ lệ thắng cao hơn
  4. Kết hợp các kết hợp tham số khác nhau để đạt được hiệu ứng theo dõi
  5. Thêm cơ chế lọc có thể lọc hiệu quả các tín hiệu sai và kiểm soát rủi ro

Rủi ro

  1. Rủi ro có hệ thống vốn có của bản thân cổ phiếu
  2. Chỉ số siêu xu hướng có thể chậm lại ở một số thị trường
  3. Cài đặt tham số ATR không chính xác có thể gây ra sai lệch tín hiệu
  4. Khối lượng giao dịch không đủ có thể làm cho việc cắt giảm toàn bộ lỗ khó khăn

Các biện pháp phòng ngừa rủi ro chính:

  1. Chọn cổ phiếu có thanh khoản tốt và biến động lớn
  2. Tối ưu hóa các thông số hợp lý để giảm khả năng chậm trễ
  3. Kiểm tra và tối ưu hóa tham số để cải thiện độ chính xác tín hiệu
  4. Tăng đúng khối lượng giao dịch để đảm bảo không gian cắt giảm lỗ

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

  1. Kiểm tra các kết hợp khác nhau của thời gian ATR để tối ưu hóa hiệu ứng theo dõi
  2. Hãy thử các chỉ số biến động khác để thay thế ATR
  3. Tăng hoặc giảm số lượng các kết hợp siêu xu hướng để kiểm tra hiệu ứng
  4. Cố gắng kết hợp với các chỉ số khác để tối ưu hóa lọc tín hiệu
  5. Kiểm tra các phương pháp dừng lỗ khác nhau để tìm giải pháp tối ưu

Tóm lại

Ý tưởng tổng thể của chiến lược này là rõ ràng và đơn giản. Bằng cách phối hợp nhiều nhóm chỉ số siêu xu hướng với các thiết lập tham số khác nhau, nó nhận ra việc theo dõi nhập cảnh và kiểm soát rủi ro. Tín hiệu chiến lược chính xác hơn với hiệu suất trực tiếp tốt. Nó phù hợp cho người mới bắt đầu học, và cũng có thể được sử dụng như một mẫu để kiểm tra và tối ưu hóa các chỉ số và tham số khác nhau. Đây là một chiến lược siêu xu hướng đáng khuyên.


/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Supertrend TEST 2 Strategy", overlay = true, format=format.price, precision=2)

Periods = input(title="ATR Period", type=input.integer, defval=4)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=4.7)
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)
tp=close
sl=close

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 )
plotshape(buySignal and showsignals ? up : na, title="Лонг", text="Лонг", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white )
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 )
plotshape(sellSignal and showsignals ? dn : na, title="Шорт", text="Шорт", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white )
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

sPeriods=input(title="ATR Period", type=input.integer, defval=8)
sMultiplier=input(title="dop ATR Multiplier", type=input.float, step=0.1, defval=1.5)
satr2 = sma(tr, sPeriods)
satr= changeATR ? atr(sPeriods) : satr2
ssup=ohlc4-(sMultiplier*satr)
ssup1 = nz(ssup[1],ssup)
ssup := close[1] > ssup1 ? max(ssup,ssup1) : ssup
sdn=ohlc4+(sMultiplier*satr)
sdn1 = nz(sdn[1], sdn)
sdn := close[1] < sdn1 ? min(sdn, sdn1) : sdn
strend = 1
strend := nz(strend[1], strend)
strend := strend == -1 and close > sdn1 ? 1 : strend == 1 and close < ssup1 ? -1 : strend
sbuySignal = strend == 1 and strend[1] == -1
ssellSignal = strend == -1 and strend[1] == 1

fPeriods=input(title="ATR Period", type=input.integer, defval=10)
fMultiplier=input(title="filter ATR Multiplier", type=input.float, step=0.1, defval=5)
fatr2 = sma(tr, fPeriods)
fatr= changeATR ? atr(fPeriods) : fatr2
fup=ohlc4-(fMultiplier*fatr)
fup1 = nz(fup[1],fup)
fup := close[1] > fup1 ? max(fup,fup1) : fup
fdn=ohlc4+(fMultiplier*fatr)
fdn1 = nz(fdn[1], fdn)
fdn := close[1] < fdn1 ? min(fdn, fdn1) : fdn
ftrend = 1
ftrend := nz(ftrend[1], ftrend)
ftrend := ftrend == -1 and close > fdn1 ? 1 : ftrend == 1 and close < fup1 ? -1 : ftrend
fbuySignal = ftrend == 1 and ftrend[1] == -1
fsellSignal = ftrend == -1 and ftrend[1] == 1
tcolor=color.new(color.gray,50)
fdnPlot = plot(ftrend == 1 ? na : fdn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=tcolor)
fupPlot = plot(ftrend == 1 ? fup : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=tcolor)



if (strategy.position_size > 0)
	tp:=tp[1]
	sl:=up
	strategy.exit("Long_TP/SL","Long",limit=tp, stop=sl)
	
if (strategy.position_size < 0)
	tp:=tp[1]
	sl:=dn
	strategy.exit("Short_TP/SL","Short",limit=tp, stop=sl)



if ((buySignal and  ftrend==1) or (sbuySignal and trend==1 and  ftrend==1)) 
	tp:=close+(close-up)*0.382
    strategy.entry("Long", strategy.long,  limit=tp, comment=tostring(round(tp)))
if ((sellSignal and ftrend==-1) or (ssellSignal and trend==-1 and  ftrend==-1)) 
	tp:=close-(dn-close)*0.382
    strategy.entry("Short", strategy.short, limit=tp, comment=tostring(round(tp)))


Thêm nữa