यह रणनीति किसी दी गई रणनीति और कारोबार की जाने वाली प्रतिभूति के खरीद और धारण रिटर्न के बीच एक विस्तृत और दृश्य तुलना करती है।
इस रणनीति का मूल तर्क दी गई रणनीति और खरीद और धारण रणनीति के बीच तुलना के लिए चार प्रमुख तत्वों को चित्रित करना हैः
उपरोक्त चार तत्वों की तुलना करके, हम सहज ज्ञान युक्त समझ प्राप्त कर सकते हैं कि हमारी रणनीति एक साधारण खरीद और धारण रणनीति से बेहतर या खराब है।
इस रणनीति के निम्नलिखित फायदे हैं।
अधिक व्यापक और विस्तृत तुलना मेट्रिक्स, जिसमें प्रति बार तुलना और समग्र सांख्यिकीय तुलना शामिल हैं, ताकि हम स्पष्ट रूप से जान सकें कि हमारी रणनीति कब और कहां खरीद और पकड़ में हारती है या हारती है।
अंतर्ज्ञानी दृश्य चार्ट जो रणनीति पी / एल, खरीदें और रखो पी / एल और उनके बीच का अंतर प्लॉट करते हैं। यह हमें अपनी रणनीति के प्रदर्शन को तेजी से देखने की अनुमति देता है।
अनुकूलन योग्य तुलना तिथि सीमा जहां हम विशिष्ट अवधियों पर अपनी रणनीति बनाम खरीद और पकड़ की तुलना करने पर ध्यान केंद्रित कर सकते हैं।
सरल और उपयोग करने में आसान. तुलना तर्क अंतर्निहित है ताकि हमें केवल रणनीति स्क्रिप्ट अनुभाग को अपने स्वयं के साथ बदलने की आवश्यकता है. तुलना तर्क को स्वयं कोडिंग करने की आवश्यकता नहीं है.
यह रणनीति मुख्य रूप से तुलना के लिए ट्रेडिंग प्लेटफॉर्म के अंतर्निहित खरीद और पकड़ रिटर्न मेट्रिक्स पर निर्भर करती है। उस बेंचमार्क के साथ कोई भी पूर्वाग्रह अंतिम परिणाम को प्रभावित करेगा। इसके अलावा, इस रणनीति की सांख्यिकीय गणना में त्रुटियां हो सकती हैं जो तुलना को सटीक रूप से प्रतिबिंबित करने में विफल रहती हैं।
आगे की सत्यापन के लिए अधिक बेंचमार्क और सांख्यिकीय विधियों को पेश किया जा सकता है। यदि ट्रेडिंग प्लेटफॉर्म buy & hold मीट्रिक में महत्वपूर्ण बदलाव लाता है, तो यहां तुलना तर्क को भी समायोजित करने की आवश्यकता है।
इस रणनीति को निम्नलिखित पहलुओं से और अनुकूलित किया जा सकता हैः
तीन या कई दिशाओं में तुलना के लिए अधिक बेंचमार्क पेश करें, उदाहरण के लिए एक सूचकांक या उद्योग के साथियों के साथ तुलना करें।
अधिक आयामों से रणनीति का आकलन करने के लिए वार्षिक जीत दर, अधिकतम ड्रॉडाउन अवधि अंतर आदि जैसे अधिक सांख्यिकीय मीट्रिक शामिल करें।
केवल दिनांक सीमा के बजाय उपयोगकर्ताओं द्वारा अनुकूलित करने योग्य बेंचमार्क, मीट्रिक आदि जैसे अधिक घटक बनाएं।
चार्टिंग विज़ुअलाइज़ेशन में सुधार करें क्योंकि यहां सरल लाइन चार्ट्स से विशिष्ट बारों पर विस्तृत तुलनाओं को देखना मुश्किल हो जाता है। कॉलम ग्राफ या अतिरिक्त मार्किंग मदद कर सकती है।
विस्तृत तुलना मेट्रिक्स और सहज दृश्य चार्ट के साथ, यह रणनीति हमें यह स्पष्ट रूप से देखने की अनुमति देती है कि हमारी कस्टम रणनीति एक साधारण खरीद और पकड़ दृष्टिकोण से कहां और कैसे भिन्न होती है। अनुकूलन योग्य दिनांक सीमा विभिन्न अवधियों में हमारी रणनीति के पेशेवरों और विपक्षों का विश्लेषण करने में लचीलापन भी प्रदान करती है।
बेंचमार्क, मेट्रिक्स और विज़ुअलाइज़ेशन को और समृद्ध करने से इसे रणनीति विश्लेषण के लिए एक बेहद शक्तिशाली टूलकिट में बदल दिया जा सकता है। यह रणनीति विश्लेषण और सुधारों को बहुत अधिक कुशल बनाने के लिए एक टेम्पलेट और ढांचा प्रदान करता है।
/*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)