역선형 회귀 전략

저자:차오장, 날짜: 2023-12-29 17:15:07
태그:

img

전반적인 설명

역선 회귀 전략은 가격 변동에 기반한 회귀 거래 전략이다. 이는 선형 회귀 분석과 AVERAGE TRUE RANGE 지표를 결합하여 연속 상승 K 라인 또는 연속 하락 K 라인 조건을 설정하고 선형 회귀 분석이 가격 회전을 판단 할 때 역작업을 수행합니다.

전략 원칙

이 전략은 먼저 선형 회귀 기울기를 계산한다. 선형 회귀 기울기가 0보다 크거나 같을 때, 가격이 상승 추세에 있음을 나타냅니다. 0보다 작을 때, 가격은 하락 추세를 나타냅니다. 동시에 마지막 K 라인의 종료 가격과 시작 가격 사이의 비교와 결합하여 마지막 K 라인의 상승 또는 하락 여부를 판단합니다. 선형 회귀 기울기가 0보다 크거나 같고 마지막 K 라인의 종료 가격이 오픈 가격보다 낮을 때 구매 신호가 생성됩니다. 선형 회귀 기울기가 0보다 작고 마지막 K 라인의 종료 가격이 오픈 가격보다 높을 때 판매 신호가 생성됩니다.

연속 상승하는 K-라인의 수와 연속 떨어지는 K-라인의 수를 설정함으로써 거래 주파수를 제어할 수 있다. 연속 상승하는 K-라인의 수가 설정된 숫자에 도달한다는 것이 결정되면, 선형 회귀 기울기가 0보다 작다는 조건으로 판매 신호가 생성되어 높은 지점 근처에서 반전 거래를 달성할 수 있다. 연속 떨어지는 K-라인이 설정 번호에 도달한다는 것이 결정되면, 선형 회귀 기울기가 0보다 크거나 같을 때, 낮은 지점 근처에서 반전 거래를 달성하기 위해 구매 신호가 생성된다.

이점 분석

이 전략은 트렌드 트레이딩과 리버스 트레이딩을 결합하고, 중요한 지점에서 리버스 거래를 수행하여 가격 조정 후 이점을 얻을 수 있습니다. 선형 회귀 분석은 가격의 전반적인 추세를 결정하고 가격이 여전히 상승하거나 하락 할 때 단편 또는 긴 포지션을 반전하는 것을 피하는 방법을 제공합니다. 연속 K 라인 조건은 거래 빈도를 제어하고 중요한 리버스 지점에서 작동합니다.

간단한 반전 전략과 비교하면 이 전략은 여러 가지 기술적 지표를 결합하여 거래 시기를 보다 정확하게 제어하여 잘못된 파기 위험을 효과적으로 방지하고 수익성을 높일 수 있습니다.

위험 분석

이 전략에 직면 한 주요 위험은 반전 실패입니다. 가격 반전 신호가 계속되는 것으로 판단되면 가격은 원래 트렌드를 유지하면 손실을 초래할 것입니다. 또한 선형 회귀 분석 및 ATR 지표의 매개 변수 설정은 전략의 수익에도 영향을 줄 것입니다.

스톱 로즈는 단일 손실을 제어하는 데 사용할 수 있습니다. 시장 변동의 주파수를 합리적으로 평가하고 연속 K 라인의 수를 적절히 조정하고 거래 주파수를 줄일 수 있습니다. 선형 회귀와 ATR 매개 변수의 사이클 매개 변수를 최적화하여 다른 품종의 특성에 더 적합하도록하십시오.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 판단의 정확성을 향상시키기 위해 다른 기술적 지표를 추가하십시오. 예를 들어 MACD, 볼링거 밴드 등.

  2. 자동 매개 변수 최적화 및 거래 규칙의 동적 조정을 위한 기계 학습 구성 요소를 증가시킵니다.

  3. 자본 관리 및 스톱 손실 전략과 같은 위험 관리 메커니즘을 포함하여 거래 위험을 제어합니다.

  4. 포트폴리오 최적화 (portfolio optimization) 는 포트폴리오의 전체 적립을 줄이고 안정성을 향상시키기 위해 다른 관련되지 않은 전략과 전략을 결합하는 것입니다.

  5. 더 많은 품종으로 확장하고 다른 품종에 대한 매개 변수 설정을 평가하여 전략을 더 다양하게 만들 수 있습니다.

요약

역선 회귀 전략은 여러 가지 기술적 지표를 통합하고 가격 반전의 시기를 판단할 때 역작업을 수행합니다. 그것은 효과적인 반전 거래 전략입니다. 매개 변수 최적화 및 향상된 위험 관리를 통해 전략은 이윤 마진을 더욱 확대할 수 있으며 개선 잠재력이 있습니다. 전형적인 반전 전략 아이디어로서 우리에게 귀중한 참조를 제공합니다.


/*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")


더 많은