ATR 변동에 적응할 수 있는 동적 스톱 로스 전략

저자:차오장, 날짜: 2023-10-09 15:30:29
태그:

전반적인 설명

이 전략은 동력 지표 스토카스틱 K 값과 변동성 지표 ATR을 결합하여 ATR 값에 따라 스톱 로스 라인과 엔트리 라인을 동적으로 조정하여 시장 변동성에 따라 자동으로 스톱 로스 및 엔트리 라인을 조정하는 아이디어를 실현합니다.

전략 논리

  1. K값 sma (주식) close, high, low, len, smoothK) 를 계산해 줄 수 있습니다.

  2. 길이 len로 ATR 값 atr ((len) 을 계산합니다.

  3. 그래프 스톱 로스 라인 그래프 ((rsi(atr, len) +lowLine,..., title = low line) 및 엔트리 라인 그래프 ((rsi(atr, len) *-1+100-lowLine,..., title = up line) 는 ATR 값을 기반으로 합니다.

  4. K 값이 입구선 교차 (k,up line) 과 Stop Loss 라인 교차 (k,low line) 을 넘을 때 입구와 출구 신호를 결정한다.

  5. 구매 및 판매 신호를 위한 배경 색상 그래프.

  6. 상거래를 실행하고 상위 신호가 발사되면 손해를 멈추도록 설정합니다.

이점 분석

  1. 이 전략은 시장 변동성 ATR을 기반으로 동적으로 스톱 로스 및 엔트리 라인을 조정하며 이는 시장 변동성에 따라 자동으로 스톱 로스 리스크를 조정합니다.

  2. 시장의 변동성이 높을 때, 스톱 로스와 엔트리 라인 사이의 거리는 변동에 의해 중단되는 것을 피하기 위해 증가합니다.

  3. 시장의 변동성이 낮을 때 스톱 로스와 엔트리 라인 사이의 거리는 적시에 스톱 로스를 하기 위해 좁아집니다.

  4. 임멘텀 인디케이터 K 값을 사용하여 입출구를 결정합니다. K 값은 가격 변화 속도를 반영하고 전환점을 잡습니다.

  5. 동력과 변동성 지표를 결합하면 트렌드를 파악하고 변동에 따라 위험을 자동으로 조정할 수 있습니다.

위험 분석

  1. K 값은 잘못된 브레이크오웃을 가지고 불필요한 거래 신호를 유발할 수 있습니다. smoothK 매개 변수를 조정하여 K 라인을 매끄럽게 할 수 있습니다.

  2. ATR 매개 변수 len이 너무 크면, 중지 손실과 입구 라인 사이의 거리는 너무 큰 위험과 함께됩니다. 다른 len 매개 변수의 안정성을 테스트 할 수 있습니다.

  3. 순수한 후속 스톱 손실은 스톱 손실 위치가 적절하는지 결정할 수 없으며 단일 스톱 손실 위험을 제어하지 못합니다. 단일 스톱 손실 위험을 제어하기 위해 예상 스톱 손실을 고려할 수 있습니다.

  4. 빈번한 전략 신호는 높은 거래 비용을 초래합니다. 거래 주파수를 제어하기 위해 엔트리 라인 매개 변수를 조정할 수 있습니다.

최적화 방향

  1. 최적의 매끄러운 K 값 매개 변수 조합을 찾기 위해 smoothK 매개 변수를 테스트하고 조정합니다.

  2. 적절한 ATR 매개 변수를 결정하기 위해 ATR 매개 변수 len의 다른 값을 테스트합니다.

  3. 엔트리 라인 매개 변수를 최적화 lowLine 거래 주파수를 제어하는 최적 매개 변수를 찾기 위해.

  4. 다른 지표를 결합하여 진입 신호를 필터링하고 거래량 지표, KDJ 지표 등과 같은 잘못된 브레이크오프를 피하는 것을 고려하십시오.

  5. 스톱 손실 방법을 최적화하고 예상 스톱 손실을 개선하여 스톱 손실 위험을 적극적으로 제어하는 것을 고려하십시오.

요약

이 전략은 동력 지표 K 값과 변동성 지표 ATR을 기반으로 스톱 로스 및 엔트리 라인을 동적으로 조정하는 아이디어를 실현합니다. 트렌드를 캡처하고 변동에 따라 위험을 자동으로 조정할 수 있습니다. 이는 매우 혁신적이고 실용적입니다. 매개 변수 조정, 스톱 로스 방법의 개선과 같은 추가 최적화는 전략을 더 안정적이고 신뢰할 수있게 만들 수 있으며 큰 발전 전망이 있습니다.


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

//@version=3
strategy("Stoch + ATR", overlay=false, pyramiding = 0, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0.0454, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

len = input(34, minval=1, title="Length for Main Stochastic & ATR") 
smoothK = input(2, minval=1, title="SmoothK for Main Stochastic")
lowLine = input(10, minval=-50, maxval=50, title="Multiplier for up/low lines")

//Stoch formula
k = sma(stoch(close, high, low, len), smoothK)
plot(k, color=aqua, title = "Stoch")

//len=input
atr=atr(len)
plot(rsi(atr, len)+lowLine , color=red,linewidth=2, title = "low line")
plot(rsi(atr, len)*-1+100-lowLine, color=lime,linewidth=2, title = "up line")

aboveLine = crossunder(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine = crossover(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

aboveLine2 = crossover(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine2 = crossunder(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

skip=(aboveLine2==1 or belowLine2==1) and (aboveLine==1 or belowLine==1)? 1 : 0

//BackGroound Color Plots
plotchar(belowLine==1 and skip==0, title="Buy Signal", char='B', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine==1 and skip==0, title="Sell Signal", char='S', location=location.top, color=white, transp=0, offset=0)
plotchar(belowLine2==1 and skip==0, title="Close Signal", char='C', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine2==1 and skip==0, title="Close Signal", char='C', location=location.top, color=white, transp=0, offset=0)

bgcolor(aboveLine==1 ? red : na, transp=30, title = "sell signal")
bgcolor(belowLine==1 ? lime : na, transp=30, title = "buy signal")

bgcolor(aboveLine2==1 ? lime : na, transp=80, title = "close short")
bgcolor(belowLine2==1 ? red : na, transp=80, title = "close long")

bgcolor(skip==1 ? black : na, transp=0, title = "skip signal")

//strategy
longCondition = belowLine==1
shortCondition = aboveLine==1

strategy.entry("BUY", strategy.long, when = longCondition)
strategy.entry("SELL", strategy.short, when = shortCondition)
strategy.cancel_all(when = skip==1)





더 많은