Estrategia de negociación cuantitativa modificada de OBV y MACD

El autor:¿ Qué pasa?, Fecha: 2023-11-15 17:58:42
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el volumen alterado en el saldo (OBV) y el MACD para generar señales comerciales. Combina el índice de precios MACD y el OBV alterado como un indicador integral para el volumen y el precio, con el objetivo de capturar oportunidades comerciales cuando el precio y el volumen se fortalecen.

Estrategia lógica

  1. Calcular la media móvil simple (SMA) para determinar la tendencia del mercado.

  2. Calcula el OBV modificado: modifica el cálculo del OBV basado en el precio cerrado y la relación de precio cerrado anterior para hacer que el OBV sea más sensible.

  3. Calcular el MACD en OBV alterado. El MACD consiste en una línea rápida, una línea lenta y un histograma para identificar el cambio de impulso del volumen.

  4. Cuando el MACD cruza el oro y sube, se genera una señal de compra.

  5. Cuando el MACD se cruza y baja, se activa una señal de venta.

  6. Compruebe las SMA para evitar operaciones innecesarias durante el mercado sin tendencia.

Análisis de ventajas

  1. La OBV alterada es más sensible a capturar los cambios tempranos de volumen.

  2. El MACD indica claramente el cambio en el impulso del volumen y los niveles clave.

  3. El volumen y el precio combinados de la señal mejoran la precisión.

  4. La SMA filtra la señal falsa determinando la tendencia del mercado.

  5. Lógica estratégica clara y un gran espacio de optimización.

Análisis de riesgos

  1. Los OBV alterados pueden generar señales falsas, las necesidades se filtran por otros indicadores.

  2. La configuración inadecuada de los parámetros MACD puede fallar las operaciones o causar señales falsas.

  3. Preste atención a los detalles de las existencias para evitar pérdidas.

  4. Monitorear la situación del mercado, ya que la estrategia puede no funcionar para escenarios especiales.

  5. El riesgo de sobreajuste de las pruebas de retroceso puede conducir a un peor rendimiento en el comercio en vivo.

Direcciones de optimización

  1. Prueba de diferentes combinaciones de períodos de SMA para optimizar la determinación de la tendencia del mercado.

  2. Prueba de los parámetros MACD para identificar mejor el cambio de impulso de volumen.

  3. Añadir otros indicadores como filtro, como KDJ, RSI, etc.

  4. Añadir el stop loss al límite de pérdida por operación.

  5. Optimizar la gestión del dinero para mejorar la rentabilidad general.

  6. Diferencias de parámetros de ensayo entre poblaciones.

Conclusión

La estrategia combina OBV y MACD alterados para lograr la síntesis de volumen y precio. Puede capturar el cambio de impulso de volumen temprano y generar señales comerciales. En comparación con el uso de OBV o MACD solo, esta estrategia proporciona oportunidades comerciales más confiables. Sin embargo, existe riesgo de señales falsas y se necesitan más optimizaciones en indicadores y parámetros, además de gestión de dinero para obtener ganancias constantes en el comercio en vivo. En general, la estrategia tiene una lógica clara y vale la pena probar y optimizar para explorar su potencial.


/*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)


Más.