역행선적 회귀 전략은 가격 변동에 기반한 역행 거래 전략이다. 그것은 선적 회귀 분석과 AVERAGE TRUE RANGE 지표를 결합하여 연속적으로 상승하는 K선 또는 연속적으로 하락하는 K선 조건을 설정하고, 선적 회귀 분석이 가격 회귀를 판단할 때 역행한다.
이 전략은 먼저 선형 회귀의 기울기를 계산한다. 선형 회귀의 기울기가 0보다 크면 가격이 상승 추세에 있음을 나타냅니다. 0보다 작으면 가격이 하향 추세에 있음을 나타냅니다. 마지막 K 선의 닫기 가격과 개방 가격의 대조를 결합하여 마지막 K 선이 상승하거나 하락했는지 판단합니다.
연속적으로 상승하는 K선 수와 연속적으로 하락하는 K선 수를 설정하여 거래 주파수를 제어할 수 있다. 연속적으로 상승하는 K선 수가 설정된 수를 달성할 때, 선형 회귀 기울기가 0보다 작을 경우 판매 신호를 발생시키고, 최고점 근처의 반전 거래를 실현한다. 연속적으로 하락하는 K선 수가 설정된 수를 달성할 때, 선형 회귀 기울기가 0보다 크거나 낮은 곳 근처의 반전 거래를 실현한다.
이 전략은 트렌드와 반전 거래를 결합하여 핵심점 근처에서 반전 작업을 수행하여 가격 조정 후의 이점을 얻을 수 있습니다. 선형 회귀 분석은 가격의 전반적인 추세를 판단하는 방법을 제공하며, 가격이 계속 상승하거나 하락하는 동안 반전으로 무효 또는 과잉을 피합니다. 연속적인 K 선 조건은 거래 빈도를 제어하며, 핵심 반전점 근처에서 작업을 수행합니다.
간단한 역전 전략에 비해, 이 전략은 여러 가지 기술 지표를 결합하여 거래 시기를 더 정확하게 제어하고, 가짜 돌파의 위험을 효과적으로 회피하고, 수익률을 높일 수 있다.
이 전략은 주로 역전 실패의 위험에 직면한다. 가격 역전 신호를 판단한 후, 가격이 원래의 추세를 계속 유지하면 손실이 발생할 수 있다. 또한, 선형 회귀 분석 및 ATR 지표의 파라미터 설정은 전략 수익에도 영향을 미칩니다.
스톱로스로 단편 손실을 제어할 수 있다. 시장의 변동 빈도를 합리적으로 평가하고, 연속 K선 수를 적절히 조정하여 거래 빈도를 줄일 수 있다. 선형 회귀 주기 변수와 ATR 변수를 최적화하여 다양한 품종의 특성에 더 적합하게 만든다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
다른 기술 지표 판단을 추가하고, 다른 시간 주기 지표와 결합하여 판단 정확도를 높인다. 예를 들어 MACD, 볼린저 밴드 등이 포함된다.
기계 학습 요소를 추가하여 알고리즘을 통해 매개 변수를 자동으로 최적화하고 거래 규칙을 동적으로 조정합니다.
거래 위험을 통제하기 위해 자금 관리, 손해 방지 전략 등과 같은 위험 관리 장치에 가입하십시오.
포트폴리오를 최적화하여, 전략과 다른 비관련 전략의 포트폴리오를 결합하여, 전체적인 회수를 감소시키고, 안정성을 향상시킨다.
더 많은 품종으로 확장하여 다양한 품종의 파라미터 설정을 평가하여 정책을 더 범용화하십시오.
역선적 회귀 전략은 여러 가지 기술 지표를 통합하여 가격 회귀 시기를 판단 할 때 역으로 작동하는 효과적인 역전 거래 전략입니다. 이 전략은 변수 최적화 및 위험 관리 강화를 통해 수익 공간을 더욱 확장 할 수 있습니다.
/*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")