Comparaison visuelle entre la stratégie et les rendements d'achat et de détention

Auteur:ChaoZhang est là., Date: 2024-01-05 15h27 et 26h
Les étiquettes:

img

Résumé

Cette stratégie permet une comparaison détaillée et visuelle entre une stratégie donnée et les rendements d'achat et de détention du titre négocié.

La logique de la stratégie

La logique de base de cette stratégie est de tracer quatre éléments clés pour la comparaison entre la stratégie donnée et la stratégie d'achat et de détention:

  1. Stratégie P/L: résultat net de la stratégie + résultat ouvert de la stratégie
  2. Résultats de l'achat et de la détention: rendement non réalisé
  3. Différence: stratégie P/L - Acheter et conserver le P/L
  4. Stratégie contre achat
    • Pourcentage de la stratégie P/L des barres au-dessus de Buy & Hold
    • Pourcentage de la stratégie P/L des barres inférieure à Buy & Hold
    • Différence moyenne de tous les temps

En comparant les quatre éléments ci-dessus, nous pouvons avoir une compréhension intuitive de si notre stratégie surpasse ou sous-performe une simple stratégie d'achat et de détention.

Analyse des avantages

Comparée à une simple comparaison des rendements d'achat et de détention, cette stratégie présente les avantages suivants:

  1. Des mesures de comparaison plus complètes et plus détaillées, y compris des comparaisons par barre et des comparaisons statistiques globales, afin que nous sachions clairement quand et où notre stratégie bat ou perd pour acheter et conserver.

  2. Des graphiques visuels intuitifs qui tracent la stratégie P/L, buy & hold P/L et la différence entre eux.

  3. Plage de dates de comparaison personnalisable où nous pouvons nous concentrer sur la comparaison de notre stratégie par rapport à l'achat et à la détention sur des périodes spécifiques.

  4. Simple et facile à utiliser. La logique de comparaison est intégrée de sorte que nous n'avons qu'à remplacer la section du script de stratégie par la nôtre. Pas besoin de coder la logique de comparaison nous-mêmes.

Analyse des risques

Cette stratégie repose principalement sur les métriques de rendement intégrées de la plateforme de trading pour la comparaison. Tout biais avec ce benchmark affectera le résultat final. Il peut également y avoir des défauts dans les calculs statistiques de cette stratégie qui ne reflètent pas avec précision la comparaison.

Si la plateforme de négociation apporte des modifications significatives à la métrique d'achat et de détention, la logique de comparaison doit également être ajustée.

Directions d'optimisation

Cette stratégie peut être encore optimisée par les aspects suivants:

  1. Mettre en place davantage de critères de référence pour la comparaison à trois voies ou à plusieurs voies, par exemple la comparaison par rapport à un indice ou à des pairs du secteur.

  2. Incluez plus de mesures statistiques telles que le taux de gain annuel, la différence de durée maximale de tirage, etc. pour évaluer la stratégie à partir de plus de dimensions.

  3. Faire en sorte que plus de composants tels que les repères, les métriques, etc. soient personnalisables par les utilisateurs au lieu de la seule plage de dates.

  4. Améliorez la visualisation des graphiques, car les graphiques linéaires simples rendent difficile l'identification de comparaisons détaillées sur des barres spécifiques.

Conclusion

Avec des métriques de comparaison détaillées et des graphiques visuels intuitifs, cette stratégie nous permet d'avoir une vue très claire sur où et comment notre stratégie personnalisée diffère d'une approche simple d'achat et de détention.

L'enrichissement des indicateurs de référence, des métriques et des visualisations peut en faire une boîte à outils extrêmement puissante pour l'analyse stratégique.


/*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)



Plus de