Chiến lược này được so sánh với giá bằng cách tính toán ATR của phạm vi biến động thực trung bình, để xác định hướng xu hướng giá và kết hợp với tính toán hỗ trợ của đường trung bình di chuyển. So với các phương pháp đánh giá xu hướng khác, nó có thể nắm bắt xu hướng thay đổi giá nhanh hơn và rút lui nhỏ hơn.
Chiến lược này chủ yếu đánh giá xu hướng giá thông qua các bước sau:
Tính toán ATR của phạm vi biến động thực trung bình trong N ngày gần đây. Ở đây, phương pháp tính toán ATR được định nghĩa bởi Wilder được sử dụng để phản ánh tốt hơn sự biến động của thị trường hiện tại.
Đường trên và đường dưới được tính dựa trên ATR và hệ số điều chỉnh atk. đường trên = giá - ((atk nhân ATR); đường dưới = giá + ((atk nhân ATR) trong đó atk thường được đặt trong khoảng từ 2 đến 3.
So sánh mối quan hệ giữa giá với đường lên đường xuống, để xác định hướng xu hướng. Giá trên đường lên đường là tín hiệu lạc quan; giá dưới đường phá đường là tín hiệu giảm giá.
Khi tín hiệu giao dịch xảy ra, hãy làm nhiều hoặc làm ít. Ở đây kết hợp với moving average để xác định chất lượng tín hiệu.
Tham gia chiến lược kiểm soát rủi ro dừng lỗ.
Sử dụng màu sắc của hành vi để đánh dấu trạng thái chiến lược, hỗ trợ phán đoán.
Chiến lược này tận dụng tối đa lợi thế của ATR để nhanh chóng nắm bắt xu hướng thay đổi giá và thực hiện các hoạt động rút lui thấp, một chiến lược theo dõi xu hướng điển hình hơn.
Chiến lược này có những ưu điểm sau:
Đáp ứng nhanh với thay đổi giá. ATR có thể phản ứng nhanh với các tình huống mới nhất, có lợi cho việc bắt kịp các thay đổi xu hướng.
Trở về nhỏ. Có một vùng đệm trên và dưới đường ray, có thể làm giảm khả năng phá vỡ lỗ hổng và giảm khả năng rút lui.
Tín hiệu giao dịch rõ ràng. Đánh giá phạm vi phá vỡ là tín hiệu giao dịch chất lượng cao, có thể làm rõ ràng nhiều hướng làm trống.
Khả năng tùy chỉnh cao. Chu kỳ và số ATR có thể được điều chỉnh để phù hợp với các môi trường thị trường khác nhau.
Hình ảnh mạnh mẽ. Sử dụng công cụ đồ họa để hiển thị trạng thái chiến lược, hoạt động trực quan.
Dễ dàng tối ưu hóa. Có thể thêm các mô-đun như dừng di động, lọc để tối ưu hóa hơn nữa.
Nhìn chung, chiến lược này là một chiến lược giao dịch rất thực tế: rút lui nhỏ, lợi thế nổi bật, phù hợp với việc theo dõi xu hướng.
Chiến lược này cũng có những rủi ro:
Rủi ro bị đánh giá sai lệch trong xu hướng.
Chọn điểm thoát ra rủi ro. Cần lựa chọn điểm dừng một cách hợp lý để ngăn chặn thoát ra sớm.
Rủi ro tối ưu hóa tham số. Chu kỳ ATR và số nhân cần được tối ưu hóa qua kiểm tra lặp đi lặp lại, thiết lập không đúng cách có thể ảnh hưởng đến hiệu suất của chiến lược.
Tần suất giao dịch quá cao có thể gây nguy hiểm.
Rủi ro về hiệu quả kém. Trong một số thị trường không có xu hướng rõ ràng, hiệu quả có thể không tốt.
Khi hoạt động trên thực tế, bạn cũng cần phải điều chỉnh để tối ưu hóa điểm trượt, phí xử lý.
Rủi ro hệ thống. Cần xem xét việc kiểm soát rủi ro của toàn bộ hệ thống, không thể phụ thuộc vào chiến lược này một mình.
Các biện pháp sau đây có thể được áp dụng để kiểm soát các rủi ro trên:
Tối ưu hóa tham số ATR để tăng độ chính xác phán đoán.
Kết hợp phân tích theo nhiều chu kỳ thời gian, xác định xu hướng.
Sử dụng lệnh dừng di động để khóa lợi nhuận và giảm rút tiền.
Các điều kiện lọc được áp dụng để kiểm soát tần suất giao dịch.
Điều chỉnh các tham số chiến lược cho các thị trường khác nhau.
Kiểm tra các loại khác nhau để tìm ra ứng dụng tốt nhất.
Các rủi ro giao dịch được cân nhắc toàn diện trên sàn giao dịch thực.
Chiến lược này có thể được tối ưu hóa bằng cách:
Lập các chỉ số như đường trung bình để lọc, giảm tín hiệu sai. Có thể thêm các chỉ số hỗ trợ như MACD, KDJ.
Tối ưu hóa tham số ATR. Bạn có thể thử nghiệm các tham số ATR khác nhau để tìm ra giá trị tối ưu nhất.
Tối ưu hóa các tham số nhân. Các tham số nhân khác nhau có thể được thử nghiệm để xác định độ nhạy của tín hiệu được tạo ra.
Tham gia vào chiến lược dừng động. Dùng dừng động theo ATR hoặc tỷ lệ biến động, có thể làm giảm thêm sự rút lui.
Kết hợp với phân tích nhiều khung thời gian. Thêm vào đó, các chỉ số định kỳ thời gian cao hơn có thể lọc các tín hiệu giả ngẫu nhiên.
Sử dụng học máy để nâng cao nhận thức tín hiệu. Sử dụng mô hình đào tạo RNN để đánh giá mô hình tín hiệu mua và bán.
Điều chỉnh tham số cho các đặc điểm của giống. Ví dụ: cho các cổ phiếu dao động có thể thu nhỏ chu kỳ ATR thích hợp.
Tối ưu hóa điểm vào. Bạn có thể tìm kiếm điểm vào tốt hơn bằng cách đột phá và kéo trở lại.
Chỉ số khả năng kết hợp. Thêm số lượng giao dịch để đánh giá cường độ tín hiệu.
Thêm chiến lược dừng. Xác định điểm dừng dựa trên các chỉ số năng lượng xu hướng.
Chiến lược siêu xu hướng này là một chiến lược theo dõi xu hướng điển hình, có lợi thế như phản ứng nhanh, rút lui nhỏ và dễ tối ưu hóa. Tuy nhiên, cũng cần lưu ý đến các rủi ro như phán đoán sai và tối ưu hóa tham số, cần được xem xét toàn diện trong thực tế. Bằng cách tối ưu hóa hơn nữa, chiến lược có thể trở nên vững chắc hơn và thu được lợi nhuận tốt hơn trong 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)