Chiến lược theo dõi đường trung bình động động


Ngày tạo: 2023-11-24 16:59:25 sửa đổi lần cuối: 2023-11-24 16:59:25
sao chép: 0 Số nhấp chuột: 608
1
tập trung vào
1617
Người theo dõi

Chiến lược theo dõi đường trung bình động động

Tổng quan

Ý tưởng cốt lõi của chiến lược này là sử dụng đường trung bình động để theo dõi xu hướng, thiết lập điểm dừng lỗ và kết hợp với chỉ dẫn của kỹ thuật Hayklink để phán đoán tín hiệu đa khoảng trống. Chỉ số ATR được sử dụng để tính toán đường trung bình động và vị trí dừng lỗ.

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

Chiến lược này đầu tiên tính toán chỉ số ATR, sau đó kết hợp nguồn giá và tham số đầu vào để tính toán đường trung bình động. Khi giá cao hơn / thấp hơn đường trung bình động, nó tạo ra tín hiệu nhiều / trống. Đồng thời thiết lập vị trí dừng lỗ, theo dõi sự thay đổi giá và cập nhật trực tiếp.

Cụ thể, đầu tiên tính toán chỉ số ATR và tham số nLoss. Sau đó, tính giá chu kỳ hiện tại và vị trí dừng của chu kỳ trước, so sánh cả hai để cập nhật đường dừng. Khi giá phá vỡ đường dừng của chu kỳ trước, tạo ra tín hiệu nhiều / trống và màu tương ứng; Khi tín hiệu giao dịch được tạo ra, vẽ dấu mũi tên.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là sử dụng đường trung bình di động để theo dõi thay đổi giá trong thời gian thực. Điều này giúp nắm bắt xu hướng tốt hơn so với đường trung bình di động cố định truyền thống, giảm khả năng dừng lỗ. Ngoài ra, kết hợp với dừng ATR, bạn có thể điều chỉnh vị trí dừng lỗ một cách linh hoạt theo mức độ biến động của thị trường, kiểm soát rủi ro hiệu quả.

Rủi ro và giải pháp

Rủi ro chính của chiến lược này là giá có thể tăng cao hơn, do đó phá vỡ đường dừng sẽ tạo ra tín hiệu sai. Ngoài ra, điều kiện không đúng có thể dẫn đến giao dịch quá thường xuyên.

Giải pháp là tối ưu hóa số lần trung bình di chuyển, điều chỉnh kích thước ATR và hệ số dừng để giảm khả năng tín hiệu sai. Ngoài ra, điều kiện lọc có thể được thiết lập để tránh giao dịch quá dày đặc.

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

Chiến lược này có thể được tối ưu hóa bằng cách:

  1. Kiểm tra các loại và chu kỳ trung bình di chuyển để tìm ra sự kết hợp tốt nhất

  2. Tối ưu hóa tham số chu kỳ ATR, cân bằng độ nhạy dừng lỗ

  3. Thêm các điều kiện và chỉ số lọc bổ sung để cải thiện chất lượng tín hiệu

  4. Điều chỉnh giá trị dừng lỗ, tối ưu hóa tỷ lệ rủi ro lợi nhuận

Tóm tắt

Ý tưởng cốt lõi của chiến lược này là theo dõi thay đổi giá theo thời gian thực trên đường trung bình động, sử dụng chỉ số ATR để thiết lập các vị trí dừng lỗ động và kiểm soát rủi ro chặt chẽ trong khi theo dõi xu hướng. Bằng cách tối ưu hóa tham số và sửa đổi quy tắc, chiến lược này có thể được điều khiển thành một hệ thống định lượng rất hữu ích.

Mã nguồn chiến lược
/*backtest
start: 2022-11-23 00:00:00
end: 2023-11-05 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT","stocks":0}]
*/

//@version=5
strategy(title='UT Bot v5', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
//Edited and converted to @version=5 by SeaSide420 for Paperina
// Inputs
AllowBuy = input(defval=true, title='Allow Buy?')
AllowSell = input(defval=false, title='Allow Sell?')
h = input(false, title='Signals from Heikin Ashi Candles')
//revclose = input(defval=true, title='Close when reverse signal?')
Price = input(defval=open, title='Price Source (recommended OPEN to avoid repainting)')
smoothing = input.string(title="Moving Average Type", defval="HMA", options=["SMA", "EMA", "WMA", "HMA"])
MA_Period = input(2, title='This changes the MAPeriod')
a = input.float(1, title='This changes the sensitivity',step=0.1)
c = input(11, title='ATR Period')
TakeProfit = input.int(defval=50000, title='Take Profit ($)', minval=1)
StopLoss = input.int(defval=50000, title='Stop Loss ($)', minval=1)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, Price, lookahead=barmerge.lookahead_off) : Price
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ma_function(src, MA_Period) =>
    switch smoothing
        "SMA" => ta.sma(src, MA_Period)
        "EMA" => ta.ema(src, MA_Period)
        "WMA" => ta.wma(src, MA_Period)
        => ta.hma(src, MA_Period)
thema = ma_function(src, MA_Period)
above = ta.crossover(thema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, thema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plot(thema,title="The M.A.",color=color.green,linewidth=2)
plot(xATRTrailingStop,title="The M.A.",color=color.red,linewidth=2)
plotshape(buy,  title = "Buy",  text = "Buy",  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, size = size.tiny)
plotshape(sell, title = "Sell", text = "Sell", style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, size = size.tiny)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
strategy.close_all(when=strategy.openprofit>TakeProfit,alert_message="Close- TakeProfit", comment = "TP")
strategy.close_all(when=strategy.openprofit<StopLoss-(StopLoss*2),alert_message="Close- StopLoss", comment = "SL")
strategy.close("buy", when =  sell and AllowSell==false , comment = "close buy")
strategy.close("sell", when =  buy and AllowBuy==false, comment = "close sell")
strategy.entry("buy", strategy.long, when = buy and AllowBuy)
strategy.entry("sell", strategy.short, when = sell and AllowSell)