트레일링 스톱 로스로 알파 트렌드 전략

저자:차오장, 날짜: 2023-11-27 15:25:35
태그:

img

전반적인 설명

트레일링 스톱 로스로 알파 트렌드 전략은 트레일링 스톱 로스 메커니즘을 통합하여 알파 트렌드 전략의 향상된 버전으로 위험을 더 효과적으로 제어하고 전반적인 수익을 향상시킬 수 있습니다.

전략 논리

이 전략은 우선 알파 지표를 사용하여 가격 추세를 결정한다. 알파 지표가 상승할 때, 그것은 상승 신호이다. 알파 지표가 하락할 때, 그것은 하락 신호이다. 이 전략은 알파 지표의 황금 십자와 죽은 십자 기반의 구매 및 판매 신호를 생성한다.

한편, 트레일링 스톱 로스 메커니즘이 활성화되어 있습니다. 트레일링 스톱 로스 레벨은 하루의 종료 가격의 10%로 기본 설정됩니다. 긴 포지션을 보유 할 때, 가격이 스톱 로스 수준 이하로 떨어지면 전략은 손실을 중지하기 위해 포지션을 종료합니다. 짧은 포지션에도 마찬가지입니다. 이것은 이익을 더 잘 잠금하고 위험을 줄이는 데 도움이됩니다.

이점 분석

  1. 알파 트렌드는 단순한 이동 평균과 다른 지표보다 가격 추세를 결정하는 더 강력한 능력을 가지고 있습니다.

  2. 트래일링 스톱 로스를 가능하게 함으로써 단일 거래 손실을 효과적으로 제어하여 위험을 줄일 수 있습니다.

  3. 이 전략은 강력한 위험 통제 능력을 가지고 있습니다. 불리한 시장 조건에서도 손실을 최소화 할 수 있습니다.

  4. 더 적은 기준 입력값으로, 이 전략은 계산에 효율적이며, 고주파 거래에 적합합니다.

위험 분석

  1. 측면 범위 시장에서 전략은 많은 불필요한 거래 신호를 생성하여 거래 비용과 미끄러짐 손실을 증가시킬 수 있습니다.

  2. 트레일링 스톱 로스를 허용할 때, 스톱 로스 비율은 적절하게 설정되어야 합니다. 과도하게 높은 비율 또는 낮은 비율은 전략의 수익성에 불리 할 것입니다.

  3. 급격한 가격 변동이 있을 때, 스톱 로스가 발생할 확률이 크게 증가하여 포지션에 잠겨있는 위험이 증가합니다.

  4. 스톱 로스 매개 변수를 최적화 할 때 최대 수익을 추구하는 것뿐만 아니라 기본 의 특성 및 거래 빈도 등 다양한 요소를 고려해야합니다.

위의 위험은 알파 지표 매개 변수를 조정하고, DYNAMIC 스톱 로스를 설정하고, 거래 주기의 길이를 단축함으로써 완화 될 수 있습니다.

최적화 방향

  1. 알파 지표 매개 변수 조합이 더 적합하기 위해 다른 지표 매개 변수를 테스트 할 수 있습니다.

  2. 시장 변동에 더 잘 적응하기 위해 ATR을 기반으로 동적으로 스톱 로스 비율을 설정하려고 노력합니다.

  3. MACD, KD와 같은 다른 지표와 결합하여 일부 잘못된 신호를 필터링합니다.

  4. 매개 변수는 실시간 거래 및 백테스팅 결과를 기반으로 자동으로 최적화 될 수 있으며, 매개 변수 선택의 지능성을 향상시키기 위해 기계 학습 기술을 사용합니다.

결론

트레일링 스톱 로스로 알파 트렌드 전략은 트렌드 결정과 리스크 통제를 결합한다. 이는 가격 트렌드를 효과적으로 식별하고 리스크를 줄이기 위해 수익을 잠금 할 수 있다. 간단한 트렌드 추적 전략과 비교하면 이 전략은 더 높은 안정적인 수익을 얻을 수 있다. 다양한 측면의 최적화로 인해 더 나은 성과를 낼 수 있다.


/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5

strategy("AlphaTrend Strategy", shorttitle='ATst', overlay=true, format=format.price, precision=2, margin_long=100, margin_short=100)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=false)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[1] ? #00E60F : AlphaTrend < AlphaTrend[1] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))


// //ENTER SOME SETUP TRADES FOR TSL EXAMPLE
// longCondition = ta.crossover(ta.sma(close, 10), ta.sma(close, 20))
// if longCondition
//     strategy.entry('My Long Entry Id', strategy.long)

// shortCondition = ta.crossunder(ta.sma(close, 10), ta.sma(close, 20))
// if shortCondition
//     strategy.entry('My Short Entry Id', strategy.short)



longCondition = buySignalk
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = sellSignalk
if (shortCondition)
    strategy.entry("Short", strategy.short)
    

enableTrailing = input.bool(title='Enable Trailing Stop (%)',defval = true)
//TRAILING STOP CODE
trailStop = input.float(title='Trailing (%)', minval=0.0, step=0.1, defval=10) * 0.01



longStopPrice = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0
shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + trailStop)
    math.min(stopValue, shortStopPrice[1])
else
    999999

//PLOT TSL LINES
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(series=strategy.position_size < 0 ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Short Trail Stop', offset=1, title='Short Trail Stop')

    
if enableTrailing
    //EXIT TRADE @ TSL
    if strategy.position_size > 0
        strategy.exit(id='Close Long', stop=longStopPrice)
    if strategy.position_size < 0
        strategy.exit(id='Close Short', stop=shortStopPrice)


 

더 많은