Esta estrategia combina los cálculos de la variación diaria del volumen y el indicador NVI para negociar las oscilaciones a corto plazo del mercado.
Específicamente, cuenta el número de días en que el volumen es menor que el día anterior, y utiliza el cambio de valor NVI para formar un oscilador. Las señales largas se generan cuando el oscilador cambia de negativo a positivo, y permanece positivo en la segunda vela. Las señales cortas ocurren en el giro de positivo a negativo, mientras que todavía son negativas en la segunda vela.
La ventaja de esta estrategia es capitalizar las brechas a corto plazo dentro de solo 2 velas. Sin embargo, tal comercio de alta frecuencia corre el riesgo de una sobreoptimización, con un rendimiento que varía mucho entre los períodos de tiempo del mercado.
Además, las tarifas de negociación pueden ser una preocupación para este tipo de operaciones a corto plazo, lo que requiere ajuste de parámetros por instrumento.
/*backtest start: 2022-09-04 00:00:00 end: 2023-09-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // strategy(title = "Strategy Only 2 Candles", shorttitle = "SO2C", overlay = true, precision = 8, calc_on_order_fills = true, calc_on_every_tick = true, backtest_fill_limits_assumption = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 1000, currency = currency.USD, linktoseries = true) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // backTestSectionFrom = input(title = "═════════ DESDE ════════", defval = true, type = input.bool) FromMonth = input(defval = 1, title = "Mes", minval = 1) FromDay = input(defval = 1, title = "Dia", minval = 1) FromYear = input(defval = 2018, title = "Año", minval = 2014) backTestSectionTo = input(title = "═════════ HASTA ════════", defval = true, type = input.bool) ToMonth = input(defval = 31, title = "Mes", minval = 1) ToDay = input(defval = 12, title = "Dia", minval = 1) ToYear = input(defval = 9999, title = "Año", minval = 2014) backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59)) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // nvi = 0.0 nvi := iff(volume < volume[1], nz(nvi[1]) + (close - close[1]) / close[1], nz(nvi[1])) nvim = ema(nvi, 15) nvimax = highest(nvim, 90) nvimin = lowest(nvim, 90) azul = (nvi - nvim) * 100 / (nvimax - nvimin) // VARIABLES var compra_activada = 0 var compra = true var compra_1 = true var cerrar_compra= 0 var venta_activada = 0 var venta = true var venta_1 = true var cerrar_venta= 0 // COMPRA compra := azul > azul[1] and azul > 0 and azul[1] < 0 if (compra == 1 ) compra_activada := 1 // CIERRE COMPRA cerrar_compra := compra_activada[2] == 1 ? 1 : 0 if (cerrar_compra == 1) compra_activada := 0 // VENTA venta := azul < azul[1] and azul < 0 and azul[1] > 0 if (venta == 1 ) venta_activada := 1 // CIERRE COMPRA cerrar_venta := venta_activada[2] == 1 ? 1 : 0 if (cerrar_venta == 1) venta_activada := 0 // ESTRATEGIA if (backTestPeriod()) strategy.entry("Compra", true, when = compra == 1 ) strategy.entry("Venta", false, when = venta == 1 ) strategy.close("Compra", when = cerrar_compra == 1 ) strategy.close("Venta", when = cerrar_venta == 1 )