Линейный MACD Откройте магию линейной регрессии в TradingView


Дата создания: 2023-12-15 10:22:50 Последнее изменение: 2023-12-15 10:22:50
Копировать: 0 Количество просмотров: 928
1
Подписаться
1621
Подписчики

Линейный MACD Откройте магию линейной регрессии в TradingView

Название стратегии: линейная MACD-стратегия, управляемая динамикой

Описание: Это количественная стратегия, которая использует линейную регрессию для прогнозирования цен на акции и в сочетании с MACD. Она использует линейную регрессию для анализа исторических цен и объемов сделок и прогнозирования будущих ценовых тенденций.

Принципы стратегии:

  1. Коэффициент линейной регрессии для расчета цены: при помощи линейной регрессии, основанной на количестве исторических сделок, используется для прогнозирования будущих цен.
  2. Нарисуйте прогнозную цену: Нарисуйте прогнозную линию цены на основе коэффициента возврата, указанного в шаге 1.
  3. Создание сигнала покупки: когда прогнозируемая цена находится между ценой открытия и ценой закрытия, и MACD повышается, создается сигнал покупки.
  4. Появление сигнала продажи: когда MACD падает, а цена ниже прогнозируемой, появляется сигнал продажи.

Анализ силы: Это стратегия, которая сочетает в себе статистические прогнозы и технические показатели. Она использует линейную регрессию для прогнозирования цен, избегая субъективных предположений. В то же время, MACD-индикатор может эффективно оценивать рыночные курсы покупок и продаж и точно ловить возможности. В целом, это высоко систематизированная стратегия с высоким уровнем точности прогнозов и контролируемым риском.

Анализ рисков: Линейная регрессия зависит только от исторических данных, не чувствительна к внезапным событиям, таким как новости о крупных прибылях и убытках, и может создавать ошибочные сигналы. Кроме того, параметры, такие как длина цикла регрессии, также могут повлиять на эффективность стратегии. Мы рекомендуем использовать упрощенную прогнозную цену ввма, чтобы уменьшить влияние на стратегию колебаний кривой.

Направление оптимизации: Мы считаем, что эту стратегию можно оптимизировать в следующих аспектах:

  1. Присоединение к механизму остановки убытков. При выходе цены за пределы остановки убытков, эффективно контролируются убытки, вызванные отдельными ошибочными сигналами.
  2. Внедрение моделей машинного обучения. Использование более эффективных моделей для прогнозирования ценовых тенденций, повышение точности стратегии.
  3. Вместе с эмоциональными показателями. Внедрение эмоциональных показателей, таких как индекс рыночного страха, для оценки атмосферы торговли на рынке и повышения шансов на победу в стратегии.
  4. Объединение нескольких временных рамок. Прогнозы различных временных циклов могут подтверждаться друг другом, формируя комбинированную стратегию, снижающую ограничения одного временного рама.

В заключение: Эта стратегия с помощью линейной регрессии прогнозирует цены и 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)