Comparación visual de la estrategia vs. comprar y mantener


Fecha de creación: 2024-01-05 15:27:26 Última modificación: 2024-01-05 15:27:26
Copiar: 0 Número de Visitas: 653
1
Seguir
1617
Seguidores

Comparación visual de la estrategia vs. comprar y mantener

Descripción general

La estrategia utiliza indicadores y gráficos detallados para comparar intuitivamente la estrategia dada con los beneficios de compra y tenencia de los valores negociados.

Principio de estrategia

La lógica central de la estrategia es la de trazar cuatro elementos clave para comparar las diferencias entre una estrategia dada y una estrategia de compra y tenencia:

  1. Ganancias netas de la estrategia: la suma de las ganancias netas de la estrategia y las ganancias no realizadas
  2. Compra y retención de ganancias netas: sin ganancias
  3. Diferencia: Ganancias netas por estrategia - Ganancias netas por compra y posesión
  4. Estrategia VS compra y posesión de indicadores estadísticos
    • Las estrategias de ganancias netas son más altas que el porcentaje de Bar que se compra y se posee
    • La estrategia de obtener un beneficio neto por debajo del porcentaje de Bar que se compra y se posee
    • Diferencia entre la estrategia y el promedio de la compra

Al comparar los cuatro elementos mencionados, se puede entender claramente e intuitivamente los pros y los contras entre la estrategia y la simple compra y tenencia.

Análisis de las ventajas estratégicas

La estrategia tiene las siguientes ventajas en comparación con una simple compra y tenencia de ganancias:

  1. Indicadores de comparación más completos y detallados. Incluyendo comparaciones en cada línea de K, comparaciones de estadísticas generales, etc., que permiten tener una mejor idea de dónde las estrategias ganan o pierden en la compra y la posesión.

  2. Gráficos de comparación intuitivos. Al trazar gráficos de ganancias netas de estrategias, ganancias netas de compras y tenencias y el diferencial entre ambos, podemos juzgar el rendimiento de las estrategias más rápidamente a través de la visión.

  3. Se puede personalizar la comparación de períodos de tiempo. Se puede optar por enfocarse únicamente en la comparación de la estrategia con la compra y la tenencia en un período de tiempo determinado para analizar mejor el rendimiento de la estrategia.

  4. Sencillo y fácil de usar. La política tiene una lógica de comparación completa, solo tenemos que sustituir el código de nuestra política por la posición correspondiente en la plantilla. No es necesario escribir la lógica de comparación.

Análisis de riesgos

La estrategia se basa principalmente en la comparación de los indicadores de compras y tenencias de ingresos incorporados en la plataforma de negociación. Si el indicador incorporado tiene una desviación, esto afectará los resultados de la comparación final. Además, la estrategia puede tener errores en el método de cálculo de los indicadores estadísticos y no reflejar con un 100% de precisión la comparación entre la estrategia y las compras y tenencias.

Se puede verificar el rendimiento de la estrategia mediante la comparación con más referenciales, la introducción de más métodos estadísticos, etc. Si los indicadores de ganancias de compra y tenencia producen una gran desviación después de la actualización de la plataforma de negociación, también se necesita ajustar la lógica de comparación en la estrategia.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Aumentar las referencias para comparaciones tripartitas o multipartitas. Por ejemplo, se puede agregar la comparación de índices de pares o de indicadores de la industria.

  2. Añadir más indicadores estadísticos, como la tasa de ganancias por año, por trimestre, la diferencia máxima en el tiempo de retirada, etc. Nos permite entender la estrategia en más dimensiones.

  3. La configuración de parámetros añadida permite a los usuarios personalizar más contenido fuera de los períodos de tiempo de comparación, como la comparación de puntos de referencia, indicadores estadísticos, etc.

  4. Optimización de la presentación de gráficos. La presentación de un simple gráfico de líneas en la actualidad puede ser difícil de ver con claridad la comparación entre la estrategia y la compra en los puntos de tiempo específicos, se puede considerar el dibujo de un gráfico en forma de columnas o la adición de marcas para mejorar la legibilidad.

Resumir

La estrategia permite una comprensión muy clara y completa de las diferencias entre la estrategia de compra y la simple estrategia de compra y tenencia, mediante el diseño de varios indicadores de comparación detallados y una presentación gráfica intuitiva, lo que nos ayuda a mejorar mejor el rendimiento de la estrategia. Su período de comparación personalizable también nos permite analizar de manera flexible las ventajas y desventajas de la estrategia en diferentes etapas.

La estrategia puede ser una herramienta de análisis de estrategias extremadamente poderosa si se continúa enriqueciendo las referencias, los indicadores estadísticos y la presentación gráfica. Ofrece una plantilla y un marco para que el trabajo de análisis y mejora de estrategias sea más eficiente.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-28 00:00:00
end: 2024-01-04 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("VS Buy Hold", precision=2)

bnh_info_panel = input(true, title='Enable Info Panel')
bnh_indicator_panel = input(true, title='Enable Indicator Panel')

//COMPARISON DATE RANGE//
bnh_FromYear = input(1970, title="From Year", minval=1970)
bnh_FromMonth = input(1, title="From Month", minval=1, maxval=12)
bnh_FromDay = input(1, title="From Day", minval=1, maxval=31)

bnh_ToYear = input(2050, title="To Year", minval=2010)
bnh_ToMonth = input(12, title="To Month", minval=1, maxval=12)
bnh_ToDay = input(31, title="To Day", minval=1, maxval=31)

bnh_start = timestamp(bnh_FromYear, bnh_FromMonth, bnh_FromDay, 00, 00)
bnh_finish = timestamp(bnh_ToYear, bnh_ToMonth, bnh_ToDay, 23, 59)
bnh_timeCond = time >= bnh_start and time <= bnh_finish ? true: false
    
//Note: If you are going to use the COMPARISON DATE RANGE above, apply bnh_timeCond
//      to your strategy parameters.


/////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////STRATEGY SCRIPT START//////////////////////////////////

//=========================PLACEHOLDER MA CROSS STRATEGY=========================//
fastLength = 50
slowLength = 200
price = close

mafast = sma(price, fastLength)
maslow = sma(price, slowLength)
strategy.initial_capital = 50000
positionSize = strategy.initial_capital / close

if (crossover(mafast, maslow) and bnh_timeCond) // <= bnh_timeCond added as a condition
    strategy.entry("MA2CrossLE", strategy.long, positionSize, comment="MA2CrossLE")

if (crossunder(mafast, maslow) and bnh_timeCond) // <= bnh_timeCond added as a condition
    strategy.entry("MA2CrossSE", strategy.short, positionSize, comment="MA2CrossSE")

//////////////////////////////STRATEGY SCRIPT END////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////



//STRATEGY EQUITY
strategy_pnl = strategy.netprofit + strategy.openprofit
bnh_strategy_pnl_pcnt = (strategy_pnl / strategy.initial_capital) * 100


//BUY AND HOLD EQUITY
float bnh_start_bar = na
bnh_start_bar := na(bnh_start_bar[1]) and bnh_timeCond? close : bnh_start_bar[1]
bnl_buy_hold_equity = ((close - bnh_start_bar)/bnh_start_bar) * 100


//STRATEGY VS BUY AND HOLD STATS
bnh_vs_diff = bnh_strategy_pnl_pcnt - bnl_buy_hold_equity

bnh_bar_counter = 0
bnh_bar_counter := bnh_vs_diff > 0 ? nz(bnh_bar_counter[1]) + 1 : bnh_bar_counter[1]

bnh_bar_counter2 = 0
bnh_bar_counter2 := bnh_vs_diff <= 0 ? nz(bnh_bar_counter2[1]) + 1 : bnh_bar_counter2[1]

bnh_pcnt_above = (bnh_bar_counter/(bnh_bar_counter + bnh_bar_counter2))*100
bnh_pcnt_below = (bnh_bar_counter2/(bnh_bar_counter + bnh_bar_counter2))*100

bnh_average_diff = cum(bnh_vs_diff) / (bnh_bar_counter + bnh_bar_counter2)


//PLOTS AND LABELS
bnh_diff_color = bnh_vs_diff > 0 ? color.green : color.red
plot(bnh_vs_diff, style=plot.style_columns, color=bnh_diff_color, transp=60, title='SvB')
plot(bnh_strategy_pnl_pcnt, color=color.yellow, linewidth=2, title="SR")
plot(bnl_buy_hold_equity, color=color.blue, title="BHR")

// draw_IndicatorLabel(_text, _x, _y, label_color, font_color)=>
//     string_text = _text
//     var label la_indicator = na
//     label.delete(la_indicator)
//     la_indicator := label.new(
//          x=_x, y=_y, 
//          text=string_text, xloc=xloc.bar_index, yloc=yloc.price, 
//          color=label_color, style=label.style_labeldown, textcolor=font_color, size=size.small)

// draw_InfoPanel(_text, _x, _y, font_size)=>
//     var label la_panel = na
//     label.delete(la_panel)
//     la_panel := label.new(
//          x=_x, y=_y, 
//          text=_text, xloc=xloc.bar_time, yloc=yloc.price, 
//          color=color.new(#383838, 5), style=label.style_labelup, textcolor=color.white, size=font_size)

// if bnh_indicator_panel         
//     draw_IndicatorLabel("Difference", bar_index, bnh_vs_diff, color.new(color.gray, 40), color.white)
//     draw_IndicatorLabel("Strategy P/L", bar_index, bnh_strategy_pnl_pcnt, color.new(color.yellow, 50), color.white)
//     draw_IndicatorLabel("Buy & Hold P/L", bar_index, bnl_buy_hold_equity, color.new(color.blue, 50), color.white)

// info_panel_x = time_close + round(change(time) * 200)
// info_panel_y = max(max(bnl_buy_hold_equity, bnh_strategy_pnl_pcnt), bnh_vs_diff) + abs(bnh_vs_diff * 0.25)


// title = "STRATEGY vs BUY & HOLD STATS"
// row0 = "-----------------------------------------------------"
// row1 = 'Bars Above Buy & Hold: ' + tostring(bnh_pcnt_above, '#.##') + '%'
// row2 = 'Bars Below Buy & Hold: ' + tostring(bnh_pcnt_below, '#.##') + '%'
// row3 = 'All Time Ave. Difference: ' + tostring(bnh_average_diff, '#.##') + '%'

// panel_text = '\n' + title + '\n' + row0 + '\n' + row1 + '\n\n' + row2 + '\n\n' + row3 + '\n'

// if bnh_info_panel
//     draw_InfoPanel(panel_text, info_panel_x, info_panel_y, size.normal)