Chiến lược giao dịch đảo ngược trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2023-11-10 11:18:38
Tags:

img

Tổng quan

Chiến lược này được thiết kế dựa trên chéo vàng và chéo chết của trung bình di chuyển nhanh và chậm. Khi MA nhanh vượt qua trên MA chậm, đi dài. Khi MA nhanh vượt dưới MA chậm, đi ngắn. Chiến lược này phù hợp với giao dịch trung hạn đến dài hạn và có thể nắm bắt sự đảo ngược xu hướng trên thị trường.

Chiến lược logic

Chiến lược này sử dụng đường trung bình động theo cấp số nhân (EMA) để tính toán đường nhanh và đường chậm. Độ dài MA nhanh là 10 giai đoạn và chiều dài MA chậm là 30 giai đoạn. Chiến lược đầu tiên tính toán đường EMA nhanh và đường EMA chậm, sau đó vẽ các đường và hiển thị nền màu khác nhau để chỉ hướng xu hướng.

Khi đóng cửa ngày hôm nay nằm trên MA nhanh và MA nhanh nằm trên MA chậm, nền màu xanh lá cây, cho thấy xu hướng tăng. Khi đóng cửa ngày hôm nay nằm dưới MA nhanh và MA nhanh nằm dưới MA chậm, nền màu đỏ, cho thấy xu hướng giảm.

Trong một xu hướng tăng, nếu có một ngọn nến màu đỏ (khép dưới mở) và hôm qua cũng là một ngọn nến màu đỏ, đi dài. Đặt dừng lỗ ở 300 điểm và lấy lợi nhuận bằng cách đóng vị trí ngắn.

Trong xu hướng giảm, nếu có một ngọn nến màu xanh lá cây (khép trên mở) và hôm qua cũng là một ngọn nến màu xanh lá cây, đi ngắn.

Sau khi mở một vị trí theo mỗi hướng, nếu thời gian giữ vượt quá 1008000000 mili giây (khoảng 2 tuần), buộc phải đóng vị trí để ngăn chặn bế tắc.

Phân tích lợi thế

  • Hệ thống EMA kép có thể lọc hiệu quả tiếng ồn thị trường và xác định các điểm đảo ngược xu hướng
  • MAs nhanh và chậm kết hợp với màu nến cung cấp tín hiệu nhập cảnh đáng tin cậy
  • Chiến lược dừng lỗ và lấy lợi nhuận giảm lỗ cho các giao dịch cá nhân
  • Cơ chế đóng chặt vị trí bị ép tránh thiệt hại lớn từ ngõ cụt

Phân tích rủi ro

  • Hệ thống EMA ít nhạy cảm với giá tăng, có thể bỏ lỡ một số cơ hội giao dịch
  • Cài đặt tham số MA nhanh và chậm không chính xác có thể gây ra tín hiệu sai
  • Điểm dừng lỗ quá chật sẽ làm tăng nguy cơ thanh lý.
  • Việc thiết lập thời gian đóng bắt buộc không đúng có thể dẫn đến thoát sớm hoặc giữ quá lâu

Hướng dẫn tối ưu hóa

  • Kiểm tra lợi nhuận của các hệ thống EMA dưới các tham số khác nhau để tối ưu hóa chiều dài MA nhanh và chậm
  • Xem xét thêm các chỉ số khác như MACD để xác nhận để cải thiện độ chính xác tín hiệu
  • Liên kết stop loss với thay đổi khối lượng hàng ngày
  • Điều chỉnh năng động thời gian đóng cửa bắt buộc dựa trên biến động thị trường

Kết luận

Nhìn chung, chiến lược này khá cân bằng, sử dụng EMA kép cho xu hướng và các bộ lọc nến với các quy tắc bổ sung để tránh tín hiệu sai. Nhưng các thông số EMA và các quy tắc dừng lỗ / lợi nhuận cần tối ưu hóa hơn nữa.


/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © yeainshukla

//@version=5


strategy('BuyRedSellGreen4H', overlay = true)
greenCandle = close > open
redCandle = open > close

start  = timestamp(2023,9,18,0,00)
end = timestamp(2023,12,31,0,00)


fastLength = input.int(10, title="Fast Average Length")
slowLength = input.int(30, title="Slow Average Length")

averageData = input.source(close, title="Average Data Source")

// Calculate exponential moving averages
fastAverage = ta.ema(averageData, fastLength)
slowAverage = ta.ema(averageData, slowLength)

// Plot averages
plot(fastAverage, color=color.navy, title="Fast EMA")
plot(slowAverage, color=color.fuchsia, linewidth=2, title="Slow EMA")

// Show the moving average trend with a coloured background
backgroundColor = if close > fastAverage and fastAverage > slowAverage
    color.new(color.green, 85)
else if close < fastAverage and fastAverage < slowAverage
    color.new(color.red, 85)
else
    color.new(color.orange, 90)

bgcolor(backgroundColor, title="EMA Background")


if time >= start and time < end
    if(close < open) 
        if(close[1] < open[1])
            strategy.entry("Enter Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Enter Long")
            strategy.close("Enter Short")

    else
        if(close[1] > open[1])
            strategy.entry("Enter Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Enter Short")
            strategy.close("Enter Long")
    if strategy.position_size < 0 or strategy.position_size > 0// short and long is opened.
        if((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) > 1008000000)
            strategy.close("Enter Short")
            strategy.close("Enter Long")

Thêm nữa