रणनीति और खरीद और पकड़ रिटर्न के बीच दृश्य तुलना

लेखक:चाओझांग, दिनांकः 2024-01-05 15:27:26
टैगः

img

अवलोकन

यह रणनीति किसी दी गई रणनीति और कारोबार की जाने वाली प्रतिभूति के खरीद और धारण रिटर्न के बीच एक विस्तृत और दृश्य तुलना करती है।

रणनीति तर्क

इस रणनीति का मूल तर्क दी गई रणनीति और खरीद और धारण रणनीति के बीच तुलना के लिए चार प्रमुख तत्वों को चित्रित करना हैः

  1. रणनीति पी/एलः रणनीति शुद्ध लाभ + रणनीति खुला लाभ
  2. खरीद और रखरखाव पी/एलः अव्यवस्थित रिटर्न
  3. अंतरः रणनीति पी/एल - खरीदें और रखें पी/एल
  4. रणनीति बनाम खरीदें स्टैट्स रखें
    • बार्स रणनीति का प्रतिशत P/L Buy & Hold से ऊपर है
    • बार्स रणनीति का प्रतिशत P/L Buy & Hold से नीचे है
    • सभी समय औसत अंतर

उपरोक्त चार तत्वों की तुलना करके, हम सहज ज्ञान युक्त समझ प्राप्त कर सकते हैं कि हमारी रणनीति एक साधारण खरीद और धारण रणनीति से बेहतर या खराब है।

लाभ विश्लेषण

इस रणनीति के निम्नलिखित फायदे हैं।

  1. अधिक व्यापक और विस्तृत तुलना मेट्रिक्स, जिसमें प्रति बार तुलना और समग्र सांख्यिकीय तुलना शामिल हैं, ताकि हम स्पष्ट रूप से जान सकें कि हमारी रणनीति कब और कहां खरीद और पकड़ में हारती है या हारती है।

  2. अंतर्ज्ञानी दृश्य चार्ट जो रणनीति पी / एल, खरीदें और रखो पी / एल और उनके बीच का अंतर प्लॉट करते हैं। यह हमें अपनी रणनीति के प्रदर्शन को तेजी से देखने की अनुमति देता है।

  3. अनुकूलन योग्य तुलना तिथि सीमा जहां हम विशिष्ट अवधियों पर अपनी रणनीति बनाम खरीद और पकड़ की तुलना करने पर ध्यान केंद्रित कर सकते हैं।

  4. सरल और उपयोग करने में आसान. तुलना तर्क अंतर्निहित है ताकि हमें केवल रणनीति स्क्रिप्ट अनुभाग को अपने स्वयं के साथ बदलने की आवश्यकता है. तुलना तर्क को स्वयं कोडिंग करने की आवश्यकता नहीं है.

जोखिम विश्लेषण

यह रणनीति मुख्य रूप से तुलना के लिए ट्रेडिंग प्लेटफॉर्म के अंतर्निहित खरीद और पकड़ रिटर्न मेट्रिक्स पर निर्भर करती है। उस बेंचमार्क के साथ कोई भी पूर्वाग्रह अंतिम परिणाम को प्रभावित करेगा। इसके अलावा, इस रणनीति की सांख्यिकीय गणना में त्रुटियां हो सकती हैं जो तुलना को सटीक रूप से प्रतिबिंबित करने में विफल रहती हैं।

आगे की सत्यापन के लिए अधिक बेंचमार्क और सांख्यिकीय विधियों को पेश किया जा सकता है। यदि ट्रेडिंग प्लेटफॉर्म buy & hold मीट्रिक में महत्वपूर्ण बदलाव लाता है, तो यहां तुलना तर्क को भी समायोजित करने की आवश्यकता है।

अनुकूलन दिशाएँ

इस रणनीति को निम्नलिखित पहलुओं से और अनुकूलित किया जा सकता हैः

  1. तीन या कई दिशाओं में तुलना के लिए अधिक बेंचमार्क पेश करें, उदाहरण के लिए एक सूचकांक या उद्योग के साथियों के साथ तुलना करें।

  2. अधिक आयामों से रणनीति का आकलन करने के लिए वार्षिक जीत दर, अधिकतम ड्रॉडाउन अवधि अंतर आदि जैसे अधिक सांख्यिकीय मीट्रिक शामिल करें।

  3. केवल दिनांक सीमा के बजाय उपयोगकर्ताओं द्वारा अनुकूलित करने योग्य बेंचमार्क, मीट्रिक आदि जैसे अधिक घटक बनाएं।

  4. चार्टिंग विज़ुअलाइज़ेशन में सुधार करें क्योंकि यहां सरल लाइन चार्ट्स से विशिष्ट बारों पर विस्तृत तुलनाओं को देखना मुश्किल हो जाता है। कॉलम ग्राफ या अतिरिक्त मार्किंग मदद कर सकती है।

निष्कर्ष

विस्तृत तुलना मेट्रिक्स और सहज दृश्य चार्ट के साथ, यह रणनीति हमें यह स्पष्ट रूप से देखने की अनुमति देती है कि हमारी कस्टम रणनीति एक साधारण खरीद और पकड़ दृष्टिकोण से कहां और कैसे भिन्न होती है। अनुकूलन योग्य दिनांक सीमा विभिन्न अवधियों में हमारी रणनीति के पेशेवरों और विपक्षों का विश्लेषण करने में लचीलापन भी प्रदान करती है।

बेंचमार्क, मेट्रिक्स और विज़ुअलाइज़ेशन को और समृद्ध करने से इसे रणनीति विश्लेषण के लिए एक बेहद शक्तिशाली टूलकिट में बदल दिया जा सकता है। यह रणनीति विश्लेषण और सुधारों को बहुत अधिक कुशल बनाने के लिए एक टेम्पलेट और ढांचा प्रदान करता है।


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



अधिक