এই কৌশলটি একটি নির্দিষ্ট কৌশল এবং ট্রেডেড সিকিউরিটির কিনুন এবং হোল্ড রিটার্নের মধ্যে একটি বিস্তারিত এবং চাক্ষুষ তুলনা করে।
এই কৌশলটির মূল যুক্তি হল যে এই কৌশল এবং ক্রয় ও ধরে রাখার কৌশলগুলির মধ্যে তুলনা করার জন্য চারটি মূল উপাদান রয়েছেঃ
উপরের চারটি উপাদান তুলনা করে, আমাদের কৌশলটি একটি সহজ কিনুন এবং ধরে রাখার কৌশলকে ছাড়িয়ে যায় বা কম করে কিনা তা আমরা স্বজ্ঞাতভাবে বুঝতে পারি।
ক্রয় ও হোল্ড রিটার্নের সহজ তুলনার তুলনায় এই কৌশলটির নিম্নলিখিত সুবিধাগুলি রয়েছেঃ
আরও বিস্তৃত এবং বিস্তারিত তুলনা পরিমাপ, বার প্রতি তুলনা এবং সামগ্রিক পরিসংখ্যানগত তুলনা সহ, যাতে আমরা স্পষ্টভাবে জানি কখন এবং কোথায় আমাদের কৌশলটি কিনতে বা হারাতে পারে।
স্বজ্ঞাত ভিজ্যুয়াল চার্ট যা কৌশল P / L, কিনুন & রাখা P / L এবং তাদের মধ্যে পার্থক্য প্লট। এটি আমাদের দ্রুত আমাদের কৌশল কর্মক্ষমতা বলতে ভিজ্যুয়াল অনুমতি দেয়।
কাস্টমাইজযোগ্য তুলনা তারিখের পরিসীমা যেখানে আমরা নির্দিষ্ট সময়কালের উপর আমাদের কৌশল বনাম কিনতে এবং রাখা তুলনা উপর ফোকাস করতে পারেন।
সহজ এবং ব্যবহার করা সহজ. তুলনা যুক্তি অন্তর্নির্মিত হয় যাতে আমরা শুধুমাত্র আমাদের নিজস্ব সঙ্গে কৌশল স্ক্রিপ্ট বিভাগ প্রতিস্থাপন করতে হবে. তুলনা যুক্তি কোড করার প্রয়োজন নেই.
এই কৌশলটি মূলত তুলনা করার জন্য ট্রেডিং প্ল্যাটফর্মের অন্তর্নির্মিত কিনুন এবং হোল্ড রিটার্ন মেট্রিকের উপর নির্ভর করে। এই বেঞ্চমার্কের সাথে কোনও পক্ষপাত চূড়ান্ত ফলাফলকে প্রভাবিত করবে। এছাড়াও, এই কৌশলটির পরিসংখ্যানগত গণনায় ত্রুটি থাকতে পারে যা তুলনাটি সঠিকভাবে প্রতিফলিত করতে ব্যর্থ হয়।
যদি ট্রেডিং প্ল্যাটফর্মটি কিনুন এবং হোল্ড মেট্রিকগুলিতে উল্লেখযোগ্য পরিবর্তনগুলি প্রবর্তন করে তবে এখানে তুলনা যুক্তিটিও সামঞ্জস্য করা দরকার।
এই কৌশল নিম্নলিখিত দিক থেকে আরও অপ্টিমাইজ করা যেতে পারেঃ
৩-মুখী বা বহু-মুখী তুলনার জন্য আরও বেশি বেঞ্চমার্ক প্রবর্তন করুন, উদাহরণস্বরূপ একটি সূচক বা শিল্পের সমকক্ষদের সাথে তুলনা করুন।
কৌশলটি আরও মাত্রা থেকে মূল্যায়নের জন্য বার্ষিক জয়ের হার, সর্বাধিক ড্রাউনডাউন সময়কালের পার্থক্য ইত্যাদির মতো আরও পরিসংখ্যানগত পরিমাপ অন্তর্ভুক্ত করুন।
শুধু তারিখের পরিসরের পরিবর্তে বেঞ্চমার্ক, মেট্রিক ইত্যাদির মতো আরও উপাদান ব্যবহারকারীদের দ্বারা কাস্টমাইজযোগ্য করুন।
চার্ট ভিজ্যুয়ালাইজেশন উন্নত করুন কারণ এখানে সহজ লাইন চার্টগুলি নির্দিষ্ট বারগুলিতে বিস্তারিত তুলনাগুলি সনাক্ত করা কঠিন করে তোলে। কলাম গ্রাফ বা অতিরিক্ত চিহ্নিতকরণ সাহায্য করতে পারে।
বিস্তারিত তুলনা মেট্রিক্স এবং স্বজ্ঞাত ভিজ্যুয়াল চার্টগুলির সাহায্যে, এই কৌশলটি আমাদের কাস্টম কৌশলটি একটি সহজ কিনুন এবং ধরে রাখার পদ্ধতির থেকে কোথায় এবং কীভাবে আলাদা তা সম্পর্কে আমাদের খুব স্পষ্ট দৃষ্টিভঙ্গি দিতে দেয়। কাস্টমাইজযোগ্য তারিখের পরিসীমাটি বিভিন্ন সময়ে আমাদের কৌশলটির সুবিধা এবং অসুবিধাগুলি বিশ্লেষণে নমনীয়তা সরবরাহ করে।
বেঞ্চমার্ক, মেট্রিক্স এবং ভিজ্যুয়ালাইজেশনকে আরও সমৃদ্ধ করে এটিকে কৌশল বিশ্লেষণের জন্য একটি অত্যন্ত শক্তিশালী টুলকিটে পরিণত করা যেতে পারে। এটি কৌশল বিশ্লেষণ এবং উন্নতিগুলিকে আরও দক্ষ করার জন্য একটি টেমপ্লেট এবং কাঠামো সরবরাহ করে।
/*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)