Chiến lược dừng lỗ theo xu hướng là một chiến lược giao dịch dừng lỗ theo xu hướng dựa trên chỉ số TrendAlert. Nó xác định hướng xu hướng thông qua chỉ số TrendAlert để thực hiện nhập cảnh theo dõi xu hướng. Đồng thời, nó sử dụng chỉ số ATR để đặt dừng lỗ để kiểm soát rủi ro.
Chiến lược bao gồm các phần chính sau:
Chỉ số TrendAlert đánh giá hướng xu hướng. Khi TrendAlert lớn hơn 0, đó là tín hiệu tăng. Khi nhỏ hơn 0, đó là tín hiệu giảm.
Chỉ số ATR tính toán phạm vi biến động giá gần đây. ATR nhân với nhân stop loss ATR atrStopMultiplier được sử dụng làm stop loss cố định.
Các thấp nhất thấp nhất thấp nhất thấp nhất và cao nhất cao nhất cao cùng với ATR dừng mất tích xây dựng theo dõi dừng mất mát.
Nhập vị trí dài hoặc ngắn theo hướng tín hiệu xu hướng. Sau khi nhập, đặt Take Profit và Stop Loss.
Đóng các vị trí khi giá kích hoạt dừng lỗ hoặc lấy lợi nhuận.
Chiến lược lọc các tín hiệu sai thông qua phán đoán xu hướng, kiểm soát rủi ro thông qua việc theo dõi dừng lỗ, đảm bảo lợi nhuận thông qua lợi nhuận và cải thiện sự ổn định của hệ thống giao dịch.
Những lợi thế chính của chiến lược này là:
Bảo đảm hai lần lọc xu hướng và theo dõi dừng lỗ tránh theo đuổi tiếng ồn thị trường và đảm bảo rủi ro giao dịch có thể kiểm soát được.
Cài đặt dừng lỗ thích nghi ATR ngăn ngừa tối ưu hóa quá mức và phù hợp với các môi trường thị trường khác nhau.
Lấy lợi nhuận đảm bảo lợi nhuận và ngăn chặn ăn lợi nhuận.
Logic chiến lược rõ ràng và ngắn gọn, dễ hiểu và sửa đổi, phù hợp với các nhà giao dịch định lượng
Được viết bằng ngôn ngữ Pine Script, có thể được sử dụng trực tiếp trên nền tảng TradingView mà không cần kỹ năng lập trình.
Có một số rủi ro trong chiến lược này:
Phương pháp đánh giá xu hướng không chính xác có thể gây ra các tín hiệu nhập và stop loss không cần thiết.
Khi thị trường dao động mạnh, ATR có thể đánh giá thấp mức độ thực sự.
Mục tiêu lấy lợi nhuận có thể hạn chế không gian lợi nhuận của chiến lược.
Logic tồn tại chỉ dựa trên giá cả nên được kết hợp với quản lý thời gian.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tối ưu hóa các tham số ATR dài atrLength và stop loss multiplier atrStopMultiplier để điều chỉnh độ nhạy của thuật toán stop loss.
Hãy thử các chỉ số xu hướng khác nhau để tìm cơ hội nhập cảnh tốt hơn.
Chọn hoặc điều chỉnh tham số mục tiêu lấy lợi nhuận theo đặc điểm của các loại giao dịch cụ thể.
Tăng cơ chế dừng lỗ thời gian để tránh rủi ro qua đêm.
lọc các sự phá vỡ sai bằng cách kết hợp các chỉ số khối lượng giao dịch để cải thiện tính ổn định của chiến lược.
Nói chung, đây là một chiến lược theo dõi xu hướng rất thực tế. Nó sử dụng các chỉ số để xác định hướng xu hướng để đạt được theo dõi xu hướng, trong khi thiết lập các điểm dừng thích nghi để đảm bảo kiểm soát rủi ro. Logic chiến lược rõ ràng và dễ sử dụng, làm cho nó lý tưởng cho người mới bắt đầu học. Đồng thời, nó cũng cung cấp một khuôn khổ chiến lược giao dịch tốt cho phát triển chiến lược tiên tiến, đáng cho các nhà giao dịch định lượng nghiên cứu sâu và tối ưu hóa.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jaque_verdatre //@version=5 strategy("TrendAlert Based", overlay = true) // Get inputs TrendAlert = input.source(close, "TrendAlert") atrLength = input.int(title="ATR Length", defval=15, minval=1) useStructure = input.bool(title="Use Structure?", defval=true) lookback = input.int(title="How Far To Look Back For High/Lows", defval=8, minval=1) atrStopMultiplier = input.float(title="ATR Multiplier", defval=0.2, minval=0.1) LimitMultiplier = input.float(title = "Limit Multiplier", defval = 0.5, minval = 0.1) PineConnectorID = input.int(title = "Pine Connector ID",defval = 0) CurrencyToSend = input.string(title = "personilized currency", defval = "ETHUSD") Risk = input.int(title = "risk in % to send", defval = 10, minval = 1) // Calculate data atr = ta.atr(atrLength) lowestLow = ta.lowest(low, lookback) highestHigh = ta.highest(high, lookback) longStop = (useStructure ? lowestLow : close) - atr * atrStopMultiplier shortStop = (useStructure ? highestHigh : close) + atr * atrStopMultiplier // Draw data to chart plot(atr, color=color.rgb(33, 149, 243), title="ATR", display = display.none) plot(longStop, color=color.green, title="Long Trailing Stop") plot(shortStop, color=color.red, title="Short Trailing Stop") var float LimitL = na var float LimitS = na var float LPosPrice = na var float SPosPrice = na var float LPosLongStop = na var float SPosShortStop = na KnowLimit (PosPrice, PosStop) => (PosPrice-PosStop)*LimitMultiplier+PosPrice NotInTrade = strategy.position_size == 0 InLongTrade = strategy.position_size > 0 InShortTrade = strategy.position_size < 0 longCondition = TrendAlert > 0 and NotInTrade if (longCondition) LPosPrice := close LPosLongStop := longStop LimitL := KnowLimit(LPosPrice, LPosLongStop) strategy.entry("long", strategy.long) LTPPip = LimitL-LPosPrice LSLPip = LPosPrice-longStop alert(str.tostring(PineConnectorID)+',buy,'+str.tostring(CurrencyToSend)+',risk='+str.tostring(Risk)+',sl='+str.tostring(LSLPip)+'tp='+str.tostring(LTPPip), alert.freq_once_per_bar_close) strategy.exit("exit", "long", stop = longStop, limit = LimitL) shortCondition = TrendAlert < 0 and NotInTrade if (shortCondition) SPosPrice := close SPosShortStop := shortStop LimitS := KnowLimit(SPosPrice, SPosShortStop) strategy.entry("short", strategy.short) STPPip = SPosPrice-LimitS SSLPip = shortStop - SPosPrice alert(str.tostring(PineConnectorID)+',sell,ETHUSD,risk=10,sl='+str.tostring(SSLPip)+'tp='+str.tostring(STPPip), alert.freq_once_per_bar_close) strategy.exit("exit", "short", stop = shortStop, limit = LimitS) plotshape(longCondition, color = color.green, style = shape.labelup, location = location.belowbar, size = size.normal, title = "Long Condition") plotshape(shortCondition, color = color.red, style = shape.labeldown, location = location.abovebar, size = size.normal, title = "Short Condition") if (InShortTrade) LimitL := close LPosLongStop := close LPosPrice := close PlotLongTakeProfit = plot(LimitL, color = InLongTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Long Take Profit") PlotLongStopLoss = plot(LPosLongStop, color = InLongTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Long Stop Loss") PlotLongPosPrice = plot(LPosPrice, color = InLongTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Long Position Price") if (InLongTrade) LimitS := close SPosShortStop := close SPosPrice := close PlotShortTakeProfit = plot(LimitS, color = InShortTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Short Take Profit") PlotShortStopLoss = plot(SPosShortStop, color = InShortTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Short Stop Loss") PlotShortPosPrice = plot(SPosPrice, color = InShortTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Short Position Price") fill(PlotLongPosPrice, PlotLongTakeProfit, color = InLongTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100)) fill(PlotShortPosPrice, PlotShortTakeProfit, color = InShortTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100)) fill(PlotLongPosPrice, PlotLongStopLoss, color = InLongTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100)) fill(PlotShortPosPrice, PlotShortStopLoss, color = InShortTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))