Chiến lược theo dõi xu hướng lượng là một chiến lược theo dõi xu hướng dựa trên đường EMA và ATR stop loss. Nó sử dụng đường EMA để đánh giá hướng xu hướng thị trường tổng thể, và theo dõi stop loss với ATR để khóa lợi nhuận xu hướng, tối đa hóa lợi nhuận.
Chiến lược bao gồm các phần chính sau:
Các đường EMA để xác định xu hướng chính
Sử dụng đường 13 ngày, 50 ngày và 100 ngày để hình thành xu hướng tăng / giảm và đánh giá hướng xu hướng chính.
Lỗi dừng động ATR
Sử dụng chỉ số ATR để tính phạm vi chuyển động giá của giai đoạn hiện tại và đặt giá dừng lỗ để khóa lợi nhuận.
Đơn giản hóa tín hiệu
Giá đóng cửa trơn tru trong một khoảng thời gian nhất định với SMA để tránh các tín hiệu sai.
Tín hiệu tăng/giảm
Đi dài khi giá vượt qua đường EMA, đi ngắn khi vượt qua dưới.
Chiến lược có những lợi thế sau:
Ngoài ra còn có một số rủi ro:
Những rủi ro này có thể được giảm thiểu thông qua tối ưu hóa tham số, thử nghiệm khả năng thích nghi v.v.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tóm lại, đây là một chiến lược lượng được thiết kế dựa trên khái niệm theo xu hướng. Nó xác định hướng xu hướng với EMA và sử dụng dừng lỗ ATR năng động. Nó có thể kiểm soát hiệu quả giảm trong khi nắm bắt lợi nhuận xu hướng. Tăng cường và lặp lại liên tục có thể tạo ra kết quả tốt hơn.
/*backtest start: 2023-12-27 00:00:00 end: 2024-01-03 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Combined Strategy", overlay=true) // Input variables for EMA Crossover ema13_length = input(13, title="EMA 13 Length") ema50_length = input(50, title="EMA 50 Length") ema100_length = input(100, title="EMA 100 Length") ema200_length = input(200, title="EMA 200 Length") // Calculate EMAs for EMA Crossover ema13 = ema(close, ema13_length) ema50 = ema(close, ema50_length) ema100 = ema(close, ema100_length) ema200 = ema(close, ema200_length) // Plot EMAs for EMA Crossover plot(ema13, color=color.blue, title="EMA 13") plot(ema50, color=color.orange, title="EMA 50") plot(ema100, color=color.green, title="EMA 100") plot(ema200, color=color.red, title="EMA 200") // Input variables for LinReg Candles signal_length = input(title="Signal Smoothing", type=input.integer, minval=1, maxval=200, defval=11) sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true) lin_reg = input(title="Lin Reg", type=input.bool, defval=true) linreg_length = input(title="Linear Regression Length", type=input.integer, minval=1, maxval=200, defval=11) // Calculate LinReg Candles bopen = lin_reg ? linreg(open, linreg_length, 0) : open bhigh = lin_reg ? linreg(high, linreg_length, 0) : high blow = lin_reg ? linreg(low, linreg_length, 0) : low bclose = lin_reg ? linreg(close, linreg_length, 0) : close r = bopen < bclose signal = sma_signal ? sma(bclose, signal_length) : ema(bclose, signal_length) plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable=true) plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable=true) plot(signal, color=color.white) // Input variables for UT Bot Alerts a = input(1, title="Key Value. 'This changes the sensitivity'") c = input(10, title="ATR Period") h = input(false, title="Signals from Heikin Ashi Candles") // Calculate UT Bot Alerts xATR = atr(c) nLoss = a * xATR src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=false) : close xATRTrailingStop = 0.0 xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss), iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss))) pos = 0 pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1, iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue ema = ema(src,1) above = crossover(ema, xATRTrailingStop) below = crossover(xATRTrailingStop, ema) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop strategy.entry("Buy", strategy.long, when=buy) strategy.close("Buy", when=sell) strategy.entry("Sell", strategy.short, when=sell) strategy.close("Sell", when=buy) plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny) plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.red, textcolor=color.white, transp=0, size=size.tiny) barcolor(barbuy ? color.green : na) barcolor(barsell ? color.red : na) alertcondition(buy, "UT Long", "UT Long") alertcondition(sell, "UT Short", "UT Short")