Samsuga SuperTrend Chiến lược MACD

Tác giả:ChaoZhang, Ngày: 2024-03-11 11:24:20
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số SuperTrend và chỉ số MACD để nắm bắt các xu hướng nhỏ để kiếm lợi nhuận. Nó sử dụng chỉ số SuperTrend để xác định xu hướng thị trường hiện tại và chỉ số MACD như một điều kiện phụ trợ cho bước vào và bước ra.

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

  1. Sử dụng hàm ta.supertrend để tính toán chỉ số SuperTrend với các tham số cho thời gian ATR và nhân nhân.
  2. Xác định xu hướng dài / ngắn dựa trên những thay đổi trong hướng của chỉ số SuperTrend. Khi hướng thay đổi từ lớn hơn 0 đến nhỏ hơn hoặc bằng 0, nó được coi là xu hướng tăng; nếu không, nó được coi là xu hướng giảm.
  3. Sử dụng hàm request.security để lấy các giá trị chỉ số MACD trên khung thời gian 30 phút, bao gồm đường MACD, đường tín hiệu và biểu đồ.
  4. Trong xu hướng tăng, nếu biểu đồ MACD lớn hơn 0, mở một vị trí dài và đóng bất kỳ vị trí ngắn trước đó nào.
  5. Trong xu hướng giảm, nếu biểu đồ MACD nhỏ hơn 0, mở một vị trí ngắn và đóng bất kỳ vị trí dài trước đó nào.

Phân tích lợi thế

  1. Kết hợp các chỉ số theo xu hướng và động lực, cho phép nó thích nghi tốt với các điều kiện thị trường khác nhau.
  2. Sử dụng chỉ số MACD khung thời gian dài hơn như một điều kiện phụ trợ, có thể lọc hiệu quả một số tín hiệu sai.
  3. Logic chiến lược đơn giản và thẳng thắn, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu học.
  4. Các tham số chiến lược có thể điều chỉnh và có thể được tối ưu hóa cho các thị trường và công cụ khác nhau.

Phân tích rủi ro

  1. Chiến lược có thể tạo ra các tín hiệu giao dịch thường xuyên trong thị trường hỗn loạn, dẫn đến tần suất giao dịch cao và chi phí trượt.
  2. Chỉ số SuperTrend nhạy cảm với các thiết lập tham số và các giá trị tham số khác nhau có thể tạo ra kết quả khác nhau.
  3. Chỉ số MACD có thể gặp sự khác biệt với giá, dẫn đến tín hiệu giao dịch sai.
  4. Chiến lược này thiếu các biện pháp dừng lỗ, có thể khiến nó gặp rủi ro lớn hơn trong thời gian xu hướng tiếp tục yếu hoặc các sự kiện bất ngờ.

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

  1. Xem xét thêm các điều kiện lọc, chẳng hạn như giá vượt qua các mức hỗ trợ / kháng cự quan trọng, thay đổi khối lượng giao dịch, v.v., để cải thiện độ tin cậy tín hiệu.
  2. Đối với các thị trường hỗn loạn, hãy xem xét sử dụng chỉ số MACD khung thời gian ngắn hơn hoặc các chỉ số khác phù hợp với các thị trường giới hạn phạm vi để xác định xu hướng.
  3. Bao gồm các biện pháp dừng lỗ, chẳng hạn như dừng lỗ điểm cố định, dừng lỗ cuối cùng, vv, để kiểm soát rủi ro tối đa cho mỗi giao dịch.
  4. Tối ưu hóa các tham số cho các thị trường và công cụ khác nhau để tìm các kết hợp tham số phù hợp nhất.

Kết luận

Bằng cách kết hợp chỉ số SuperTrend và chỉ số MACD, chiến lược này nắm bắt các xu hướng nhỏ trong khi cũng xem xét tính liên tục của xu hướng, làm cho nó trở thành một chiến lược tương đối toàn diện và cân bằng. Sức mạnh của chiến lược nằm trong logic rõ ràng, dễ hiểu và thực hiện và sử dụng chỉ số MACD khung thời gian dài hơn như một điều kiện phụ để lọc hiệu quả các tín hiệu sai. Tuy nhiên, chiến lược cũng có một số rủi ro, chẳng hạn như tiềm năng giao dịch thường xuyên trong các thị trường hỗn loạn, nhạy cảm với cài đặt tham số và thiếu các biện pháp dừng lỗ. Để giải quyết những rủi ro này, có thể cải thiện bằng cách thêm nhiều điều kiện lọc, tối ưu hóa các tham số, kết hợp dừng lỗ, v.v. Nhìn chung, chiến lược này có thể phục vụ như một khuôn khổ chiến lược cơ bản mà, với tối ưu hóa và cải thiện liên tục, có tiềm năng trở thành một chiến lược có lợi nhuận nhất quán.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Samsuga supertrend", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


atrPeriod = input.int(7,    "ATR Length", minval = 1)
factor =    input.float(1.0, "Factor",     minval = 0.01, step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

supertrend := barstate.isfirst ? na : supertrend
upTrend =    plot(direction <= 0 ? supertrend : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend =  plot(direction <= 0 ? na : supertrend, "Down Trend", color = color.red,   style = plot.style_linebr)
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)
longcondition = direction[1] > direction 
shortCondition = direction[1] < direction 

macdp1 = 3
macdp2=10
macdp3=6

[macdLine, signalLine, histLine] =request.security(symbol = syminfo.tickerid, timeframe = "30",expression = ta.macd(close,macdp1,macdp2,macdp3),lookahead=barmerge.lookahead_on)
// plot(macdLine,   title = "MACD",   color = #2962FF)
// plot(signalLine, title = "Signal", color = #FF6D00)
// 8, 21, 5
// 8,13,9
// 12,26,9
//  1--> 3, 17, 5
// 3, 10, 16
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
//  /////////----------------METHOD 1-----------------////////////////
// if(longcondition)
//     if(strategy.opentrades>0)
//         strategy.close("Long","Prev Exit", immediately = true)
//     if( histLine[0] > 0.1)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long")

    
// else if(shortCondition and strategy.openprofit<=0.1) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 2-----------------////////////////
// if(longcondition)
//     if(histLine[0] > 0)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long" )
//         strategy.exit("Long", loss = close*0.2)


    
// else if(shortCondition ) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 3-----------------////////////////
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
if(longcondition)
    if(histLine[0] > 0)    
        strategy.close("Short",comment = "E-S", alert_message = "E-S",disable_alert = true)
        strategy.entry(id= "Long", direction=strategy.long,  comment = "L",alert_message = "L")
else if(shortCondition) 
    if(histLine[0] < 0)    
        strategy.close("Long",comment = "E-L",alert_message = "E-L",disable_alert = true)
        strategy.entry(id= "Short", direction=strategy.short,  comment = "S",alert_message = "S")

Thêm nữa