유평선 회귀 거래 전략은 주식의 선형 회귀선과 선형 회귀선의 교차점을 계산하여 구매 및 판매 신호를 결정한다. 이 전략은 유평선과 선형 회귀 분석을 결합하여 주가의 추세를 고려하고 통계적 특성을 고려하여 주가의 전환점을 효과적으로 판단하여 낮은 구매 및 판매를 달성한다.
이 전략은 먼저 n일 주가의 선형 회전선과 m일 평균선을 계산한다. 선형 회전선은 주가의 장기 통계 추세를 반영하고, 평균선은 주가의 단기 움직임을 반영한다.
평선 상의 직선적 회귀선은 상승세가 증가하는 것을 나타내고 구매 신호를 생성한다. 평선 아래의 직선적 회귀선은 상승세가 희박한 것을 나타내고 판매 신호를 생성한다.
특히, 전략은 다음과 같은 몇 가지 단계를 통해 거래 신호를 판단합니다.
n일 주식 가격의 선형 회귀선을 계산합니다.
선형 회전선의 m일 간단한 이동 평균 LRMA를 계산
주식 가격을 계산하는 m일 지수 이동 평균자책자
롱엔트리 (longEntry) 는 롱엔트리 (longEntry) 를 통해 롱엔트리 (longEntry) 를 통과할 때 구매 신호를 생성합니다.
에마가 lrMA를 통과하면 파는 신호가 생성됩니다.
또한 큰 시장 판단과 결합하여 큰 시장이 황금시장일 때만 신호를 구입하는 것을 고려합니다.
신호에 따라 구매 및 판매 거래를 수행합니다.
평행선과 회귀선의 교차점으로 구매 시기를 결정함으로써, 가짜 브레이크를 효과적으로 필터링하고 반전 지점을 포착하여 낮은 구매를 달성할 수 있다.
주의가 필요한 매개 변수 조정, 적당하게 평균선과 회귀선 주기 매개 변수를 확대하여 거래 빈도를 낮추기; 합리적으로 중지 손실 전략을 설정하여 위험을 제어하기; 큰 판정을 최적화하고 정확도를 향상시키는 규칙.
이 전략은 다음과 같은 몇 가지 측면에서 최적화 될 수 있습니다:
유평선 지표 최적화: 주식에게 가장 적합한 유평선을 찾기 위해 가중화 이동 평균과 같은 다른 유형의 유평선을 시도하십시오.
회전선 최적화: 회전선 계산 주기를 조정하여 주식의 장기 트렌드를 가장 잘 반영하는 주기 매개 변수를 찾습니다.
대판 판단 최적화: 다양한 대판 판단 지표를 테스트하여 전략에 가장 적합한 대판 신호를 찾습니다.
매개 변수 최적화: 다양한 매개 변수 조합을 반복적으로 재검토하여 최적의 매개 변수 구성을 찾는다.
스톱손실 전략 최적화: 다른 스톱손실 방법을 테스트하고, 위험을 제어하기 위해 최적의 스톱손실 논리를 설정한다.
트랜잭션 비용 최적화: 다른 트랜잭션 처리 요금 모형에 따라 트랜잭션 주파수를 조정하여 트랜잭션 비용을 줄입니다.
이 몇 가지 요소를 최적화하면 전략의 안정성과 수익률을 더욱 향상시킬 수 있습니다.
이 유선 회귀 거래 전략은 유선 분석과 선형 회귀 분석을 통합하여 주식 가격 전환점을 효과적으로 식별하고, 하부 구매 및 판매를 안내하는 장점이 있다. 이 전략은 간편하고 신뢰할 수 있으며 중장선 선택 주식 거래에 적합하다. 매개 변수 최적화와 위험 통제로 전략 안정성을 더욱 향상시킬 수 있다. 이 전략은 주식 시장 분석에 실용적인 기술 거래 방안을 제공한다.
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 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/ // © lazy_capitalist //@version=5 strategy('Linear Regression MA', overlay=true, initial_capital=10000) datesGroup = "Date Info" startMonth = input.int(defval = 1, title = "Start Month", minval = 1, maxval = 12, group=datesGroup) startDay = input.int(defval = 1, title = "Start Day", minval = 1, maxval = 31, group=datesGroup) startYear = input.int(defval = 2022, title = "Start Year", minval = 1970, group=datesGroup) averagesGroup = "Averages" lrLineInput = input.int(title="Linear Regression Line", defval=55, minval = 1, group=averagesGroup) lrMAInput = input.int(title="Linear Regression MA", defval=55, minval = 1, group=averagesGroup) emaInput = input.int(title="EMA Length", defval=55, minval = 1, group=averagesGroup) tradesGroup = "Execute Trades" executeLongInput = input.bool(title="Execute Long Trades", defval=true) executeShortInput = input.bool(title="Execute Short Trades", defval=true) executeStopLoss = input.bool(title="Execute Stop Loss", defval=true) fourHrSMAExpr = ta.sma(close, 200) fourHrMA = request.security(symbol=syminfo.tickerid, timeframe="240", expression=fourHrSMAExpr) bullish = close > fourHrMA ? true : false maxProfitInput = input.float( title="Max Profit (%)", defval=10.0, minval=0.0) * 0.01 stopLossPercentageInput = input.float( title="Stop Loss (%)", defval=1.75, minval=0.0) * 0.01 start = timestamp(startYear, startMonth, startDay, 00, 00) // backtest start window window() => time >= start ? true : false // create function "within window of time" showDate = input(defval = true, title = "Show Date Range") lrLine = ta.linreg(close, lrLineInput, 0) lrMA = ta.sma(lrLine, lrMAInput) ema = ta.ema(close, emaInput) longEntry = ema < lrMA longExit = lrMA < ema shortEntry = lrMA < ema shortExit = ema < lrMA maxProfitLong = strategy.opentrades.entry_price(0) * (1 + maxProfitInput) maxProfitShort = strategy.opentrades.entry_price(0) * (1 - maxProfitInput) stopLossPriceShort = strategy.position_avg_price * (1 + stopLossPercentageInput) stopLossPriceLong = strategy.position_avg_price * (1 - stopLossPercentageInput) if(executeLongInput and bullish) strategy.entry( id="long_entry", direction=strategy.long, when=longEntry and window(), qty=10, comment="long_entry") strategy.close( id="long_entry", when=longExit, comment="long_exit") // strategy.close( id="long_entry", when=maxProfitLong <= close, comment="long_exit_mp") if(executeShortInput and not bullish) strategy.entry( id="short_entry", direction=strategy.short, when=shortEntry and window(), qty=10, comment="short_entry") strategy.close( id="short_entry", when=shortExit, comment="short_exit") // strategy.close( id="short_entry", when=maxProfitShort <= close, comment="short_exit_mp") if(strategy.position_size > 0 and executeStopLoss) strategy.exit( id="long_entry", stop=stopLossPriceLong, comment="exit_long_SL") strategy.exit( id="short_entry", stop=stopLossPriceShort, comment="exit_short_SL") // plot(series=lrLine, color=color.green) plot(series=lrMA, color=color.red) plot(series=ema, color=color.blue)