
Название стратегии: линейная MACD-стратегия, управляемая динамикой
Описание: Это количественная стратегия, которая использует линейную регрессию для прогнозирования цен на акции и в сочетании с MACD. Она использует линейную регрессию для анализа исторических цен и объемов сделок и прогнозирования будущих ценовых тенденций.
Принципы стратегии:
Анализ силы: Это стратегия, которая сочетает в себе статистические прогнозы и технические показатели. Она использует линейную регрессию для прогнозирования цен, избегая субъективных предположений. В то же время, MACD-индикатор может эффективно оценивать рыночные курсы покупок и продаж и точно ловить возможности. В целом, это высоко систематизированная стратегия с высоким уровнем точности прогнозов и контролируемым риском.
Анализ рисков: Линейная регрессия зависит только от исторических данных, не чувствительна к внезапным событиям, таким как новости о крупных прибылях и убытках, и может создавать ошибочные сигналы. Кроме того, параметры, такие как длина цикла регрессии, также могут повлиять на эффективность стратегии. Мы рекомендуем использовать упрощенную прогнозную цену ввма, чтобы уменьшить влияние на стратегию колебаний кривой.
Направление оптимизации: Мы считаем, что эту стратегию можно оптимизировать в следующих аспектах:
В заключение: Эта стратегия с помощью линейной регрессии прогнозирует цены и 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)