Количественная торговая стратегия на основе модифицированных OBV и MACD


Дата создания: 2023-11-15 17:58:42 Последнее изменение: 2023-11-15 17:58:42
Копировать: 0 Количество просмотров: 858
1
Подписаться
1617
Подписчики

Количественная торговая стратегия на основе модифицированных OBV и MACD

Обзор

Стратегия, основанная на изменении энергетического волнового показателя (OBV) и MACD для определения торговых сигналов, относится к объемной стратегии. Она объединяет индекс цен на акции (MACD) и изменение OBV в качестве объемного сигнала, предназначенного для обнаружения торговых возможностей для сильного прорыва в ценах на акции.

Стратегический принцип

  1. Вычислите простое скользящее среднее SMA, чтобы определить тенденцию в больших рынках.

  2. Расчет изменения OBV. Он изменяет способ расчета OBV в зависимости от отношения к цене закрытия и цене закрытия на предыдущий день, что делает OBV более чувствительным.

  3. Вычисление MACD на измененном OBV. MACD состоит из быстрого, медленного и столба MACD, где можно обнаружить изменяющийся тренд.

  4. Если MACD находится вверх, то это сигнал к покупке.

  5. Если MACD находится в тупике и наклонена вниз, то это признак продажи.

  6. В сочетании с большим количеством SMA, избегайте ненужных сделок.

Анализ преимуществ

  1. Изменения OBV более чувствительны и заранее улавливают изменения количественной энергии.

  2. MACD позволяет четко оценивать изменения в тренде и ключевых точках.

  3. Комбинированный сигнал, повышенная точность сигнала.

  4. SMA помогает отфильтровать ошибочные сигналы.

  5. Стратегическая мысль ясна и понятна, есть много возможностей для оптимизации параметров.

Анализ рисков

  1. Изменение OBV может привести к ошибочным сигналам и требует совместной фильтрации других показателей.

  2. Неправильная настройка параметров MACD может привести к пропущенным торговым возможностям или ошибочным сигналам.

  3. Необходимо обращать внимание на информацию о самих акциях, чтобы избежать убытков из-за проблем с отдельными акциями.

  4. Внимание должно быть уделено рыночным условиям и не может быть использовано в особых ситуациях.

  5. Риск отслеживания данных может снизиться, а эффективность реального диска может снизиться.

Направление оптимизации

  1. Тестирование различных комбинаций циклов SMA для оптимизации тенденций на рынке.

  2. Тестирование параметров MACD, оптимизация количественных изменений.

  3. Добавить другие индикаторы, такие как KDJ, RSI и т. д.

  4. Добавление стратегии стоп-лосса для контроля одиночных потерь.

  5. Оптимизация стратегии управления капиталом и повышение эффективности общей прибыли.

  6. Тестирование различных параметров стратегии акций.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
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("Altered OBV On MACD", overlay=true, margin_long=100, margin_short=100)

// 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
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)
//sma plot
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)
plot(outthree, color=color.fuchsia, title="MA9", offset=offset)

fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
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)
//BUY Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macd,2)
macdlong = ta.crossover(macd, signal)
longCondition=false
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macd,1)
macdsell = macd < signal
shortCondition = false
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true


if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)