
La stratégie utilise des indicateurs et des graphiques détaillés pour comparer de manière intuitive les gains et les pertes d’achat et de détention d’une stratégie donnée.
La logique centrale de la stratégie est de tracer quatre éléments clés pour comparer les différences entre une stratégie donnée et une stratégie d’achat et de détention:
En comparant les quatre éléments ci-dessus, il est possible d’avoir une vision claire et intuitive des avantages et des inconvénients de la stratégie par rapport au simple achat et possession.
Cette stratégie présente les avantages suivants par rapport à une simple comparaison des gains et des pertes d’achat et de détention:
Des indicateurs de comparaison plus complets et plus détaillés. Des comparaisons sur chaque ligne K, des comparaisons sur les statistiques globales, etc., nous permettent de mieux comprendre où la stratégie a gagné ou perdu contre l’achat et la possession.
Les graphiques de comparaison intuitifs. En traçant le bénéfice net de la stratégie, le bénéfice net d’achat et de détention et la différence entre les deux, nous pouvons juger plus rapidement la performance de la stratégie visuellement.
Nous pouvons choisir de nous concentrer uniquement sur la comparaison de la stratégie avec les achats et les détentions sur une certaine période afin de mieux analyser la performance de la stratégie.
Simplicité et facilité d’utilisation. La stratégie est intégrée avec une logique de comparaison complète. Il suffit de remplacer le code de la stratégie par la position correspondante dans le modèle.
La stratégie repose principalement sur la comparaison des indicateurs de revenus des achats et des détentions fournis par la plate-forme de négociation. Si cet indicateur intégré est biaisé, cela affectera les résultats finaux de la comparaison. De plus, la méthode de calcul des indicateurs statistiques dans la stratégie peut également être erronée et ne peut pas refléter avec précision la comparaison entre la stratégie et les achats et les détentions.
Il est possible de vérifier la performance de la stratégie par des comparaisons avec plus de références, en introduisant plus de méthodes statistiques, etc. La logique de comparaison de la stratégie doit également être ajustée si les indicateurs de rendement des achats et des détentions génèrent une plus grande divergence après la mise à niveau de la plate-forme de négociation.
Cette stratégie peut être optimisée dans les domaines suivants:
Ajouter plus de critères pour les comparaisons à trois ou à plusieurs. Par exemple, ajouter des comparaisons d’indices de parité ou d’indices sectoriels.
Ajout d’autres indicateurs statistiques, tels que le taux de victoires par an, par trimestre, la différence de temps de retrait maximal, etc. Cela nous permet de comprendre la stratégie sous une autre dimension.
Ajout de la configuration paramétrique. Permet aux utilisateurs de personnaliser des éléments supplémentaires au-delà de la période de comparaison, tels que la comparaison des indices de référence, des indicateurs statistiques, etc.
Optimisation de la présentation des graphiques. La simple présentation des graphiques en ligne peut être difficile à voir pour comparer les stratégies et les achats à des points de temps spécifiques. Vous pouvez envisager de dessiner des graphiques en colonnes ou d’ajouter des balises pour améliorer la lisibilité.
Cette stratégie nous permet de mieux améliorer la performance de la stratégie en nous permettant de comprendre de manière très claire et complète les différences entre une stratégie personnalisée et une simple stratégie d’achat et de détention. Ses périodes de comparaison personnalisables nous permettent également d’analyser de manière flexible les avantages et les inconvénients de la stratégie à différents stades.
Si nous continuons à enrichir les benchmarks, les statistiques et les graphiques, la stratégie peut devenir un outil d’analyse stratégique extrêmement puissant. Elle nous fournit un modèle et un cadre pour rendre notre travail d’analyse et d’amélioration des stratégies plus efficace.
/*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)