트렌드 경고 지표에 기초한 스톱 로스 전략을 따르는 트렌드

저자:차오장, 날짜: 2024-02-05 16:00:35
태그:

img

전반적인 설명

트렌드 다음 스톱 로스 전략은 트렌드 알렛 지표에 기반한 트렌드 추적 스톱 로스 거래 전략이다. 트렌드 추적 엔트리를 구현하기 위해 트렌드 알렛 지표를 통해 트렌드 방향을 결정합니다. 동시에 ATR 지표를 사용하여 위험을 제어하기 위해 스톱 로스를 설정합니다.

전략 논리

이 전략은 다음과 같은 주요 부분으로 구성됩니다.

  1. 트렌드 알레트 지표는 트렌드 방향을 판단합니다. 트렌드 알레트가 0보다 크면 상승 신호입니다. 0보다 작으면 하락 신호입니다.

  2. ATR 지표는 최근 가격 변동 범위를 계산합니다. ATR Stop Loss 곱셈으로 ATR Stop Loss 곱셈으로 고정된 Stop Loss로 사용됩니다.

  3. 최저 최저 최하위 최하위 최상위 최상위 ATR 스톱 손실과 함께 추적 스톱 손실을 구성합니다. 구조 매개 변수는 활성화 여부를 제어합니다.

  4. 트렌드 신호 방향에 따라 긴 또는 짧은 포지션을 입력합니다. 입력 후, 수익을 취하고 손실을 중지하십시오.

  5. 가격 트리거가 손실을 멈추거나 이익을 취하면 포지션을 닫습니다.

이 전략은 트렌드 판단을 통해 잘못된 신호를 필터링하고, 스톱 로스를 추적함으로써 위험을 제어하고, 수익을 취함으로써 수익성을 보장하며, 거래 시스템의 안정성을 향상시킵니다.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 트렌드 필터링과 스톱 로스 추적의 이중 보장은 시장 소음을 쫓는 것을 피하고 통제 가능한 거래 위험을 보장합니다.

  2. ATR 적응 스톱 손실 설정은 과도한 최적화를 방지하고 다양한 시장 환경에 적합합니다.

  3. 이윤을 취하는 것은 수익성을 보장하고 수익을 소비하는 것을 방지합니다.

  4. 전략 논리는 명확하고 간결하며, 이해하기 쉽고 수정 할 수 있으며, 양적 거래자의 2차 개발에 적합합니다.

  5. 파인 스크립트 언어로 작성되어 프로그래밍 기술이 필요없이 트레이딩뷰 플랫폼에서 직접 사용할 수 있습니다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 잘못된 트렌드 판단은 불필요한 진입 및 스톱 손실 트리거를 일으킬 수 있습니다. 당신은 적절하게 스톱 손실을 느슨하게하거나 입력 신호를 필터 할 수 있습니다.

  2. 시장이 격렬하게 변동할 때, ATR은 진정한 진폭을 과소평가 할 수 있습니다. 이 때, ATR 스톱 로스 곱셈 자 atrStopMultiplier는 증가 할 수 있습니다.

  3. 목표 수익은 전략의 수익 공간을 제한 할 수 있습니다. 시장에 따라 제한 곱기 매개 변수를 조정하십시오.

  4. 가격에만 기반을 둔 현존 논리는 시간 관리와 결합되어야합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 매개 변수를 최적화 ATR 길이 atrLength 및 중지 손실 증배자 atrStopMultiplier 중지 손실 알고리즘의 민감도를 조정하기 위해.

  2. 더 나은 진입 기회를 찾기 위해 다른 트렌드 지표를 시도하십시오.

  3. 특정 거래 품종의 특성에 따라 목표 수익 매개 변수를 선택하거나 조정합니다.

  4. 시간 중지 손실 메커니즘을 증가 하 여 하루 위험 을 피 합니다.

  5. 전략의 안정성을 높이기 위해 거래량 지표를 결합하여 거짓 브레이크를 필터합니다.

결론

일반적으로, 이것은 매우 실용적인 트렌드 추적 스톱 로스 전략이다. 트렌드 추적을 달성하기 위해 트렌드 방향을 결정하는 지표를 사용하여 적응적 인 스톱을 설정하여 위험을 제어 할 수 있습니다. 전략 논리는 명확하고 사용하기 쉽고 초보자가 배우기에 이상적입니다. 동시에 고급 전략 개발을위한 좋은 거래 전략 프레임워크를 제공합니다. 이는 양적 거래자 심층 연구 및 최적화에 가치가 있습니다.


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

더 많은