
쌍선적 회귀 트렌드 추적 전략은 빠른 선적 회귀와 느린 선적 회귀의 차수를 사용하여 가격 트렌드를 판단하고, 입문 신호로 사용한다. 빠른 선적 회귀가 상단 경계를 통과할 때 더 많이하고, 하단 경계를 통과할 때 평소한다. 또한, 이 전략은 EMA를 필터 조건으로 사용하며, 가격이 EMA보다 높을 때만 입문한다.
이 전략은 먼저 두 개의 다른 주기의 선형 회귀 곡선을 계산합니다. 하나는 빠른 선형 회귀이며, 주기가 짧고 다른 하나는 느린 선형 회귀이며, 주기가 길습니다. 그리고 두 가지 선형 회귀의 차이를 계산합니다. 빠른 선형 회귀가 느린 선형 회귀보다 높을 때, 차이는 0보다 크면 가격이 상승 추세에 있음을 나타냅니다. 빠른 선형 회귀가 느린 선형 회귀보다 낮을 때, 차이는 0보다 작으면 가격이 하락 추세에 있음을 나타냅니다.
이 전략은 마이너스 라인을 통해 포트 한계를 통과하는 것을 구매 신호로, 마이너스 라인을 통해 포트 한계를 넘어가는 것을 평점 신호로 사용합니다. 동시에, 가격이 200 회 이상의 EMA를 요구합니다. 이것은 비 트렌드 행세를 필터링하기 위해입니다.
이중선 회귀를 사용하여 가격 동향을 포착하여 재측정하는 것이 더 효과적입니다.
EMA 필터를 추가하여 트렌드가 아닌 부분들을 필터링하여 잘못된 신호를 방지할 수 있습니다.
전략적 논리는 간단하고 명확하며, 이해하기 쉽고 구현하기 쉽습니다.
선형 회귀 주기가 부적절하게 설정되어 있으면 많은 양의 노이즈 신호가 발생할 수 있다.
강세를 보인 상황에서, EMA 필터링은 일부 기회를 놓칠 수 있다.
“이런 상황에서는 거래가 빈번하고 손실이 발생하기 쉽다”.
해결책:
선형 회귀 주기 파라미터를 최적화하고, 소음을 줄인다.
시장 상황에 따라 EMA 주기를 동적으로 조정할 수 있다.
손실을 통제하기 위해 스톱 손실을 늘리십시오.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
빠른 선형 회귀와 느린 선형 회귀의 주기 변수를 최적화하여 최적의 변수 조합을 찾는다.
다른 필터링 메타를 사용해서 EMA를 대체해 보세요. 브린 테이프, KDJ 등과 같이, 전략의 효과를 향상시킬 수 있는지 보세요.
역동적인 스톱 손실을 증가시켜 위험을 통제하고 손실을 막습니다.
주식 선택 메커니즘과 결합하여, 유행성이 강한 주식을 선택하여 거래한다.
개발 매개 변수 자체 적응 기능, 시장 상태에 따라 자동으로 매개 변수를 조정한다.
쌍선적 회귀 트렌드 추적 전략은 전체적으로 간단하고 직접적이며, 쌍선적 회귀 차수를 사용하여 가격 트렌드를 판단하고, EMA를 필터링 지표로 사용하여 트렌드 상황을 효과적으로 추적 할 수 있습니다. 그러나 이 전략은 또한 일정 위험성을 가지고 있으며, 전략의 최대 효과를 발휘하기 위해 파라미터 최적화, 스톱 로즈 제어 등의 측면에 주의를 기울여야 합니다.
/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradingAmmo
//@version=4
strategy("Linear trend", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0)
end = timestamp(input(9999, "End Year"), input(1, "Month"), input(1, "Day"), 0, 0)
_testPeriod() =>
iff(time >= startP and time <= end, true, false)
src = close
len1 = input(defval=13, minval=1, title="Fast LR")
len2 = input(defval=55, minval=1, title="Slow LR")
lag1 = input(0, title="Lag for fast")
lag2 = input(0, title="Lag for slow")
threshold = input(0,step=0.5, title="Threshold")
fast_lr = linreg(src, len1, lag1)
slow_lr = linreg(src, len2, lag2)
lr = fast_lr - slow_lr
plot_fast = plot(lr, color = lr > 0 ? color.green : color.red)
plot(threshold, color=color.purple)
long_condition = crossover(lr, threshold) and close > ema(close, 200) and _testPeriod()
strategy.entry('BUY', strategy.long, when=long_condition)
short_condition = crossunder(lr, threshold)
strategy.close('BUY', when=short_condition)