이 전략은 동력 지표의 무작위 지표 K값과 변동률 지표 ATR을 결합하여 ATR의 값에 따라 K값의 중지선과 입구선을 동적으로 조정하여 시장 변동에 따라 자동으로 중지선과 입구선을 조정하는 아이디어를 구현합니다.
계산 길이가 len인 K값sma (((stoch (((close, high, low, len), smoothK), 임의의 지표 K값을 나타냅니다.
계산된 길이가 len인 ATR값atr ((len)
ATR 값에 따라 스톱 라인 플롯 ((rsi ((atr, len) +lowLine, …, title = “low line”) 과 입점 라인 플롯 ((rsi ((atr, len)*-1+100-lowLine, …, title = “up line”)。
K값이 언제 입점선 (crossover) 과 정지선 (crossunder) 을 뚫고 구매 및 판매 신호를 생성하는지 판단한다.
구매 및 판매의 배경 색상을 그리기
위의 신호가 충족되면 구매 및 판매 작업을 수행하고 손실을 중지하십시오.
이 전략은 시장의 변동에 따라 ATR에 따라 스톱 라인 및 입문 라인을 동적으로 조정하며 시장의 변동에 따라 스톱 리스크를 자동으로 조정할 수 있습니다.
시장의 변동이 큰 경우, 스톱 라인과 입문 라인의 간격이 넓어지면 스톱 라인이 흔들리지 않도록 할 수 있다.
시장의 변동이 평온할 때, 스톱라인과 입수선 간격이 좁아지므로, 적시에 스톱를 할 수 있다.
동력 지표 K값을 사용하여 입구와 출구를 결정한다. K값은 가격 변화 속도를 반응하여 전환점을 잡을 수 있다.
동적 지표와 변동률 지표가 결합되어 트렌드를 포착하고 변동에 따라 위험을 자동으로 조정할 수 있습니다.
K값은 가짜 돌파구를 발생시킬 수 있으며, 불필요한 거래 신호를 유발할 수 있다. K값 파라미터를 smoothK로 적절히 조정하여 K선을 평평하게 할 수 있다.
ATR 변수 len은 너무 커 설정되어 있고, 스톱라인과 입구선 간격이 너무 커 위험도가 너무 높을 수 있다. 다른 len 변수의 안정성을 테스트할 수 있다.
순수 추적 스톱은 스톱 포지션이 합리적인지 여부를 결정할 수 없으며, 단일 스톱 리스크를 제어할 수 없습니다. 기대 스톱 알고리즘과 결합하여 단일 스톱 리스크를 제어하는 것이 고려 될 수 있습니다.
전략 신호가 자주 발생하고 거래비용이 높습니다. 입점 라인 파라미터인 lowLine를 적절히 조정하여 거래 빈도를 제어 할 수 있습니다.
K값 변수를 조정하여 smoothK를 테스트하고, smoothK값의 최적의 변수 조합을 찾는다.
ATR 변수 len의 다른 값을 테스트하여 적절한 ATR 변수를 결정한다.
입시 라인 파라미터를 최적화하여 거래 빈도를 제어하는 최적의 파라미터를 찾습니다.
다른 지표와 결합하여 진입 신호를 필터링하는 것을 고려하여 가짜 돌파구를 피하십시오. 거래량 지표, KDJ 지표 등과 결합하십시오.
절감의 최적화를 고려하고, 예상 절감으로 개선하여 절감 위험을 적극적으로 제어할 수 있습니다.
이 전략은 동력 지표 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)