Chiến lược này thực hiện so sánh chi tiết và trực quan giữa một chiến lược nhất định và lợi nhuận mua & giữ của chứng khoán giao dịch.
Logic cốt lõi của chiến lược này là vẽ bốn yếu tố chính để so sánh giữa chiến lược nhất định và chiến lược mua & giữ:
Bằng cách so sánh bốn yếu tố trên, chúng ta có thể có một sự hiểu biết trực quan về việc liệu chiến lược của chúng tôi có hiệu suất tốt hơn hoặc kém hơn một chiến lược mua và giữ đơn giản.
So với so sánh đơn giản về lợi nhuận mua & giữ, chiến lược này có những lợi thế sau:
Các chỉ số so sánh toàn diện và chi tiết hơn, bao gồm so sánh theo thanh và so sánh thống kê tổng thể, để chúng ta biết rõ khi nào và nơi nào chiến lược của chúng tôi đánh bại hoặc thua để mua & giữ.
Biểu đồ trực quan trực quan mà biểu đồ chiến lược P / L, mua & giữ P / L và sự khác biệt giữa chúng. Nó cho phép chúng tôi trực quan nói về hiệu suất của chiến lược của chúng tôi nhanh hơn.
Phạm vi ngày so sánh tùy chỉnh nơi chúng tôi có thể tập trung vào so sánh chiến lược của chúng tôi với mua & giữ trên các khoảng thời gian cụ thể.
Đơn giản và dễ sử dụng. Logic so sánh được xây dựng để chúng ta chỉ cần thay thế phần kịch bản chiến lược bằng của riêng mình. Không cần phải tự lập trình logic so sánh.
Chiến lược này chủ yếu dựa trên các chỉ số mua và giữ lợi nhuận tích hợp của nền tảng giao dịch để so sánh. Bất kỳ sự thiên vị nào với chỉ số chuẩn đó sẽ ảnh hưởng đến kết quả cuối cùng. Ngoài ra, có thể có các lỗ hổng trong các tính toán thống kê của chiến lược này không phản ánh chính xác so sánh.
Nếu nền tảng giao dịch đưa ra những thay đổi đáng kể đối với số liệu mua & giữ, logic so sánh ở đây cũng cần phải được điều chỉnh.
Chiến lược này có thể được tối ưu hóa thêm từ các khía cạnh sau:
Đưa ra nhiều điểm chuẩn hơn cho so sánh 3 hoặc nhiều hướng, ví dụ so sánh với chỉ số hoặc các đối tác trong ngành.
Bao gồm nhiều số liệu thống kê hơn như tỷ lệ thắng hàng năm, sự khác biệt thời gian rút tiền tối đa vv để đánh giá chiến lược từ nhiều khía cạnh.
Làm cho nhiều thành phần như điểm chuẩn, số liệu, v.v. có thể tùy chỉnh bởi người dùng thay vì chỉ là phạm vi ngày.
Cải thiện hình ảnh biểu đồ vì biểu đồ đường đơn giản ở đây làm cho khó phát hiện so sánh chi tiết trên các thanh cụ thể.
Với các chỉ số so sánh chi tiết và biểu đồ trực quan trực quan, chiến lược này cho phép chúng tôi có một cái nhìn rất rõ ràng về nơi và cách chiến lược tùy chỉnh của chúng tôi khác với một cách tiếp cận mua và giữ đơn giản.
Tăng cường thêm các chỉ số, số liệu và hình ảnh có thể biến nó thành một bộ công cụ cực kỳ mạnh mẽ cho phân tích chiến lược. Nó cung cấp một mẫu và khung để làm cho phân tích chiến lược và cải tiến hiệu quả hơn nhiều.
/*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)