Tendencia de la caja de Darvas Estrategia de negociación cuantitativa

El autor:¿ Qué pasa?, fecha: 2023-12-27 14:45:41
Las etiquetas:

img

Resumen general

La estrategia Trending Darvas Box es una estrategia comercial a corto plazo que utiliza el canal de la caja Darvas para capturar las tendencias del mercado. El mecanismo central se basa en el indicador Darvas Box para determinar el impulso del mercado y localizar oportunidades comerciales.

Estrategia lógica

  • Utilice el parámetro de longitud para establecer el tamaño de la caja Darvas, que es de 5 bares por defecto en esta estrategia.
  • Determinar la dirección de la tendencia en función de las rupturas altas/bajas y tomar las posiciones largas/cortas correspondientes.
  • Cuando el precio se rompe por encima de la parte superior de la caja, se traza una línea verde TopBox.
  • Cuando el precio se rompe por debajo del fondo de la caja, se traza una línea roja BottomBox.
  • Utilice el sistema de promedios móviles como indicador auxiliar. Ir largo cuando el precio está por encima de los MA, y ir corto cuando está por debajo de los MA.
  • Utilice RVI para identificar la zona de sobrecompra/sobreventa. RVI por encima de la línea de señal sugiere sobrecompra; RVI por debajo sugiere sobreventa.

Las entradas se toman cuando todos los indicadores anteriores dan su consentimiento. El stop loss se establece en la banda opuesta de la caja Darvas. Las salidas se gestionan con direccionalidad RVI.

Análisis de ventajas

  • El canal de la caja de Darvas captura eficazmente la tendencia del mercado.
  • Muchas señales de fuga de cajas, buena frecuencia de entradas.
  • La caja razonable detiene el ajuste de pérdidas.
  • Los indicadores auxiliares mejoran la precisión.

Análisis de riesgos

  • Amplio rango de stop loss de la caja, mayor riesgo por operación.
  • Las operaciones largas pueden detenerse durante los retiros menores.
  • La dirección de la caja no siempre es correcta.
  • Se necesita ajuste fino para que los indicadores auxiliares se alineen con la caja.

Los parámetros auxiliares también necesitan optimización para detectar las señales de manera efectiva.

Direcciones de optimización

  • Prueba las longitudes de las cajas para encontrar el tamaño óptimo.
  • Optimice los parámetros auxiliares para que se ajusten mejor a la caja.
  • Para una mayor verificación de la señal, pruebe con otros indicadores auxiliares, por ejemplo, KDJ, MACD.
  • Prueba los ajustes de stop loss y take profit para una mayor estabilidad.

Conclusión

En resumen, la estrategia Trending Darvas Box es una estrategia comercial agresiva dirigida a tendencias a corto plazo. Captura los cambios de tendencia rápidamente con el canal de la caja Darvas, mientras que los indicadores auxiliares ayudan a mejorar la precisión.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 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/
// © xxy_theone
// https://www.youtube.com/watch?v=YYxlnFOX9sQ
// This strategy script has been made to backtest the strategy explained in the video above


//@version=5
strategy(shorttitle = "Darvas Box Test", title="TradeIQ Darvas Box Test", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, currency=currency.USD)

// === INPUT BACKTEST RANGE ===
var GRP1 = "Backtest Range"
fromDate = input(timestamp("7 Mar 2022 00:00 +0000"), "From", group=GRP1)
toDate = input(timestamp("19 Mar 2022 23:59 +0000"), "To", group=GRP1)
window() =>  true


var GRP3 = "Darvas Box"
boxp=input(5, "Box Length", group=GRP3)

LL = ta.lowest(low,boxp)
k1=ta.highest(high,boxp)
k2=ta.highest(high,boxp-1)
k3=ta.highest(high,boxp-2)

NH =  ta.valuewhen(high>k1[1],high,0)
box1 =k3<k2
TopBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, NH, 0)
BottomBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, LL, 0)


plot(TopBox, linewidth=3, color=color.green, title="TBbox") 
plot(BottomBox, linewidth=3, color=color.red, title="BBbox")


var GRP4 = "MavilimW"

fmal=input(3,"First Moving Average length", group=GRP4)
smal=input(5,"Second Moving Average length", group=GRP4)
tmal=fmal+smal
Fmal=smal+tmal
Ftmal=tmal+Fmal
Smal=Fmal+Ftmal

M1= ta.wma(close, fmal)
M2= ta.wma(M1, smal)
M3= ta.wma(M2, tmal)
M4= ta.wma(M3, Fmal)
M5= ta.wma(M4, Ftmal)
MAVW= ta.wma(M5, Smal)
col1= MAVW>MAVW[1]
col3= MAVW<MAVW[1]
colorM = col1 ? color.blue : col3 ? color.red : color.yellow

plot(MAVW, color=colorM, linewidth=2, title="MAVW")


var GRP5 = "Relative Vigor Index"
len = input.int(10, title="Length", minval=1, group=GRP5)
rvi = math.sum(ta.swma(close-open), len)/math.sum(ta.swma(high-low),len)
sig = ta.swma(rvi)
offset = input.int(0, "Offset", minval = -500, maxval = 500, group=GRP5)
//plot(rvi, color=#008000, title="RVGI", offset = offset)
//plot(sig, color=#FF0000, title="Signal", offset = offset)


var longStopSet = false

long = ta.crossover(close,TopBox) and close > MAVW ? true : false
longClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossunder(rvi,sig) ? true : false
strategy.entry("Long Position", strategy.long, when = long and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(longStopSet==false and strategy.position_size > 0)
    strategy.exit("exit", "Long Position", stop=BottomBox)
    longStopSet := true
if(strategy.position_size==0)
    longStopSet := false
strategy.close("Long Position", when = longClose)

var shortStopSet = false

short = ta.crossunder(close,BottomBox) and close < MAVW ? true : false
shortClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossover(rvi,sig) ? true : false
strategy.entry("Short Position", strategy.short, when = short and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(shortStopSet==false and strategy.position_size < 0)
    strategy.exit("exit", "Short Position", stop=TopBox)
    shortStopSet := true
if(strategy.position_size==0)
    shortStopSet := false
strategy.close("Short Position", when = shortClose)


Más.