So sánh trực quan giữa chiến lược và mua và nắm giữ


Ngày tạo: 2024-01-05 15:27:26 sửa đổi lần cuối: 2024-01-05 15:27:26
sao chép: 0 Số nhấp chuột: 653
1
tập trung vào
1617
Người theo dõi

So sánh trực quan giữa chiến lược và mua và nắm giữ

Tổng quan

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.

Nguyên tắc chiến lược

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ữ:

  1. Lợi nhuận ròng của chiến lược: tổng lợi nhuận ròng của chiến lược với lợi nhuận chưa thực hiện
  2. Mua và nắm giữ lợi nhuận ròng: Không đạt được lợi nhuận
  3. Giá trị chênh lệch: lợi nhuận ròng chiến lược - lợi nhuận ròng mua giữ
  4. Chiến lược VS mua và nắm giữ chỉ số thống kê
    • Chiến lược lợi nhuận ròng cao hơn so với tỷ lệ phần trăm Bar mua và nắm giữ
    • Chiến lược lợi nhuận ròng thấp hơn so với tỷ lệ phần trăm Bar mua và nắm giữ
    • Mức chênh lệch giữa chiến lược và giá trị sở hữu trung bình mua

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ữ.

Phân tích lợi thế chiến lược

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:

  1. 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ữ.

  2. 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.

  3. 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.

  4. Đơ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.

Phân tích rủi ro

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.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Tóm tắt

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.

Mã nguồn chiến lược
/*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)