Chiến lược dừng lỗ theo xu hướng


Ngày tạo: 2024-02-05 16:00:35 sửa đổi lần cuối: 2024-02-05 16:00:35
sao chép: 0 Số nhấp chuột: 726
1
tập trung vào
1617
Người theo dõi

Chiến lược dừng lỗ theo xu hướng

Tổng quan

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.

Nguyên tắc chiến lược

Chiến lược này bao gồm:

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

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

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

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

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

Phân tích lợi thế

Chiến lược này có những lợi thế chính như sau:

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

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

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

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

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

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

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

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

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

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

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa bằng cách:

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

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

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

  4. Tăng cơ chế dừng thời gian để tránh nguy cơ bị ngủ một mình.

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

Tóm tắt

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.

Mã nguồn chiến lượ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))