Chiến lược dừng lỗ dựa trên chỉ báo MACD


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

Chiến lược dừng lỗ dựa trên chỉ báo MACD

Tổng quan

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

Nguyên tắc

Chiến lược này bắt đầu bằng cách tính toán đường MACD và đường tín hiệu của MACD. Khi đường MACD phá vỡ đường tín hiệu từ dưới lên, nó được coi là một tín hiệu mua. Để lọc các đột phá giả, chiến lược yêu cầu barssince ((crossover ((macd_line, signal_line)) <= 5, tức là đột phá xảy ra trong 5 đường K gần nhất.

Đối với mỗi giao dịch, chiến lược tính toán giá dừng và giá dừng hợp lý. Giá dừng được thiết lập là giá thấp nhất trong 3 đường K gần nhất. Giá dừng được thiết lập là giá mua cộng với giá dừng gấp 4 lần khoảng cách từ giá mua.

Điều quan trọng là chiến lược tính toán vị trí cụ thể cho mỗi giao dịch dựa trên rủi ro chấp nhận được. Bằng tham số capital_risk, thiết lập mức tổn thất chấp nhận được tối đa cho mỗi giao dịch là phần trăm của tổng số vốn. Sau đó, tính toán kích thước vị trí bằng đô la dựa trên mức dừng lỗ. Sau đó chuyển thành số hợp đồng để mua và mở vị trí.

Mỗi lần giao dịch, rủi ro được kiểm soát trong khoảng 1% tổng số vốn, có thể kiểm soát hiệu quả việc rút lui. Đồng thời, vị trí dừng lớn hơn, có thể thu được lợi nhuận cao hơn.

Ưu điểm

  • Kiểm soát rủi ro trước, kiểm soát rủi ro cho mỗi giao dịch
  • Tối ưu hóa quy mô vị trí, tận dụng tối đa vốn
  • Chiến lược dừng lỗ có thể kiểm soát hiệu quả rút lui
  • Tiết kiệm chi phí, có tiềm năng lợi nhuận cao

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

  • Chỉ số MACD bị tụt hậu, có thể bỏ lỡ xu hướng thay đổi nhanh chóng
  • Định vị dừng lỗ hoặc dừng lại không đúng cách có thể làm giảm lợi nhuận hoặc mở rộng rủi ro
  • Tỷ lệ giao dịch có thể quá cao, chi phí giao dịch tăng lên

Bạn có thể xem xét:

  • Kết hợp các chỉ số khác để đánh giá xu hướng, tránh sự chậm trễ của MACD
  • Tối ưu hóa các thuật toán Stop Loss Stop Loss và làm cho nó linh hoạt hơn
  • Tăng cường hoạt động giao dịch và giảm chi phí giao dịch

Tóm tắt

Chiến lược này dựa trên chỉ số MACD để xác định hướng xu hướng, kiểm soát rủi ro hàng đầu, tính toán vị trí hợp lý để giao dịch. Điều quan trọng là kiểm soát rủi ro và tối ưu hóa vị trí, có thể thu được lợi nhuận ổn định lâu dài. Tuy nhiên, chỉ số MACD có một số sai sót, và cơ chế dừng lỗ cũng cần được tối ưu hóa hơn nữa. Nếu tối ưu hóa hơn nữa việc sử dụng chỉ số, thiết lập dừng lỗ và giảm tần suất giao dịch, chiến lược sẽ được tăng cường hơn.

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