
Chiến lược này sử dụng các chỉ số và biểu đồ chi tiết để so sánh trực quan chiến lược và lợi nhuận mua và nắm giữ của chứng khoán giao dịch.
Lập luận cốt lõi của chiến lược này là vẽ ra bốn yếu tố quan trọng để so sánh sự khác biệt giữa một chiến lược nhất định và một chiến lược mua và giữ:
Bằng cách so sánh bốn yếu tố trên, bạn có thể hiểu rõ ràng và trực quan về ưu và nhược điểm giữa chiến lược và đơn giản là mua và nắm giữ.
Chiến lược này có một số ưu điểm so với so sánh thu nhập mua và giữ đơn giản:
Các chỉ số so sánh toàn diện và chi tiết hơn. Bao gồm so sánh trên mỗi đường K, so sánh với các số liệu thống kê tổng thể, để chúng ta có thể biết rõ hơn về nơi chiến lược thắng hoặc thua mua giữ.
Biểu đồ so sánh trực quan. Bằng cách vẽ biểu đồ lợi nhuận ròng của chiến lược, mua giữ lợi nhuận ròng và giá trị chênh lệch của cả hai, chúng ta có thể đánh giá nhanh hơn về hiệu suất của chiến lược bằng hình ảnh.
Khoảng thời gian so sánh có thể tùy chỉnh. Chúng ta có thể chọn chỉ tập trung vào so sánh chiến lược với mua và giữ trong một khoảng thời gian nhất định để phân tích tốt hơn về hiệu suất của chiến lược.
Đơn giản và dễ sử dụng. Chính sách này có logic so sánh hoàn chỉnh, chúng ta chỉ cần thay thế mã chính sách của mình để có vị trí tương ứng trong mẫu. Không cần tự viết logic so sánh.
Chiến lược này chủ yếu dựa vào các chỉ số mua và nắm giữ thu nhập trong nền tảng giao dịch để so sánh. Nếu chỉ số tích hợp có sai lệch, nó sẽ ảnh hưởng đến kết quả so sánh cuối cùng. Ngoài ra, phương pháp tính toán các chỉ số thống kê trong chiến lược có thể bị lỗi và không thể so sánh chính xác 100% giữa chiến lược và mua và nắm giữ.
Có thể xác minh hơn về hiệu suất của chiến lược bằng cách so sánh với nhiều chuẩn hơn, đưa ra nhiều phương pháp thống kê hơn. Nếu các chỉ số thu nhập mua và giữ sau khi nâng cấp nền tảng giao dịch tạo ra sự lệch lạc lớn, thì cũng cần điều chỉnh logic so sánh trong chiến lược.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Thêm nhiều tiêu chuẩn để so sánh ba bên hoặc nhiều bên. Ví dụ, so sánh có thể được thêm vào chỉ số đối tác hoặc chỉ số ngành.
Thêm thêm các chỉ số thống kê. Ví dụ như tỷ lệ thắng hàng năm, hàng quý, chênh lệch thời gian rút tối đa, v.v. Cho phép chúng ta hiểu chiến lược từ nhiều chiều hơn.
Thêm cấu hình tham số. Cho phép người dùng tùy chỉnh các nội dung khác ngoài khoảng thời gian so sánh, chẳng hạn như so sánh chuẩn, số liệu thống kê, v.v.
Hiển thị biểu đồ tối ưu. Hiện tại, hiển thị biểu đồ đường đơn giản có thể khó so sánh chính sách với mua giữ tại các thời điểm cụ thể. Bạn có thể cân nhắc vẽ biểu đồ cột hoặc thêm dấu hiệu để tăng khả năng đọc.
Chiến lược này cho phép chúng ta hiểu rõ sự khác biệt giữa chiến lược tùy chỉnh và chiến lược mua và giữ đơn giản bằng cách thiết kế nhiều chỉ số so sánh chi tiết và hiển thị biểu đồ trực quan, giúp chúng ta cải thiện hiệu suất của chiến lược tốt hơn. Khoảng thời gian so sánh có thể tùy chỉnh của nó cũng cho phép chúng ta phân tích linh hoạt các ưu điểm của chiến lược ở các giai đoạn khác nhau.
Nếu tiếp tục làm giàu so sánh chuẩn, số liệu thống kê và biểu đồ, chiến lược này có thể trở thành một công cụ phân tích chiến lược cực kỳ mạnh mẽ. Nó cung cấp cho chúng tôi một mẫu và khung làm cho công việc phân tích và cải thiện chiến lược trở nên hiệu quả hơn.
/*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)