이 전략은 MACD (Moving Average Convergence Divergence) 와 선형 회귀 기울기 (LRS) 를 결합한 지능형 거래 시스템입니다. 여러 이동 평균 방법을 통해 MACD 계산을 최적화하고 신호 신뢰성을 향상시키기 위해 선형 회귀 분석을 통합합니다. 이 전략은 거래 신호를 생성하기 위해 단일 또는 이중 지표 조합을 유연하게 선택할 수 있으며 위험 통제를 위해 스톱 로스 및 영리 메커니즘을 포함합니다.
이 전략의 핵심은 최적화된 MACD 및 선형 회귀 지표를 통해 시장 추세를 포착하는 데 있다. MACD 구성 요소는 가격 트렌드 감수성을 높이기 위해 SMA, EMA, WMA 및 TEMA 계산의 조합을 활용한다. 선형 회귀 구성 요소는 회귀 라인 기울기 및 위치 분석을 통해 트렌드 방향과 강도를 평가한다. MACD 크로스오버, 선형 회귀 상승 추세 또는 둘의 조합을 기반으로 구매 신호를 생성할 수 있다. 마찬가지로 판매 신호는 유연하게 구성될 수 있다. 이 전략은 효과적인 리스크-어워드 관리를 위해 비율 기반의 스톱-러스 및 취리 수익 설정을 포함한다.
이 전략은 고전적 인 지표의 개선 된 버전과 통계 방법을 결합하여 유연하고 신뢰할 수있는 거래 시스템을 만듭니다. 모듈형 설계는 거래자가 다른 시장 환경에 따라 전략 매개 변수 및 신호 확인 메커니즘을 조정 할 수 있습니다. 지속적인 최적화 및 개선으로 전략은 다양한 시장 조건에서 안정적인 성능을 유지하는 것을 약속합니다.
/*backtest start: 2024-11-10 00:00:00 end: 2024-12-09 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy('SIMPLIFIED MACD & LRS Backtest by NHBProd', overlay=false) // Function to calculate TEMA (Triple Exponential Moving Average) tema(src, length) => ema1 = ta.ema(src, length) ema2 = ta.ema(ema1, length) ema3 = ta.ema(ema2, length) 3 * (ema1 - ema2) + ema3 // MACD Calculation Function macdfx(src, fast_length, slow_length, signal_length, method) => fast_ma = method == 'SMA' ? ta.sma(src, fast_length) : method == 'EMA' ? ta.ema(src, fast_length) : method == 'WMA' ? ta.wma(src, fast_length) : tema(src, fast_length) slow_ma = method == 'SMA' ? ta.sma(src, slow_length) : method == 'EMA' ? ta.ema(src, slow_length) : method == 'WMA' ? ta.wma(src, slow_length) : tema(src, slow_length) macd = fast_ma - slow_ma signal = method == 'SMA' ? ta.sma(macd, signal_length) : method == 'EMA' ? ta.ema(macd, signal_length) : method == 'WMA' ? ta.wma(macd, signal_length) : tema(macd, signal_length) hist = macd - signal [macd, signal, hist] // MACD Inputs useMACD = input(true, title="Use MACD for Signals") src = input(close, title="MACD Source") fastp = input(12, title="MACD Fast Length") slowp = input(26, title="MACD Slow Length") signalp = input(9, title="MACD Signal Length") macdMethod = input.string('EMA', title='MACD Method', options=['EMA', 'SMA', 'WMA', 'TEMA']) // MACD Calculation [macd, signal, hist] = macdfx(src, fastp, slowp, signalp, macdMethod) // Linear Regression Inputs useLR = input(true, title="Use Linear Regression for Signals") lrLength = input(24, title="Linear Regression Length") lrSource = input(close, title="Linear Regression Source") lrSignalSelector = input.string('Rising Linear', title='Signal Selector', options=['Price Above Linear', 'Rising Linear', 'Both']) // Linear Regression Calculation linReg = ta.linreg(lrSource, lrLength, 0) linRegPrev = ta.linreg(lrSource, lrLength, 1) slope = linReg - linRegPrev // Linear Regression Buy Signal lrBuySignal = lrSignalSelector == 'Price Above Linear' ? (close > linReg) : lrSignalSelector == 'Rising Linear' ? (slope > 0 and slope > slope[1]) : lrSignalSelector == 'Both' ? (close > linReg and slope > 0) : false // MACD Crossover Signals macdCrossover = ta.crossover(macd, signal) // Buy Signals based on user choices macdSignal = useMACD and macdCrossover lrSignal = useLR and lrBuySignal // Buy condition: Use AND condition if both are selected, OR condition if only one is selected buySignal = (useMACD and useLR) ? (macdSignal and lrSignal) : (macdSignal or lrSignal) // Plot MACD hline(0, title="Zero Line", color=color.gray) plot(macd, color=color.blue, title="MACD Line", linewidth=2) plot(signal, color=color.orange, title="Signal Line", linewidth=2) plot(hist, color=hist >= 0 ? color.green : color.red, style=plot.style_columns, title="MACD Histogram") // Plot Linear Regression Line and Slope plot(slope, color=slope > 0 ? color.purple : color.red, title="Slope", linewidth=2) plot(linReg,title="lingreg") // Signal Plot for Visualization plotshape(buySignal, style=shape.labelup, location=location.bottom, color=color.new(color.green, 0), title="Buy Signal", text="Buy") // Sell Signals for Exiting Long Positions macdCrossunder = ta.crossunder(macd, signal) // MACD Crossunder for Sell Signal lrSellSignal = lrSignalSelector == 'Price Above Linear' ? (close < linReg) : lrSignalSelector == 'Rising Linear' ? (slope < 0 and slope < slope[1]) : lrSignalSelector == 'Both' ? (close < linReg and slope < 0) : false // User Input for Exit Signals: Select indicators to use for exiting trades useMACDSell = input(true, title="Use MACD for Exit Signals") useLRSell = input(true, title="Use Linear Regression for Exit Signals") // Sell condition: Use AND condition if both are selected to trigger a sell at the same time, OR condition if only one is selected sellSignal = (useMACDSell and useLRSell) ? (macdCrossunder and lrSellSignal) : (useMACDSell ? macdCrossunder : false) or (useLRSell ? lrSellSignal : false) // Plot Sell Signals for Visualization (for exits, not short trades) plotshape(sellSignal, style=shape.labeldown, location=location.top, color=color.new(color.red, 0), title="Sell Signal", text="Sell") // Alerts alertcondition(buySignal, title="Buy Signal", message="Buy signal detected!") alertcondition(sellSignal, title="Sell Signal", message="Sell signal detected!") // Take Profit and Stop Loss Inputs takeProfit = input.float(10.0, title="Take Profit (%)") // Take Profit in percentage stopLoss = input.float(0.10, title="Stop Loss (%)") // Stop Loss in percentage // Backtest Date Range startDate = input(timestamp("2024-01-01 00:00"), title="Start Date") endDate = input(timestamp("2025-12-12 00:00"), title="End Date") inBacktestPeriod = true // Entry Rules (Only Long Entries) if (buySignal and inBacktestPeriod) strategy.entry("Buy", strategy.long) // Exit Rules (Only for Long Positions) strategy.exit("Exit Buy", from_entry="Buy", limit=close * (1 + takeProfit / 100), stop=close * (1 - stopLoss / 100)) // Exit Long Position Based on Sell Signals if (sellSignal and inBacktestPeriod) strategy.close("Buy", comment="Exit Signal")