알파 트렌드 팔로잉 스톱 로스 전략


생성 날짜: 2023-11-27 15:25:35 마지막으로 수정됨: 2023-11-27 15:25:35
복사: 0 클릭수: 835
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

알파 트렌드 팔로잉 스톱 로스 전략

개요

알파 트렌드 추적 스톱 전략은 알파 트렌드 전략의 기초에 추적 스톱 메커니즘을 추가하여 위험을 더 효과적으로 제어하고 전체적인 수익률을 높일 수 있습니다.

전략 원칙

이 전략은 우선 알파 지표를 사용하여 가격 흐름을 판단합니다. 알파 지표가 상승하면 시상 신호이며, 알파 지표가 하락하면 시상 신호입니다. 전략은 알파 지표의 금叉死叉에 따라 구매 및 판매 신호를 생성합니다.

동시에, 전략은 추적 중지 메커니즘을 활성화한다. 추적 중지 값은 당일 종료 가격의 10%를 기본으로 설정하고, 다단계 포지션을 보유 할 때, 가격이 중지 값보다 떨어지면 손실을 중단하고, 공백 포지션을 보유 할 때, 가격이 중지 값보다 상승하면 손실을 중단한다. 이렇게 더 나은 수익을 고정하고 위험을 줄일 수 있다.

우위 분석

  1. 알파 트렌드는 가격 트렌드를 판단하는 능력이 강하며, 일반 이동 평균과 같은 지표보다 더 효과적이다.

  2. 추적 중지 메커니즘을 활성화하면 단독 손실을 효과적으로 제어하고 위험을 줄일 수 있습니다.

  3. 이 전략은 위험 통제 능력이 강하여, 악의적 인 상황에서도 손실을 최소화 할 수 있습니다.

  4. 이 전략은 참조수가 적고, 계산 효율이 높으며, 고주파 거래에 적합하다.

위험 분석

  1. 이 전략은 수평 조정 시 불필요한 거래 신호를 더 많이 생성하여 거래 비용과 슬라이드 손실을 증가시킵니다.

  2. 트래킹 스톱로스를 활성화할 때 합리적인 스톱로스 비율을 설정해야 하며, 너무 큰 비율과 너무 작은 비율은 전략이 수익을 거두는 데 도움이 되지 않는다.

  3. 지표의 가격이 급격하게 변동할 때, 정지 손실이 유발될 확률이 높아지고, 포획의 위험이 증가한다.

  4. 스톱로스 파라미터를 최적화할 때는 지표의 특성, 거래 빈도 등 여러 가지 요소를 종합적으로 고려해야 합니다. 수익을 극대화하기만 추구할 수는 없습니다.

위의 위험은 알파 지표 매개 변수를 조정하고, 다이내믹 스톱로드를 설정하고, 거래 주기를 줄이는 등의 방법으로 완화할 수 있다.

최적화 방향

  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)