Tài nguyên đang được tải lên... tải...

Chiến lược hội tụ MACD với R: R, giới hạn hàng ngày và dừng lỗ chặt chẽ hơn

Tác giả:ChaoZhang, Ngày: 2024-06-03 16:47:56
Tags:MACD

img

Tổng quan

Chiến lược này sử dụng sự hội tụ và phân kỳ của chỉ số MACD để tạo ra tín hiệu giao dịch. Khi đường MACD vượt qua đường tín hiệu, và giá trị của đường MACD lớn hơn 1,5 hoặc nhỏ hơn -1,5, nó tạo ra tín hiệu dài và ngắn, tương ứng. Chiến lược đặt mức lợi nhuận và dừng lỗ cố định và giới thiệu khái niệm tỷ lệ rủi ro-lợi nhuận (R: R). Ngoài ra, nó sử dụng mức lỗ tối đa hàng ngày và giới hạn lợi nhuận và mức dừng lỗ chặt chẽ hơn để kiểm soát tốt hơn rủi ro.

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

  1. Tính toán đường MACD và đường tín hiệu của chỉ số MACD.
  2. Xác định các tình huống chéo giữa đường MACD và đường tín hiệu, đồng thời xem xét xem giá trị đường MACD có vượt quá các ngưỡng nhất định (1.5 và -1.5) hay không.
  3. Khi một tín hiệu mua xuất hiện, mở một vị trí mua với giá kiếm lợi nhuận của giá cao nhất hiện tại + 600 đơn vị tick tối thiểu và giá dừng lỗ của giá thấp nhất hiện tại - 100 đơn vị tick tối thiểu.
  4. Khi một tín hiệu ngắn xuất hiện, mở một vị trí ngắn với giá lấy lợi nhuận của giá thấp nhất hiện tại - 600 đơn vị tick tối thiểu và giá dừng lỗ của giá cao nhất hiện tại + 100 đơn vị tick tối thiểu.
  5. Thiết lập logic dừng lỗ sau: khi giá tăng (vị trí dài) hoặc giảm (vị trí ngắn) hơn 300 đơn vị tick tối thiểu so với giá nhập cảnh, di chuyển giá dừng lỗ đến giá nhập cảnh + (giá đóng - giá nhập cảnh - 300) cho các vị trí dài hoặc giá nhập cảnh - (giá nhập cảnh - giá đóng - 300) cho các vị trí ngắn.
  6. Đặt giới hạn lỗ tối đa hàng ngày và lợi nhuận: khi lỗ hàng ngày đạt 600 đơn vị tick tối thiểu hoặc lợi nhuận đạt 1800 đơn vị tick tối thiểu, đóng tất cả các vị trí.

Phân tích lợi thế

  1. Kết hợp chỉ số MACD với điều kiện ngưỡng giá có hiệu quả lọc ra một số tín hiệu tiếng ồn.
  2. Tỷ lệ rủi ro-lợi nhuận cố định (R: R) làm cho rủi ro và lợi nhuận của mỗi giao dịch có thể kiểm soát được.
  3. Logic dừng lỗ sau bảo vệ lợi nhuận sau khi hình thành xu hướng và giảm giảm.
  4. Giới hạn lỗ tối đa hàng ngày và lợi nhuận giúp kiểm soát rủi ro hàng ngày và tránh tổn thất hoặc lợi nhuận quá mức theo sau là rút tiền.

Phân tích rủi ro

  1. Chỉ số MACD có hiệu ứng chậm trễ, có thể dẫn đến tín hiệu bị trì hoãn hoặc sai.
  2. Mức thu lợi nhuận cố định và mức dừng lỗ có thể không thích nghi với các điều kiện thị trường khác nhau và có thể thường xuyên được kích hoạt trong các thị trường hỗn loạn.
  3. Logic dừng lỗ sau có thể không thể ngăn chặn thua lỗ trong thời gian đảo ngược xu hướng, dẫn đến lợi nhuận.
  4. Mức lỗ tối đa hàng ngày và giới hạn lợi nhuận có thể khiến chiến lược đóng các vị trí sớm khi xu hướng hàng ngày rõ ràng, bỏ lỡ lợi nhuận tiềm năng.

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

  1. Xem xét sử dụng các chỉ số MACD nhiều khung thời gian để xác nhận tín hiệu và cải thiện độ chính xác tín hiệu.
  2. Điều chỉnh năng động mức lợi nhuận và dừng lỗ dựa trên biến động thị trường để thích nghi với các điều kiện thị trường khác nhau.
  3. Tối ưu hóa logic dừng lỗ cuối cùng, chẳng hạn như thiết lập khoảng cách dừng lỗ cuối cùng dựa trên chỉ số ATR để thích nghi tốt hơn với biến động giá.
  4. Tối ưu hóa các thông số của giới hạn lỗ tối đa hàng ngày và lợi nhuận để tìm ra các giá trị giới hạn thích hợp kiểm soát rủi ro trong khi nắm bắt các biến động xu hướng càng nhiều càng tốt.

Tóm lại

Chiến lược này sử dụng sự hội tụ và chênh lệch của chỉ số MACD để tạo ra tín hiệu giao dịch trong khi giới thiệu các biện pháp kiểm soát rủi ro như tỷ lệ rủi ro-lợi nhuận, dừng lỗ và giới hạn hàng ngày. Mặc dù chiến lược có thể nắm bắt các chuyển động xu hướng và kiểm soát rủi ro ở một mức độ nào đó, vẫn còn chỗ cho tối ưu hóa và cải thiện. Trong tương lai, tối ưu hóa có thể được xem xét từ các khía cạnh như xác nhận tín hiệu, mức lợi nhuận và dừng lỗ, dừng lỗ và giới hạn hàng ngày để có được lợi nhuận mạnh mẽ hơn và đáng kể.


/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DD173838

//@version=5
strategy("MACD Convergence Strategy with R:R, Daily Limits, and Tighter Stop Loss", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// MACD settings
fastLength = input.int(12, title="Fast Length", minval=1)
slowLength = input.int(26, title="Slow Length", minval=1)
signalSmoothing = input.int(9, title="Signal Smoothing", minval=1)
source = input(close, title="Source")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)

// Plot MACD and signal line
plot(macdLine, title="MACD Line", color=color.blue)
plot(signalLine, title="Signal Line", color=color.red)

// Define convergence conditions
macdConvergenceUp = ta.crossover(macdLine, signalLine) and macdLine > 1.5
macdConvergenceDown = ta.crossunder(macdLine, signalLine) and macdLine < -1.5

// Define take profit and stop loss

        
    
takeProfit = 600
stopLoss = 100

// Plot buy and sell signals on the chart
plotshape(series=macdConvergenceDown, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")
plotshape(series=macdConvergenceUp, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")

// Execute short and long orders with defined take profit and stop loss
if (macdConvergenceDown)
    strategy.entry("Short", strategy.short, qty=1, stop=high + (stopLoss / syminfo.mintick), limit=low - (takeProfit / syminfo.mintick))

if (macdConvergenceUp)
    strategy.entry("Long", strategy.long, qty=1, stop=low - (stopLoss / syminfo.mintick), limit=high + (takeProfit / syminfo.mintick))

// Trailing stop logic
var float entryPrice = na
var float trailingStopPrice = na

if (strategy.position_size != 0)
    entryPrice := strategy.opentrades.entry_price(0)

if (strategy.position_size > 0)  // For long positions
    if (close - entryPrice > 300)
        trailingStopPrice := entryPrice + (close - entryPrice - 300)

if (strategy.position_size < 0)  // For short positions
    if (entryPrice - close > 300)
        trailingStopPrice := entryPrice - (entryPrice - close - 300)

if (strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice)
    strategy.close("Long", comment="Trailing Stop")

if (strategy.position_size < 0 and not na(trailingStopPrice) and close > trailingStopPrice)
    strategy.close("Short", comment="Trailing Stop")

// Daily drawdown and profit limits
var float startOfDayEquity = na
if (na(startOfDayEquity) or ta.change(time('D')) != 0)
    startOfDayEquity := strategy.equity

maxDailyLoss = 600
maxDailyProfit = 1800
currentDailyPL = strategy.equity - startOfDayEquity

if (currentDailyPL <= -maxDailyLoss)
    strategy.close_all(comment="Max Daily Loss Reached")

if (currentDailyPL >= maxDailyProfit)
    strategy.close_all(comment="Max Daily Profit Reached")


Có liên quan

Thêm nữa