Triple Exponential Moving Average Profit Taking và Stop Loss chiến lược

Tác giả:ChaoZhang, Ngày: 2024-02-04 10:38:42
Tags:

img

Tổng quan

Chiến lược lấy lợi nhuận và dừng lỗ trung bình chuyển động nhân tố ba là một chiến lược theo xu hướng dựa trên ba mức trung bình chuyển động nhân tố với các khoảng thời gian khác nhau để vào và ra thị trường. Nó cũng sử dụng chỉ số Average True Range để thiết lập mức lấy lợi nhuận và dừng lỗ để quản lý rủi ro.

Chiến lược logic

Chiến lược này sử dụng ba đường trung bình chuyển động theo cấp số nhân: đường nhanh, đường trung và đường chậm. Nó đi dài khi đường trung vượt qua đường chậm, và đóng vị trí khi đường nhanh vượt qua đường trung. Đây là một chiến lược theo xu hướng điển hình xác định hướng xu hướng thông qua việc vượt qua ba đường trung bình chuyển động.

Đồng thời, chiến lược này sử dụng chỉ số Average True Range để tính toán mức lấy lợi nhuận và dừng lỗ. Cụ thể, lợi nhuận lấy lợi nhuận cho các vị trí dài là giá nhập + Mức True Range * yếu tố lợi nhuận, và cho các vị trí ngắn là giá nhập - Mức True Range * yếu tố lợi nhuận. Logic dừng lỗ tương tự. Điều này có hiệu quả hạn chế rủi ro mất mát lớn.

Phân tích lợi thế

  1. Các chỉ số quyết định trực quan và dễ hiểu.
  2. Hệ thống và dễ dàng tự động hóa.
  3. Cân bằng theo xu hướng và kiểm soát rủi ro.

Phân tích rủi ro

  1. Có một số sự chậm trễ và không thể nắm bắt kịp thời sự đảo ngược.
  2. Có xu hướng dừng lỗ trên các thị trường khác nhau.
  3. Điều chỉnh tham số cần tối ưu hóa, nếu không kết quả có thể kém.

Các biện pháp giảm thiểu rủi ro bao gồm: rút ngắn thời gian trung bình động, tối ưu hóa hệ số lợi nhuận / dừng và thêm các chỉ số phụ trợ.

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

  1. Kiểm tra sự kết hợp của các đường trung bình động để tìm các thông số tối ưu.
  2. Thêm các chỉ số kỹ thuật khác như MACD, RSI v.v.
  3. Sử dụng máy học để tự động tối ưu hóa các thông số.
  4. Điều chỉnh động mức lợi nhuận / dừng dựa trên phạm vi thực sự.
  5. Bao gồm cảm xúc để tránh quá đông.

Kết luận

Nhìn chung, đây là một chiến lược theo xu hướng hiệu quả với hiệu suất ổn định và dễ thực hiện thông qua các tham số đơn giản. Lợi nhuận động và dừng lỗ dựa trên phạm vi trung bình thực sự hạn chế rủi ro mỗi bên. Nhưng tối ưu hóa tham số và sự kết hợp chỉ số cần được thực hiện cẩn thận để ngăn ngừa quá mức hoặc sự chậm trễ trong quyết định.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//© Densz
strategy("3EMA with TP & SL (ATR)", overlay=true )

// INPUTS
startTime           =       input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000"))
endTime             =       input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))

slowEMALength       =       input(title="Slow EMA Length", type = input.integer, defval = 55)
middleEMALength     =       input(title="Middle EMA Length", type = input.integer, defval = 21)
fastEMALength       =       input(title="Fast EMA Length", type = input.integer, defval = 9)

trendMALength       =       input(title="Trend indicator MA Length", type = input.integer, defval = 200)

atrLength           =       input(title="ATR Length", type = input.integer, defval = 14)
tpATRMult           =       input(title="Take profit ATR multiplier", type = input.integer, defval = 3)
slATRMult           =       input(title="Stop loss ATR multiplier", type = input.integer, defval = 2)

rsiLength           =       input(title="RSI Length", type = input.integer, defval = 14)

// Indicators
slowEMA             =       ema(close, slowEMALength)
middEMA             =       ema(close, middleEMALength)
fastEMA             =       ema(close, fastEMALength)
atr                 =       atr(atrLength)

rsiValue            =       rsi(close, rsiLength)
isRsiOB             =       rsiValue >= 80
isRsiOS             =       rsiValue <= 20

sma200              =       sma(close, trendMALength)

inDateRange         =       true

// Plotting
plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50)
plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50)
plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50)

plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10)
plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB")
plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS")

float takeprofit    =       na
float stoploss      =       na

var line tpline     =       na
var line slline     =       na

if strategy.position_size != 0
    takeprofit := takeprofit[1]
    stoploss := stoploss[1]
    line.set_x2(tpline, bar_index)
    line.set_x2(slline, bar_index)
    line.set_extend(tpline, extend.none)
    line.set_extend(slline, extend.none)
    
// STRATEGY
goLong  = crossover(middEMA, slowEMA) and inDateRange
closeLong = crossunder(fastEMA, middEMA) and inDateRange


if goLong
    takeprofit := close + atr * tpATRMult
    stoploss := close - atr * slATRMult
    // tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted)
    // slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted)
    // label.new(bar_index, takeprofit, "TP", style=label.style_labeldown)
    // label.new(bar_index, stoploss, "SL", style=label.style_labelup)
    strategy.entry("Long", strategy.long, when = goLong)
    strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit)
if closeLong
    takeprofit := na
    stoploss := na
    strategy.close(id = "Long", when = closeLong)

if (not inDateRange)
    strategy.close_all()


Thêm nữa