Chiến lược giao dịch rủi ro được kiểm soát bởi MACD

Tác giả:ChaoZhang, Ngày: 2023-10-26
Tags:

img

Tổng quan

Chiến lược này thiết kế một chiến lược giao dịch dài hạn kiểm soát rủi ro của mỗi giao dịch dựa trên chỉ số MACD. So với các chiến lược lật ngắn dài truyền thống, chiến lược này tập trung nhiều hơn vào việc kiểm soát rủi ro của mỗi giao dịch. Bằng cách tính toán mức dừng lỗ hợp lý và lấy lợi nhuận và thiết lập kích thước vị trí thích hợp, nó hạn chế lỗ tối đa cho mỗi giao dịch. Điều này có thể kiểm soát hiệu quả các khoản rút và đạt được lợi nhuận ổn định trong dài hạn.

Nguyên tắc

Chiến lược này đầu tiên tính toán đường MACD và đường tín hiệu của chỉ số MACD. Khi đường MACD vượt qua trên đường tín hiệu, nó được xác định là tín hiệu mua. Để lọc ra các đột phá sai, chiến lược yêu cầu barsince ((crossover ((macd_line, signal_line)) <= 5, có nghĩa là sự đột phá xảy ra trong 5 thanh gần đây nhất. Nó cũng yêu cầu cả đường MACD và đường tín hiệu ở dưới 0, cho thấy điều kiện bán quá mức và đóng ở trên đường WMA, cho thấy xu hướng tăng. Khi các điều kiện trên được đáp ứng, một vị trí dài được mở.

Đối với mỗi giao dịch, chiến lược tính toán mức stop loss và take profit hợp lý. Stop loss được đặt ở mức thấp nhất trong 3 thanh gần đây nhất. Take profit được đặt ở mức giá nhập cộng 4 lần khoảng cách giữa stop loss và giá nhập.

Điều quan trọng là chiến lược tính toán kích thước vị trí cụ thể dựa trên rủi ro tối đa có thể chấp nhận được. Các tham số capital_risk thiết lập tỷ lệ phần trăm tổng vốn có thể bị mất cho mỗi giao dịch. Kích thước vị trí bằng USD sau đó được tính dựa trên phạm vi dừng lỗ. Sau đó được chuyển đổi thành các hợp đồng để thực hiện.

Rủi ro của mỗi giao dịch được kiểm soát trong phạm vi 1% tổng vốn, có thể kiểm soát hiệu quả việc rút vốn.

Ưu điểm

  • Kiểm soát rủi ro là ưu tiên, rủi ro cho mỗi giao dịch có thể kiểm soát được
  • Kích thước vị trí được tối ưu hóa để tối đa hóa việc sử dụng vốn
  • Chiến lược dừng lỗ có hiệu quả kiểm soát rút tiền
  • Lợi nhuận hợp lý cho phép tiềm năng lợi nhuận cao

Rủi ro và cải tiến

  • MACD có sự chậm trễ, có thể bỏ lỡ những thay đổi xu hướng nhanh
  • Các thiết lập dừng lỗ hoặc lấy lợi nhuận không đúng có thể làm giảm lợi nhuận hoặc tăng rủi ro
  • Tần suất giao dịch cao có thể làm tăng chi phí giao dịch

Những cải tiến có thể:

  • Kết hợp các chỉ số khác để xác định xu hướng, tránh sự chậm trễ của MACD
  • Tối ưu hóa các thuật toán dừng lỗ và lấy lợi nhuận để linh hoạt hơn
  • Nới lỏng tần suất giao dịch để giảm chi phí giao dịch

Tóm lại

Chiến lược này xác định hướng xu hướng bằng cách sử dụng MACD, và kiểm soát rủi ro là ưu tiên để giao dịch với kích thước vị trí tối ưu. Các chìa khóa là kiểm soát rủi ro và kích thước vị trí, có thể đạt được lợi nhuận ổn định trong dài hạn. Nhưng MACD có một số lỗ hổng, và các cơ chế dừng lỗ / lấy lợi nhuận cần tối ưu hóa hơn nữa. Tăng cường sử dụng chỉ số, cài đặt dừng lỗ / lấy lợi nhuận và giảm tần suất giao dịch có thể làm cho chiến lược thậm chí mạnh mẽ hơn.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD )

capital_risk    = input( 1.0, "% capital risk per trade" ) / 100
r_exit          = input( 4.0, "Take Profit in 'R'" )
wma_length      = input( 150, 'WMA Bias Length' )

[macd_line, signal_line, hist ] = macd(close, 12, 26, 9)

w_line = wma( close, wma_length )

golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0

float stop = na
float tp = na

// For a stop, use a recent low 
stop := golong ? lowest(low, 3)[1] : stop[1]
range = abs(close - stop)
tp := golong ? close + (r_exit * range) : tp[1]


// This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity`
how_much_willing_to_lose = strategy.equity * capital_risk
// Spread the risk across the stop range 
position_size_in_usd = how_much_willing_to_lose / (range / close)
// Sized specified in base contract
position_size_in_contracts = position_size_in_usd / close

// Enter the position
if golong
    strategy.entry("long", strategy.long, qty=position_size_in_contracts)
    strategy.exit("long exit","long", stop=stop, limit=tp)

// experimental exit strategy
// hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' )
// if hist < 0 and hist_strength == 'strong' and falling( hist, 8 )
//     strategy.close("long")


plot( strategy.equity,  color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )

Thêm nữa