전략 이름: 모멘텀 구동형 선형 MACD 전략
개요: 이것은 MACD 지표와 결합하여 주식 가격을 예측하기 위해 선형 회귀를 활용하는 양적 전략입니다. 미래 가격 추세를 예측하기 위해 역사적 가격과 양에 대한 선형 회귀 분석을 활용합니다. 이 때 이익 기회가 나타날 때 입시 시기를 결정하기 위해 MACD 지표를 사용합니다.
전략 원칙:
이점 분석: 이 전략은 통계적 예측과 기술적 지표 판단을 결합합니다. 주관적 투기를 피하여 선형 회귀를 사용하여 가격 예측을 도출합니다. 한편 MACD 지표는 시장 추진력을 효과적으로 결정하고 기회를 정확하게 포착 할 수 있습니다. 전반적으로이 전략은 높은 체계적 수준, 정확한 예측 및 제어 가능한 위험을 가지고 있습니다.
위험 분석:
선형 회귀는 역사적 데이터에만 의존하고 있으며, 흑백조 사건에 대응하여 부정확한 신호를 생성할 수 있습니다. 또한 회귀 기간 길이가 전략 성능에 영향을 미치는 것과 같은 매개 변수 설정. 우리는 전략에 영향을 미치는 곡선 불안을 완화하기 위해 예측된 가격 곡선을 매끄럽게하기 위해 vwma를 사용하는 것을 제안합니다.
최적화 방향:
우리는 이 전략이 다음과 같은 측면에서 최적화 될 수 있다고 믿습니다.
결론:
이 전략은 선형 회귀로 가격을 예측하고 MACD 지표로 항목을 결정함으로써 체계적인 거래 신호를 생성합니다. 이 전략의 장점은 명확한 예측 논리, 제어 가능한 위험 및 광범위한 최적화 공간을 포함합니다. 지속적인 최적화 및 반복을 통해 성능이 계속 우월할 것이라고 믿습니다. 양적 거래를 수행하기 위해 과학적 예측 모델을 활용하는 데 영감을 제공하며 추가 연구와 응용을받을 자격이 있습니다.
/*backtest start: 2023-12-07 00:00:00 end: 2023-12-14 00:00:00 period: 1m basePeriod: 1m 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/ // © stocktechbot //@version=5 strategy("Linear On MACD", overlay=true, margin_long=100, margin_short=100) fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) tolerance = input.string(title="Risk tolerance", defval = "LOW", options=["LOW", "HIGH"]) chng = 0 obv = ta.cum(math.sign(ta.change(close)) * volume) if close < close[1] and (open < close) chng := 1 else if close > close[1] chng := 1 else chng := -1 obvalt = ta.cum(math.sign(chng) * volume) //src = input(title="Source", defval=close) src = obvalt signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9) sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"]) sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"]) // Calculating fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal //hline(0, "Zero Line", color=color.new(#787B86, 50)) //plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below))) //plot(macd, title="MACD", color=col_macd) //plot(signal, title="Signal", color=col_signal) [macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) //Linear Regression vol = volume // Function to calculate linear regression linregs(y, x, len) => ybar = math.sum(y, len)/len xbar = math.sum(x, len)/len b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len) a = ybar - b*xbar [a, b] // Historical stock price data price = close // Length of linear regression len = input(defval = 21, title = 'Lookback') // Calculate linear regression for stock price based on volume [a, b] = linregs(price, vol, len) // Predicted stock price based on volume predicted_price = a + b*vol // Check if predicted price is between open and close is_between = open < predicted_price and predicted_price < close // Plot predicted stock price plot(predicted_price, color=color.rgb(218, 27, 132), linewidth=2, title="Predicted Stock Price") plot(ta.vwma(predicted_price,len), color=color.rgb(199, 43, 64), linewidth=2, title="Predicted Stock Price") //BUY Signal lincrossunder = close > predicted_price macdrise = ta.rising(macd,2) //macdvollong = ta.crossover(macd, signal) //macdlong = ta.crossover(macdLine, signalLine) macdvollong = macd > signal macdlong = macdLine > signalLine longCondition=false if macdlong and macdvollong and is_between and ta.rising(predicted_price,1) longCondition := true if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //Sell Signal lincrossover = close < predicted_price macdfall = ta.falling(macd,1) macdsell = macd < signal shortCondition = false risklevel = predicted_price if (tolerance == "HIGH") risklevel := ta.vwma(predicted_price,len) if macdfall and macdsell and (macdLine < signalLine) and (close < risklevel) shortCondition := true if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)