
Chiến lược dừng theo xu hướng là một chiến lược giao dịch dừng theo dõi dựa trên chỉ số xu hướng TrendAlert. Nó sử dụng chỉ số TrendAlert để xác định hướng của xu hướng, thực hiện nhập cảnh theo dõi xu hướng.
Chiến lược này bao gồm:
Chỉ số TrendAlert đánh giá xu hướng. Khi TrendAlert lớn hơn 0 là tín hiệu lạc quan, nhỏ hơn 0 là tín hiệu giảm giá.
Chỉ số ATR tính phạm vi biến động giá gần đây. ATR nhân với ATR StopMultiplier trStopMultiplier làm điểm dừng cố định.
Giá thấp nhất lowestLow và giá cao nhất highestHigh kết hợp với ATR dừng lỗ xây dựng theo dõi dừng lỗ ◄ có sử dụng kiểm soát tham số cấu trúc được bật hay không ◄
Theo hướng tín hiệu xu hướng, nhập vào vị trí mua hoặc bán. Sau khi vào, đặt Take Profit và Stop Loss.
Khi giá kích hoạt dừng lỗ hoặc dừng lại, vị thế thanh toán sẽ được thực hiện.
Chiến lược này sử dụng xu hướng để đánh giá các tín hiệu giả mạo, theo dõi rủi ro kiểm soát lỗ hổng, mục tiêu lợi nhuận để đảm bảo lợi nhuận và nâng cao tính ổn định của hệ thống giao dịch.
Chiến lược này có những lợi thế chính như sau:
Trình lọc xu hướng và theo dõi dừng lỗ đảm bảo kép, tránh theo đuổi tiếng ồn thị trường và đảm bảo rủi ro giao dịch được kiểm soát.
ATR tự thích ứng với thiết lập dừng lỗ để ngăn chặn tối ưu hóa quá mức, phù hợp với nhiều môi trường thị trường.
Mục tiêu của bạn là đảm bảo lợi nhuận và tránh ăn hết lợi nhuận.
Chiến lược logic rõ ràng và đơn giản, dễ hiểu sửa đổi, phù hợp cho các nhà giao dịch định lượng phát triển thứ hai.
Nó được viết bằng ngôn ngữ kịch bản Pine và có thể được sử dụng trực tiếp trên nền tảng TradingView mà không cần lập trình cơ bản.
Chiến lược này cũng có một số rủi ro:
Sự sai lầm trong đánh giá xu hướng có thể dẫn đến việc kích hoạt các tín hiệu đầu vào và dừng không cần thiết. Các tín hiệu dừng hoặc lọc đầu vào có thể được nới lỏng thích hợp.
ATR có thể đánh giá thấp sóng thực tại khi tình hình biến động mạnh. Trong trường hợp này, ATR có thể tăng trần số trStopMultiplier.
Mục tiêu dừng có thể hạn chế chiến lược lợi nhuận. Có thể điều chỉnh theo thị trường limitMultiplier tham số.
Lập luận code exist chỉ dựa trên giá cả, thực tế nó nên được kết hợp với quản lý thời gian.
Chiến lược này có thể được tối ưu hóa bằng cách:
Tối ưu hóa tham số ATR lengthatrLength và stop multiplieratrStopMultiplier, điều chỉnh độ nhạy của thuật toán stop loss.
Thử các chỉ số khác nhau để đánh giá xu hướng và tìm kiếm thời điểm tốt hơn để nhập học.
Chọn hoặc điều chỉnh tham số dừng mục tiêu theo đặc điểm của loại giao dịch cụ thể.
Tăng cơ chế dừng thời gian để tránh nguy cơ bị ngủ một mình.
Kết hợp với các chỉ số khối lượng giao dịch lọc phá vỡ giả tạo để tăng sự ổn định của chiến lược.
Chiến lược này nói chung 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 xu hướng để thực hiện theo dõi xu hướng, đồng thời thiết lập tự điều chỉnh để đảm bảo kiểm soát rủi ro. Chiến lược này có logic rõ ràng, sử dụng đơn giản, rất phù hợp để người mới bắt đầu học.
/*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))