EMA tăng cường chiến lược siêu xu hướng

Tác giả:ChaoZhang, Ngày: 2023-10-07 10:07:15
Tags:

Tổng quan

Chiến lược này đánh giá hướng xu hướng giá bằng cách so sánh ATR và giá, kết hợp với đánh giá hỗ trợ trung bình động. So với các phương pháp đánh giá xu hướng khác, nó có thể nắm bắt các thay đổi xu hướng giá nhanh hơn với các drawdown nhỏ.

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

Các bước chính của chiến lược này để xác định xu hướng giá là:

  1. Tính toán ATR trong N ngày gần đây, sử dụng phương pháp tính toán ATR của Wilder, có thể phản ánh tốt hơn sự biến động của thị trường hiện tại.

  2. Tính toán các dải trên và dưới dựa trên ATR và hệ số atk. Dải trên = giá - (atk x ATR); Dải dưới = giá + (atk x ATR). atk thường được đặt giữa 2-3.

  3. So sánh giá với dải trên và dưới để xác định hướng xu hướng.

  4. Lấy dài hoặc ngắn khi tín hiệu giao dịch xảy ra. Trung bình động được sử dụng ở đây để xác định chất lượng tín hiệu.

  5. Thêm chiến lược dừng lỗ để kiểm soát rủi ro.

  6. Sử dụng đánh dấu màu sắc cho tình trạng chiến lược để hỗ trợ phán đoán.

Chiến lược này tận dụng đầy đủ những lợi thế của ATR để nhanh chóng nắm bắt sự thay đổi xu hướng giá và đạt được các hoạt động rút tiền thấp.

Ưu điểm

Những lợi thế của chiến lược này bao gồm:

  1. Phản ứng nhanh chóng với sự thay đổi giá. ATR có thể phản ứng nhanh với thị trường mới nhất và giúp nắm bắt sự thay đổi xu hướng kịp thời.

  2. Khu vực đệm giữa các dải trên và dưới có thể làm giảm xác suất phá vỡ dừng lỗ và giảm giảm.

  3. Các tín hiệu giao dịch rõ ràng. những tín hiệu chất lượng cao cho các hướng dài và ngắn.

  4. Có khả năng tùy biến cao. Thời gian ATR và nhân có thể điều chỉnh để thích nghi với môi trường thị trường khác nhau.

  5. Hiển thị mạnh mẽ. Công cụ đồ họa hiển thị tình trạng chiến lược trực quan.

  6. Dễ dàng tối ưu hóa. Các mô-đun như di chuyển stop loss, bộ lọc có thể được thêm để tối ưu hóa hơn nữa.

Nói chung, chiến lược này có những lợi thế nổi bật như rút tiền nhỏ, làm cho nó rất phù hợp với các chiến lược theo xu hướng.

Rủi ro

Ngoài ra còn có một số rủi ro:

  1. Rủi ro sai xác định xu hướng: có thể có tín hiệu sai trong quá trình củng cố giá.

  2. Rủi ro lựa chọn điểm thoát: điểm dừng lỗ cần phải được đặt hợp lý để tránh thoát sớm.

  3. Rủi ro tối ưu hóa tham số. Thời gian ATR và nhân cần thử nghiệm và tối ưu hóa lặp đi lặp lại, cài đặt không đúng sẽ ảnh hưởng đến hiệu suất.

  4. Rủi ro tần suất giao dịch cao: tần suất giao dịch có thể quá cao trong thời gian biến động thị trường cực kỳ.

  5. Rủi ro hiệu suất trung bình: hiệu suất có thể không thỏa mãn ở một số thị trường không có xu hướng rõ ràng.

  6. Điều chỉnh cho rủi ro giao dịch trực tiếp. Điều chỉnh cần được thực hiện cho trượt, hoa hồng trong giao dịch trực tiếp.

  7. Rủi ro có hệ thống: kiểm soát rủi ro hệ thống tổng thể nên được xem xét, thay vì chỉ dựa vào chiến lược này.

Các rủi ro có thể được kiểm soát bằng cách:

  1. Tối ưu hóa các thông số ATR để cải thiện độ chính xác.

  2. Sử dụng phân tích nhiều khung thời gian để xác định xu hướng.

  3. Sử dụng stop loss di chuyển để khóa lợi nhuận và giảm rút tiền.

  4. Thêm bộ lọc để kiểm soát tần suất giao dịch.

  5. Điều chỉnh các thông số cho các thị trường khác nhau.

  6. Kiểm tra các sản phẩm khác nhau để tìm ra kịch bản ứng dụng tốt nhất.

  7. Xem xét toàn diện tất cả các rủi ro giao dịch trong giao dịch trực tiếp.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Thêm các bộ lọc như đường trung bình động để giảm tín hiệu không chính xác.

  2. Tối ưu hóa các thông số ATR bằng cách thử nghiệm các khoảng thời gian khác nhau để tìm ra các giá trị tối ưu.

  3. Tối ưu hóa tham số nhân để xác định độ nhạy của việc tạo tín hiệu.

  4. Thêm các chiến lược dừng lỗ năng động dựa trên ATR hoặc biến động.

  5. Sử dụng các chỉ số khung thời gian cao hơn để phân tích để lọc các tín hiệu sai.

  6. Sử dụng các mô hình học máy như RNN để cải thiện đánh giá tín hiệu.

  7. Điều chỉnh các tham số dựa trên các đặc điểm của sản phẩm. ví dụ, sử dụng thời gian ATR ngắn hơn cho các cổ phiếu dễ bay hơi.

  8. Tối ưu hóa các điểm nhập bằng cách sử dụng các phương pháp rút lại để tìm các mục nhập tốt hơn.

  9. Kết hợp các chỉ số âm lượng để đánh giá cường độ tín hiệu.

  10. Thêm các chiến lược lợi nhuận dựa trên các chỉ số động lực xu hướng.

Kết luận

Nói chung, chiến lược siêu xu hướng này rất thực tế với những lợi thế như phản ứng nhanh và rút tiền nhỏ. Đây là một hệ thống theo xu hướng điển hình. Nhưng các rủi ro như lỗi đánh giá và tối ưu hóa tham số nên được xem xét trong giao dịch trực tiếp, và quản lý rủi ro toàn diện nên được thực hiện. Việc tối ưu hóa thêm có thể làm cho chiến lược mạnh mẽ hơn và có lợi nhuận hơn trên nhiều thị trường.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
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)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
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, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
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, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
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
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
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()  => true
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

//@version=3
//study(title="3 Moving Average Exponential", shorttitle="3 EMA", overlay=true)
//len1 = input(17, minval=1, title="Fast")
//len2 = input(72, minval=1, title="Medium")
len3 = input(305, minval=1, title="Slow")
//src1 = input(close, title="Source Fast")
//src2 = input(close, title="Source Medium")
src3 = input(close, title="Source Slow")
//out1 = ema(src1, len1)
//out2 = ema(src2, len2)
out3 = ema(src3, len3)
//plot(out1, title="EMA1", color=fuchsia)
//plot(out2, title="EMA2", color=orange)
plot(out3, title="EMA3", color=color.blue)

Thêm nữa