Định hướng sau chiến lược dừng lỗ dựa trên chỉ số báo động xu hướng

Tác giả:ChaoZhang, Ngày: 2024-02-05 16:00:35
Tags:

img

Tổng quan

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 logic

Chiến lược bao gồm các phần chính sau:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. Đó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.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. 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.

  2. 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.

  3. Lấy lợi nhuận đảm bảo lợi nhuận và ngăn chặn ăn lợi nhuận.

  4. 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 phát triển thứ cấp.

  5. Đượ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.

Phân tích rủi ro

Có một số rủi ro trong chiến lược này:

  1. 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.

  2. Khi thị trường dao động mạnh, ATR có thể đánh giá thấp mức độ thực sự.

  3. 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.

  4. 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.

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. 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.

  2. 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.

  3. 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ể.

  4. Tăng cơ chế dừng lỗ thời gian để tránh rủi ro qua đêm.

  5. 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.

Kết luận

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))

Thêm nữa