역선 회귀 전략은 가격 변동에 기반한 회귀 거래 전략이다. 이는 선형 회귀 분석과 AVERAGE TRUE RANGE 지표를 결합하여 연속 상승 K 라인 또는 연속 하락 K 라인 조건을 설정하고 선형 회귀 분석이 가격 회전을 판단 할 때 역작업을 수행합니다.
이 전략은 먼저 선형 회귀 기울기를 계산한다. 선형 회귀 기울기가 0보다 크거나 같을 때, 가격이 상승 추세에 있음을 나타냅니다. 0보다 작을 때, 가격은 하락 추세를 나타냅니다. 동시에 마지막 K 라인의 종료 가격과 시작 가격 사이의 비교와 결합하여 마지막 K 라인의 상승 또는 하락 여부를 판단합니다. 선형 회귀 기울기가 0보다 크거나 같고 마지막 K 라인의 종료 가격이 오픈 가격보다 낮을 때 구매 신호가 생성됩니다. 선형 회귀 기울기가 0보다 작고 마지막 K 라인의 종료 가격이 오픈 가격보다 높을 때 판매 신호가 생성됩니다.
연속 상승하는 K-라인의 수와 연속 떨어지는 K-라인의 수를 설정함으로써 거래 주파수를 제어할 수 있다. 연속 상승하는 K-라인의 수가 설정된 숫자에 도달한다는 것이 결정되면, 선형 회귀 기울기가 0보다 작다는 조건으로 판매 신호가 생성되어 높은 지점 근처에서 반전 거래를 달성할 수 있다. 연속 떨어지는 K-라인이 설정 번호에 도달한다는 것이 결정되면, 선형 회귀 기울기가 0보다 크거나 같을 때, 낮은 지점 근처에서 반전 거래를 달성하기 위해 구매 신호가 생성된다.
이 전략은 트렌드 트레이딩과 리버스 트레이딩을 결합하고, 중요한 지점에서 리버스 거래를 수행하여 가격 조정 후 이점을 얻을 수 있습니다. 선형 회귀 분석은 가격의 전반적인 추세를 결정하고 가격이 여전히 상승하거나 하락 할 때 단편 또는 긴 포지션을 반전하는 것을 피하는 방법을 제공합니다. 연속 K 라인 조건은 거래 빈도를 제어하고 중요한 리버스 지점에서 작동합니다.
간단한 반전 전략과 비교하면 이 전략은 여러 가지 기술적 지표를 결합하여 거래 시기를 보다 정확하게 제어하여 잘못된 파기 위험을 효과적으로 방지하고 수익성을 높일 수 있습니다.
이 전략에 직면 한 주요 위험은 반전 실패입니다. 가격 반전 신호가 계속되는 것으로 판단되면 가격은 원래 트렌드를 유지하면 손실을 초래할 것입니다. 또한 선형 회귀 분석 및 ATR 지표의 매개 변수 설정은 전략의 수익에도 영향을 줄 것입니다.
스톱 로즈는 단일 손실을 제어하는 데 사용할 수 있습니다. 시장 변동의 주파수를 합리적으로 평가하고 연속 K 라인의 수를 적절히 조정하고 거래 주파수를 줄일 수 있습니다. 선형 회귀와 ATR 매개 변수의 사이클 매개 변수를 최적화하여 다른 품종의 특성에 더 적합하도록하십시오.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
판단의 정확성을 향상시키기 위해 다른 기술적 지표를 추가하십시오. 예를 들어 MACD, 볼링거 밴드 등.
자동 매개 변수 최적화 및 거래 규칙의 동적 조정을 위한 기계 학습 구성 요소를 증가시킵니다.
자본 관리 및 스톱 손실 전략과 같은 위험 관리 메커니즘을 포함하여 거래 위험을 제어합니다.
포트폴리오 최적화 (portfolio optimization) 는 포트폴리오의 전체 적립을 줄이고 안정성을 향상시키기 위해 다른 관련되지 않은 전략과 전략을 결합하는 것입니다.
더 많은 품종으로 확장하고 다른 품종에 대한 매개 변수 설정을 평가하여 전략을 더 다양하게 만들 수 있습니다.
역선 회귀 전략은 여러 가지 기술적 지표를 통합하고 가격 반전의 시기를 판단할 때 역작업을 수행합니다. 그것은 효과적인 반전 거래 전략입니다. 매개 변수 최적화 및 향상된 위험 관리를 통해 전략은 이윤 마진을 더욱 확대할 수 있으며 개선 잠재력이 있습니다. 전형적인 반전 전략 아이디어로서 우리에게 귀중한 참조를 제공합니다.
/*backtest start: 2023-12-21 00:00:00 end: 2023-12-28 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Reverse Up/Down Strategy", currency=currency.USD, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100,overlay=true) //User Options consecutiveBarsUp = input(title="Sell after how many bars up?", type=input.integer, minval=1, defval=1) consecutiveBarsDown = input(title="Buy after how many bars down?", type=input.integer, minval=1, defval=1) atrLength = input(title="ATR Length", type=input.integer, minval=1, defval=14) atrMult = input(title="ATR Multiplier", type=input.float, minval=0.1, defval=2.33) //ATR Channel adjustedATR = sma(atr(atrLength),atrLength) * atrMult longATR = low - adjustedATR shortATR = high + adjustedATR plot(shortATR, title="Short ATR", color=color.red) plot(longATR, title="Long ATR", color=color.lime) // This is the true linear regression slope rather than an approximation given by numerical differentiation src = hlc3 len = input(defval=14, minval=1, title="Slope Length") lrc = linreg(src, len, 0) lrc1 = linreg(src, len,1) lrs = (lrc-lrc1) //Check if last candle was up or down priceOpen = open priceClose = close longCondition = priceOpen > priceClose shortCondition = priceOpen < priceClose ups = 0.0 dns = 0.0 ups := shortCondition ? nz(ups[1]) + 1 : 0 dns := longCondition ? nz(dns[1]) + 1 : 0 if (shortCondition) strategy.close("buy", qty_percent=100, comment="Close") if (ups >= consecutiveBarsUp and lrs <= 0) strategy.entry("sell", strategy.short, comment="Sell") if (longCondition) strategy.close("sell", qty_percent=100, comment="Close") if (dns >= consecutiveBarsDown and lrs >= 0) strategy.entry("buy", strategy.long, comment = "Buy")