
쌍평준선 반전과 ATR 트레일링 스톱 조합 전략은 매우 실용적인 양적 거래 전략이다. 이 전략은 우선 쌍평준선이 형성된 데드포크와 골든 크로스를 사용하여 시장 추세와 반전점을 판단한다. 이 전략은 또한 평균 실제 파동과 결합하여 트레일 스톱을 설정하여 수익을 보장하면서 위험을 제어한다.
쌍평선 역전 전략은 빠른 선과 느린 선의 교차를 이용하여 시장의 흐름을 판단한다. 빠른 선이 위아래로 느린 선을 가로지르면, 사다리가 생기고, 시장이 ?? 으로 변하는 것을 나타낸다. 빠른 선이 아래아래로 느린 선을 가로지르면, 골든 교차가 생기고, 시장이 ?? 으로 변하는 것을 나타낸다. 전략은 사다리 때 공백하고, 골든 교차할 때 더한다.
구체적으로, 전략은 9일 STOCH 지표의 패스트 라인을 패스트 라인으로, 3일 EMA를 슬롬 라인으로 선택한다. 클로즈가 전날 클로즈보다 낮아지고 패스트 라인이 50보다 높으면 슬롬 라인을 상회할 때 청산한다. 클로즈가 전날 클로즈보다 높고 패스트 라인이 50보다 낮아지고 슬롬 라인을 상회할 때 청산한다.
ATR 트레일링 스톱 (ATR Trailing Stop) 전략은 평균 실제 파장을 사용하여 스톱포트를 설정한다. ATR 지표는 시장의 단기 변동성을 효과적으로 반영할 수 있다. 전략은 ATR의 값에 따라 트레일링 스톱을 설정하고, 가격 움직임이 역전될 때 스톱포트 (stop loss) 를 종료한다.
구체적으로, 전략은 5일 ATR을 선택하고, 중단 지점은 ATR의 3.5배를 빼고 닫습니다. 가격이 그 중단 지점에 도달했을 때 청산 중지합니다.
쌍평선 반전과 ATR 트레일링 스톱의 조합 전략은 평선 전략의 추세 판단과 반전의 장점과 ATR 트레일링 스톱 전략의 위험 제어 장점을 결합하여 매우 실용적인 전략이 됩니다.
특히, 이 전략은 다음과 같은 장점을 가지고 있습니다.
쌍평선으로 형성된 데드포크와 골든 크로스 (Golden cross) 를 사용하여 시장 추세 전환점을 판단하고 역전 신호를 정확하게 판단한다.
STOCH 지표와 결합하여 역전 신호를 확인하고, 잘못된 신호를 피한다.
ATR trailing stop는 시장의 변동에 따라 유연하게 중지 지점을 설정하여 수익을 최대한 고정합니다.
이 전략은 여러 지표와 기술 분석 방법을 결합하여 더 안정적으로 사용할 수 있습니다.
전략이 명확하고 이해하기 쉬우며, 매개 변수를 조정할 수 있으며, 실내에서 쉽게 작동할 수 있다.
이 전략은 장점이 많지만, 위험도 있습니다.
쌍평선 생성된 신호는 지연이 있을 수 있으며, 역점 전후로 정확하게 구매 및 판매할 수 없다. 평선 주기를 적절히 단축하거나 다른 지표와 결합하여 최적화할 수 있다.
ATR 지표는 시장의 큰 변동에 민감하지 않으며, 정지점을 제때 업데이트 할 수 없습니다. 동량 지표 또는 변동률 지표와 결합하여 조정하는 것을 고려할 수 있습니다.
여러 개의 변수와 조건의 조합을 사용하면 전략의 복잡성이 증가한다. 변수가 잘못되면 너무 급진적인 거래가 발생할 수 있으며 위험이 증가한다. 신중하게 평가하고 점진적으로 변수를 조정해야합니다.
위와 같은 위험 분석을 통해, 이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
평균선 주기 변수를 조정하여 회전 기회를 일찍 잡기 위해 회전을 단축합니다.
MACD, KD 등과 같은 반전 신호를 판단하는 다른 지표가 추가되어 복수 확인이 형성된다.
동적으로 ATR 주기를 조정하거나 시장의 변동률을 도입하여 실시간으로 스톱로스를 업데이트하십시오.
주식 시장과 선물 시장의 차이를 평가하고, 각각 두 종류의 시장의 특성에 더 적합한 매개 변수를 조정하십시오.
리테크에 거래 비용과 슬라이드 포인트를 추가하여 실제 거래 환경에 더 가깝게 전략을 만듭니다.
여러 파라미터를 동적으로 최적화하기 위해 기계 학습 모델을 포함하는 것을 고려할 수 있다.
쌍평선 반전과 ATR 트레일링 스톱 조합 전략은 효율적이고 실용적인 양적 전략이다. 그것은 평평선 판단 시장 반전과 ATR setting trail stop의 위험 제어의 이중 장점을 결합한다. 수익을 보장하면서 불필요한 손실을 줄일 수 있다. 이 전략은 매개 변수를 조정할 수 있고 실내에서 쉽게 작동한다. 또한 여러 측면에서 확장 및 최적화하여 더 넓은 시장 환경에 적용할 수 있다.
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 17/05/2019
// This is combo strategies for get
// a cumulative signal. Result signal will return 1 if two strategies
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50.
// The strategy sells at market, if close price is lower than the previous close price
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Secon strategy
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort
// The related article is copyrighted material from Stocks & Commodities Jun 2009
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
vFast = sma(stoch(close, high, low, Length), KSmoothing)
vSlow = sma(vFast, DLength)
pos = 0.0
pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0)))
pos
ATR_TrailingStop(nATRPeriod, nATRMultip) =>
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
pos = 0.0
xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
pos
strategy(title="Combo Backtest 123 Reversal & Average True Range Trailing Stops", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
nATRPeriod = input(5)
nATRMultip = input(3.5)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posATR_TrailingStop = ATR_TrailingStop(nATRPeriod, nATRMultip)
pos = iff(posReversal123 == 1 and posATR_TrailingStop == 1 , 1,
iff(posReversal123 == -1 and posATR_TrailingStop == -1, -1, 0))
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos))
if (possig == 1)
strategy.entry("Long", strategy.long)
if (possig == -1)
strategy.entry("Short", strategy.short)
if (possig == 0)
strategy.close_all()
barcolor(possig == -1 ? red: possig == 1 ? green : blue )