Estrategia de la pirámide de OBV basada en el script de Coinrule

El autor:¿ Qué pasa?, Fecha: 2023-12-08 15:58:29
Las etiquetas:

img

Resumen general

Esta estrategia se llama OBV Pyramid. Diseña posiciones de apertura basadas en el indicador OBV y adopta un enfoque de posición de pirámide creciente para rastrear las tendencias para obtener ganancias después de que surjan.

Principios

Esta estrategia utiliza el indicador OBV para determinar la dirección de la tendencia. El indicador OBV juzga las tendencias de precios basadas en cambios en el volumen de negociación, ya que los cambios en el volumen reflejan las actitudes de los participantes del mercado. Cuando la línea OBV cruza por encima de 0, indica un fortalecimiento del poder adquisitivo y la formación de una tendencia alcista. Cuando cruza por debajo de 0, indica un fortalecimiento de la presión de venta y una tendencia bajista.

Esta estrategia confirma una tendencia alcista cuando el OBV cruza por encima de 0. Cuando se forma una tendencia alcista, se establecen reglas de posición de pirámide creciente, lo que permite hasta 7 compras adicionales.

Análisis de ventajas

La mayor ventaja de esta estrategia es la captura de tendencias utilizando el enfoque piramidal para rastrear tendencias y obtener ganancias de ellas.

En concreto, las principales ventajas son:

  1. Una evaluación precisa de la tendencia mediante OBV;
  2. Compras piramidal para seguir las tendencias con fines de lucro;
  3. el riesgo de control de las ganancias y pérdidas;
  4. Una lógica simple y clara.

Análisis de riesgos

Los principales riesgos provienen de dos aspectos:

  1. señales OBV inexactas que conducen a oportunidades perdidas o entradas incorrectas;
  2. Demasiadas compras adicionales aumentan el riesgo.

Soluciones:

  1. Optimizar los parámetros del OBV para garantizar su exactitud;
  2. Limitar razonablemente las compras adicionales para un riesgo controlable.

Direcciones de optimización

Direcciones principales de optimización:

  1. Optimización de los parámetros del OBV para una mayor precisión;
  2. Optimización del número de compras y cantidades adicionales;
  3. Optimización de las ganancias y pérdidas;
  4. Incorporación de otros indicadores para evitar la dependencia exclusiva del OBV.

Esto puede hacer que la estrategia sea más estable, controlable y extensible.

Conclusión

En general, esta es una estrategia muy práctica. Utiliza OBV para determinar la dirección de la tendencia, luego las pirámides en la tendencia para obtener ganancias. La lógica es simple y clara para una fácil prueba posterior. Tiene valor de aplicabilidad y con mayor parámetro, optimización de la gestión de riesgos y dinero, el rendimiento puede mejorar aún más, lo que justifica una investigación adicional.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 00:00:00
period: 1h
basePeriod: 15m
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/
// © RafaelZioni

//@version=4

strategy(title = " OBV Pyr", overlay = true, pyramiding=5,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 20, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)

//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
 
//
 
filter=true 
src = close


LengthOBV = input(20)

nv = change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume 
c = cum(nv) 
c_tb = c - sma(c,LengthOBV) 

// Conditions

longCond = crossover(c_tb,0)
//shortCond =crossunder(cnv_tb,0)

//

longsignal  = (v1 > v2 or filter == false ) and longCond
//shortsignal = (v1 < v2 or filter == false ) and shortCond 
 
//set take profit
 
ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick
 
//set take profit
 
LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick
 
 
////Order Placing
//
strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)
//
strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)
//
strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)
//
strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)
//
strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)
//
strategy.entry("Entry 6", strategy.long, when=strategy.opentrades == 5 and longsignal)
//
strategy.entry("Entry 7", strategy.long, when=strategy.opentrades == 6 and longsignal)
//
//
//
if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 6", from_entry="Entry 6", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 7", from_entry="Entry 7", profit=Profit_Ticks, loss=Loss_Ticks)
    


Más.