Strategi ini membuat perbandingan terperinci dan visual antara strategi tertentu dan pulangan beli & pegang sekuriti yang didagangkan.
Logik teras strategi ini adalah untuk merangka empat elemen utama untuk perbandingan antara strategi yang diberikan dan strategi beli & pegang:
Dengan membandingkan empat elemen di atas, kita boleh mempunyai pemahaman intuitif mengenai sama ada strategi kita lebih baik atau kurang baik daripada strategi beli & tahan yang mudah.
Berbanding dengan perbandingan mudah pulangan beli & tahan, strategi ini mempunyai kelebihan berikut:
Metrik perbandingan yang lebih komprehensif dan terperinci, termasuk perbandingan per bar dan perbandingan statistik keseluruhan, supaya kita tahu dengan jelas kapan dan di mana strategi kita mengalahkan atau kehilangan untuk membeli & memegang.
Carta visual intuitif yang memetakan strategi P / L, beli & pegang P / L dan perbezaan di antara mereka.
Julat tarikh perbandingan yang boleh disesuaikan di mana kita boleh menumpukan pada perbandingan strategi kita vs beli & pegang pada tempoh tertentu.
Sederhana dan mudah digunakan. Logik perbandingan dibina supaya kita hanya perlu menggantikan bahagian skrip strategi dengan kita sendiri. Tidak perlu mengkodkan logik perbandingan sendiri.
Strategi ini bergantung terutamanya pada metrik pulangan beli & tahan yang terbina dalam platform dagangan untuk perbandingan. sebarang bias dengan penanda aras itu akan mempengaruhi hasil akhir. Juga, mungkin terdapat kelemahan dalam pengiraan statistik strategi ini yang gagal mencerminkan perbandingan dengan tepat.
Lebih banyak penanda aras dan kaedah statistik boleh diperkenalkan untuk pengesahan lanjut.
Strategi ini boleh dioptimumkan lagi dari aspek berikut:
Memperkenalkan lebih banyak penanda aras untuk perbandingan tiga arah atau pelbagai arah, contohnya membandingkan dengan indeks atau rakan sekerja industri.
Sertakan lebih banyak metrik statistik seperti kadar kemenangan tahunan, perbezaan tempoh pengambilan maksimum dan lain-lain untuk menilai strategi dari lebih banyak dimensi.
Buat lebih banyak komponen seperti penanda aras, metrik dan lain-lain yang boleh disesuaikan oleh pengguna dan bukannya hanya julat tarikh.
Meningkatkan visualisasi carta kerana carta garis mudah di sini menjadikannya sukar untuk melihat perbandingan terperinci pada bar tertentu.
Dengan metrik perbandingan terperinci dan carta visual yang intuitif, strategi ini membolehkan kita mempunyai pandangan yang sangat jelas di mana dan bagaimana strategi tersuai kami berbeza dari pendekatan beli & tahan yang mudah. Julat tarikh yang boleh disesuaikan juga memberikan fleksibiliti dalam menganalisis kebaikan & keburukan strategi kami dalam tempoh yang berbeza.
Lebih lanjut memperkayakan penanda aras, metrik dan visualisasi boleh mengubah ini menjadi alat yang sangat kuat untuk analisis strategi.
/*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)