Tendencia cruzada de OBV EMA siguiendo la estrategia

El autor:¿ Qué pasa?, fecha: 2024-02-20 15:35:08
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el cruce de líneas EMA duales del indicador OBV para determinar la tendencia del OBV, y toma posiciones largas / cortas de acuerdo con la dirección de la tendencia. El indicador OBV puede reflejar la relación entre precio y volumen más claramente y juzgar la intención de los participantes del mercado, por lo que se puede usar para capturar la tendencia del mercado.

Principio de la estrategia

Esta estrategia utiliza principalmente si OBV está en una tendencia alcista para determinar el tiempo de entrada largo. Específicamente, calcula la EMA de 6 días y la EMA de 24 días de OBV. Cuando la EMA de 6 días cruza por encima de la EMA de 24 días, se genera una señal larga. Del mismo modo, cuando la EMA de 6 días cruza por debajo de la EMA de 24 días, se genera una señal corta. Además, la estrategia también establece un stop loss del 3%.

La clave para el juicio de la tendencia de la estrategia radica en el indicador OBV. El indicador OBV refleja la intención colectiva del gran dinero y puede reflejar efectivamente la actitud de los participantes del mercado. Combinado con el procesamiento de la línea media móvil, se puede filtrar algo de ruido para hacer que la señal sea más clara y confiable. La estrategia utiliza líneas EMA rápidas y líneas EMA lentas para construir señales comerciales, que pueden suavizar los datos de precios y también capturar los cambios de tendencia de manera más sensible.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. El indicador OBV basado en el volumen de operaciones puede juzgar claramente la intención de los participantes en el mercado, y la señal es más confiable.

  2. El procesamiento de línea EMA dual puede filtrar algo de ruido para hacer que la señal sea más clara.

  3. La combinación de líneas EMA rápidas y lentas puede tener en cuenta tanto la suavización de los precios como la captación de los cambios de tendencia.

  4. La operación estratégica es simple y fácil de implementar.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. El indicador OBV puede emitir señales erróneas en algún momento, en el que la estrategia puede sufrir pérdidas.

  2. En el comercio violento, las líneas EMA tienen un efecto de retraso, que puede perder el punto de entrada óptimo.

  3. La configuración fija de stop loss puede ser demasiado rígida para adaptarse a los cambios del mercado.

Contramedidas:

  1. Confirme con otros indicadores para evitar señales erróneas.

  2. Optimice la configuración de los parámetros para que las líneas EMA sean más sensibles.

  3. Establezca el stop loss dinámico.

Dirección de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar la combinación de parámetros de la EMA para encontrar parámetros de media móvil más adecuados.

  2. Aumentar otros indicadores para la confirmación de la señal, como MACD, RSI, etc., para mejorar la precisión de la señal.

  3. Configurar un stop loss dinámico, que puede ajustar el punto de stop loss en tiempo real de acuerdo con las fluctuaciones del mercado.

  4. Optimización de combinación de parámetros para encontrar la mejor combinación de parámetros.

Conclusión

En general, esta estrategia es una estrategia de seguimiento de tendencias relativamente simple y confiable. Combina el indicador OBV y las líneas EMA duales para juzgar la tendencia. Las ventajas son la operación simple, las señales claras y la capacidad de rastrear efectivamente las tendencias. Las desventajas son posibles señales erróneas y retraso en el procesamiento de la línea EMA. La optimización con otros indicadores puede lograr mejores resultados.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OBV EMA X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

/////////////// OBV /////////////// 
src = close
atr = atr(input(title="ATR Period", defval=3, minval=1))
atrmult = input(title="ATR Mult", defval=1, minval=0)
obv = cum(change(src) > 0 ? volume * (volume / atr) : change(src) < 0 ? -volume * (volume / atr) : 0 * volume / atr)
e1 = ema(obv, input(24))
e2 = ema(obv, input(6))

///////////////  Strategy  /////////////// 
long = crossover(e2, e1)
short = crossunder(e2, e1)

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

//////////////// Stop loss /////////////// 
sl_inp = input(3.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
plot(e1, color = e1 > e1[1] ? color.lime : e1 < e1[1] ? color.red : color.white, linewidth = 2, offset = 0)
plot(e2, color = e2 > e2[1] ? color.lime : e2 < e2[1] ? color.red : color.white, linewidth = 1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)

Más.