Chiến lược này sử dụng chỉ số SuperTrend để xác định các cơ hội nhập vào đường dài. Nó sử dụng ATR và số nhân trong phạm vi thực trung bình để xác định vị trí hỗ trợ động để nhập vào vị trí dài. Chiến lược tập trung vào các cơ hội giao dịch dài.
Tính theo chu kỳ ATR và nhân số trên và dưới đường. Khi giá phá vỡ đường lên, tăng lên, và khi phá vỡ đường xuống, giảm xuống.
Tính xu hướng hiện tại, 1 biểu thị đà tăng, -1 biểu thị đà giảm. Khi giá phá vỡ đường đua, xu hướng sẽ đảo ngược, kích hoạt tín hiệu mua; Khi phá vỡ đường mòn, xu hướng sẽ đảo ngược, kích hoạt tín hiệu bán.
Kết hợp trung bình di chuyển làm bộ lọc xu hướng, yêu cầu giá cao hơn MA để mua khi phá vỡ đường đua, yêu cầu giá thấp hơn MA để bán khi phá vỡ đường đua, tránh phá vỡ giả.
Hình ảnh hiển thị hỗ trợ đánh dấu xu hướng, tín hiệu giao dịch và các thông tin khác, hỗ trợ phán đoán.
Chiến lược này có những ưu điểm sau:
Sử dụng chỉ số SuperTrend có thể theo dõi động sự thay đổi giá, phản ánh đúng thời gian sự thay đổi xu hướng.
Phương pháp dừng ATR có thể điều chỉnh điểm dừng tùy theo biến động của thị trường, có lợi cho việc khóa lợi nhuận.
Kết hợp với MA loại bỏ phá vỡ giả, có thể lọc hiệu quả các tín hiệu giao dịch tiếng ồn của thị trường chấn động.
Thiết kế trực quan cho thấy trực quan chiến lược giao dịch và tình hình thị trường, hoạt động đơn giản.
Chỉ giao dịch tại các điểm biến động xu hướng, rất phù hợp cho các vị trí dài dòng.
Chiến lược này có những rủi ro:
Chỉ số SuperTrend nhạy cảm với các tham số, điều chỉnh nhiều đường dây thường xuyên, có thể có giao dịch thường xuyên.
Trong trường hợp xảy ra chấn động, dây dừng sẽ được kích hoạt thường xuyên.
Không tính chi phí giao dịch, một khoản tiền nhỏ sẽ bị ảnh hưởng bởi phí giao dịch.
Không có lệnh dừng lỗ, nguy cơ rút tiền cao hơn.
Có thể các đợt sóng xu hướng đã bỏ lỡ một số cơ hội.
Bạn có thể làm giảm nguy cơ bằng cách:
Tối ưu hóa tham số ATR, giảm tần số điều chỉnh đa đường hàng không.
Thêm bộ lọc dây K tương đương để tránh bị nhiễu sóng cao tần số.
Thiết lập Stop Loss Stop Stop để bảo vệ lợi nhuận.
Điều chỉnh chu kỳ trung bình di chuyển để cân bằng hiệu ứng lọc.
Tối ưu hóa quản lý vốn, giảm chi phí giao dịch.
Chiến lược này có thể được tối ưu hóa bằng cách:
Kiểm tra các nguồn giá khác nhau, chẳng hạn như giá đóng cửa, giá cao nhất.
Thử các chỉ số dừng động khác, chẳng hạn như Chandelier Exit.
Thêm mô-đun quản lý vị trí, tối ưu hóa hiệu quả sử dụng vốn.
Kết hợp với chỉ số biến động, thời gian nhập cảnh của Refine.
Thêm mô-đun dừng lỗ, ngăn chặn, kiểm soát rủi ro.
Các tham số điều chỉnh cho các thị trường khác nhau.
Khám phá các thuật toán học máy để tối ưu hóa tham số.
Kết hợp các chỉ số khác để đánh giá và tăng độ chính xác của bộ lọc.
Chiến lược này sử dụng SuperTrend để tích hợp xu hướng phán đoán dừng động, và hỗ trợ MA để lọc xu hướng để xác định thời gian mua đường dài. Thiết kế trực quan đơn giản hóa hoạt động. Bằng cách tối ưu hóa cài đặt tham số và mở rộng chức năng, nó có thể trở thành một chiến lược giao dịch đường dài ổn định và đáng tin cậy.
/*backtest
start: 2020-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)
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
// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)
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 and close > ma
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 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 and close < ma
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0))
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", 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() => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
strategy.close("BUY")
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)