이 전략은 간단한 이동 평균 (SMA) 과 롤링 선형 회귀 트렌드 라인을 결합합니다. 닫기 가격이 SMA와 트렌드 라인 모두 위에있을 때 긴 입구 조건을 설정하고 닫기 가격이 그 아래에있을 때 출구 조건을 설정합니다. 이 전략은 주로 SMA를 거래 신호로 사용하고 채널 지원을위한 롤링 트렌드 라인을 사용합니다. 상향 채널의 브레이크오웃에 거래에 들어가고 하향 채널의 브레이크오웃에 출입합니다.
이 전략의 주요 구성 요소는 다음과 같습니다.
SMA: 간단한 이동 평균, 시그널 라인으로 기간 (smaPeriod) 의 평균 폐쇄 가격을 계산합니다.
롤링 트렌드 라인 (Rolling Trendline): 트렌드 신호로 창 (창) 위에 가장 좋은 선형 회귀 라인을 부착한다. 일반 최소 제곱 방법으로 계산된다.
진입 조건: 마감 가격> SMA와 트렌드 라인에서 긴 경로로 이동합니다.
출구 조건: 마감 가격 < SMA 및 트렌드 라인 (SMA and trendline) 이 되면 포지션을 닫습니다.
따라서 전략은 주로 입구에 SMA 신호 브레이크오웃과 출구에 채널 브레이크오웃에 의존합니다. 브레이크오웃 연산을 따르는 트렌드를 구현하기 위해 MA의 평균 반전 속성과 선형 회귀 선에 의한 채널 지원을 사용합니다.
이 전략은 MA와 트렌드 라인의 이중 필터를 통합하여 잘못된 브레이크 아웃 거래를 효과적으로 줄일 수 있습니다. 한편, 롤링 트렌드 라인은 신뢰할 수있는 결정을 위해 더 정확한 채널 지원을 제공합니다. 주요 장점은 다음과 같습니다.
이 전략에는 몇 가지 위험도 있습니다.
이러한 위험에 대한 최적화 방향:
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
동적 조정 함수와 시장 방식에 기반한 슬리핑 매개 변수를 추가합니다.
유연한 스톱 로스 메커니즘을 개발합니다. 가격 비율로 트렌드 라인을 깨면 스톱 로스를 설정합니다.
결정 정확성을 높이기 위해 부피, RSI 등 다른 지표에서 필터를 추가합니다.
역전 버전을 개발합니다. 가격이 바닥에 접근하고 하향 채널을 깨는 경우 긴 이동합니다.
이 전략은 트렌드 다음 운영을 구현하기 위해 이동 평균과 채널 지원을 통한 거래 신호를 통합합니다. 이중 필터는 잘못된 브레이크아웃 확률을 줄이고 의사결정 품질을 향상시킵니다. 간단한 매개 변수 설정과 명확한 논리를 가지고 있으며, 구현 및 최적화하기가 쉽습니다. 요약하면이 전략은 신뢰할 수 있고 간단하고 직관적인 트렌드 브레이크아웃 거래 시스템을 형성합니다.
/*backtest start: 2024-01-04 00:00:00 end: 2024-02-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SMA Strategy with Rolling Trendline", overlay=true) // Input parameters smaPeriod = input(14, title="SMA Period") window = input(20, title="Trendline Window") startDate = input(timestamp("2023-01-01"), title="Start Date") endDate = input(timestamp("2023-12-31"), title="End Date") // Calculating SMA sma = sma(close, smaPeriod) // Function to calculate linear regression trendline for a window linreg_trendline(window) => sumX = 0.0 sumY = 0.0 sumXY = 0.0 sumX2 = 0.0 for i = 0 to window - 1 sumX := sumX + i sumY := sumY + close[i] sumXY := sumXY + i * close[i] sumX2 := sumX2 + i * i slope = (window * sumXY - sumX * sumY) / (window * sumX2 - sumX * sumX) intercept = (sumY - slope * sumX) / window slope * (window - 1) + intercept // Calculating the trendline trendline = linreg_trendline(window) // Entry and Exit Conditions longCondition = close > sma and close < trendline exitLongCondition = close < sma and close > trendline // Strategy logic if (true) if (longCondition) strategy.entry("Long", strategy.long) if (exitLongCondition) strategy.close("Long") // Plotting plot(sma, title="Simple Moving Average", color=color.blue) plot(trendline, title="Rolling Trendline", color=color.red) plotshape(series=longCondition, title="Enter Trade", location=location.belowbar, color=color.green, style=shape.triangleup) plotshape(series=exitLongCondition, title="Exit Trade", location=location.abovebar, color=color.red, style=shape.triangledown)