Chiến lược theo dõi xu hướng động lượng trung bình động nhiều lần

SMA RSI MA
Ngày tạo: 2024-11-12 15:05:09 sửa đổi lần cuối: 2024-11-12 15:05:09
sao chép: 0 Số nhấp chuột: 476
1
tập trung vào
1617
Người theo dõi

Chiến lược theo dõi xu hướng động lượng trung bình động nhiều lần

Tổng quan

Chiến lược này là một hệ thống giao dịch theo dõi xu hướng dựa trên nhiều đường trung bình và các chỉ số động. Chiến lược chủ yếu sử dụng các mối quan hệ động của đường trung bình di chuyển đơn giản (SMA) 20, 50, 150 và 200 ngày, kết hợp giao dịch và chỉ số RSI, để nắm bắt xu hướng tăng mạnh ở cấp độ đường hằng ngày và đồng thời bình thường hóa khi xu hướng yếu đi.

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

Lập luận cốt lõi của chiến lược bao gồm các phần quan trọng sau:

  1. Hệ thống đường trung bình: Sử dụng đường trung bình 20/50/150/200 để xây dựng hệ thống đánh giá xu hướng, yêu cầu nhiều đường trung bình hiển thị nhiều đầu.
  2. Xác định động lực: Sử dụng chỉ số RSI và đường trung bình di chuyển của nó để xác định động lực giá, yêu cầu RSI lớn hơn 55 hoặc RSI SMA lớn hơn 50 và RSI tăng lên.
  3. Xác nhận khối lượng giao dịch: Xác nhận hiệu quả của tín hiệu mua bán bằng cách so sánh khối lượng giao dịch trung bình 20 ngày với khối lượng giao dịch gần đây.
  4. Xác minh xu hướng liên tục: Kiểm tra đường trung bình 50 ngày đã duy trì xu hướng tăng trong ít nhất 25 trong số 40 ngày giao dịch qua.
  5. Xác định vị trí: Giá cần đứng vững trên đường trung bình 150 ngày trong ít nhất 20 ngày giao dịch.

Điều kiện mua hàng:

  • Hơn 4 trong số 10 ngày gần đây là ngày nắng và ít nhất 1 ngày cho phép
  • Chỉ số RSI đáp ứng điều kiện động lượng
  • Hệ thống đường trung bình có nhiều đầu và liên tục tăng lên
  • Giá ổn định trên đường trung bình 150 ngày

Điều kiện bán bao gồm:

  • Giá đã giảm xuống 150 ngày.
  • Sự sụt giảm liên tục
  • Đường trung bình 50 ngày giảm xuống 150 ngày
  • Gần đây, số lượng giao dịch tăng lên và chủ yếu là âm đạo.

Lợi thế chiến lược

  1. Xác thực chéo nhiều chỉ số kỹ thuật, giảm tỷ lệ phán đoán sai
  2. Yêu cầu duy trì xu hướng nghiêm ngặt, có thể lọc biến động ngắn hạn
  3. Kết hợp phân tích khối lượng giao thông để tăng độ tin cậy tín hiệu
  4. Điều kiện dừng lỗ rõ ràng, kiểm soát rủi ro hiệu quả
  5. Phương pháp này có thể được sử dụng để nắm bắt các xu hướng trung và dài hạn và giảm tần suất giao dịch.
  6. Logic chiến lược rõ ràng, dễ hiểu và dễ thực hiện

Rủi ro chiến lược

  1. Hệ thống đường trung bình có tính chậm trễ, có thể bỏ lỡ giai đoạn đầu của xu hướng
  2. Điều kiện nhập cảnh nghiêm ngặt có thể khiến bạn bỏ lỡ một số cơ hội giao dịch
  3. Tín hiệu sai thường xuyên có thể xảy ra trong thị trường biến động
  4. Có một sự chậm trễ trong việc nhận ra sự thay đổi của thị trường
  5. Cần một quy mô lớn hơn để chịu đựng sự rút lui

Đề xuất kiểm soát rủi ro:

  • Đặt điểm dừng hợp lý
  • Quản lý tài chính một cách thận trọng
  • Xem xét tăng các chỉ số xác nhận xu hướng
  • Điều chỉnh tham số theo môi trường thị trường

Hướng tối ưu hóa chiến lược

  1. Thêm tham số thích ứng
  • Chu kỳ đường trung bình được điều chỉnh theo biến động của thị trường
  • Tối ưu hóa thiết lập RSI
  1. Cải thiện hệ thống ngăn chặn thiệt hại
  • Thêm tracking stop loss
  • Thiết lập thời gian dừng
  1. Tham gia phân tích môi trường thị trường
  • Tăng chỉ số cường độ xu hướng
  • Xem xét các chỉ số biến động
  1. Tối ưu hóa quy mô giao dịch
  • Thiết kế quản lý vị thế động
  • Điều chỉnh theo cường độ tín hiệu

Tóm tắt

Đây là một chiến lược theo dõi xu hướng nghiêm ngặt được thiết kế, có thể nắm bắt hiệu quả các cơ hội xu hướng mạnh mẽ thông qua việc sử dụng nhiều chỉ số kỹ thuật. Ưu điểm chính của chiến lược là cơ chế xác nhận tín hiệu hoàn chỉnh và hệ thống kiểm soát rủi ro nghiêm ngặt. Mặc dù có một số chậm trễ, nhưng thông qua tối ưu hóa tham số và quản lý rủi ro hợp lý, chiến lược này có thể duy trì hiệu suất ổn định trong hoạt động lâu dài.

Mã nguồn chiến lược
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Micho's 150 (1D Time Frame Only)", overlay=true)

// Define the length for the SMAs and RSI
sma20Length = 20
sma50Length = 50
sma150Length = 150
sma200Length = 200
volumeMaLength = 20
rsiLength = 14
rsiSmaLength = 14
smaCheckLength = 40  // Check the last month of trading days (~20 days)
requiredRisingDays = 25  // Require SMA to rise in at least 16 of the past 20 days
sma150AboveSma200CheckDays = 1  // Require SMA150 > SMA200 for the last 10 days

// Calculate the SMAs for price
sma20 = ta.sma(close, sma20Length)
sma50 = ta.sma(close, sma50Length)
sma150 = ta.sma(close, sma150Length)
sma200 = ta.sma(close, sma200Length)

// Calculate the 20-period moving average of volume
volumeMA20 = ta.sma(volume, volumeMaLength)

// Calculate the 14-period RSI
rsi = ta.rsi(close, rsiLength)

// Calculate the 14-period SMA of RSI
rsiSMA = ta.sma(rsi, rsiSmaLength)

// Check if most of the last 5 days are buyer days (close > open)
buyerDays = 0
for i = 0 to 9
    if close[i] > open[i]
        buyerDays := buyerDays + 1

// Check if at least 1 day has volume higher than the 20-period volume MA
highVolumeDays = 0
for i = 0 to 9
    if close[i] > open[i] and volume[i] > volumeMA20
        highVolumeDays := highVolumeDays + 1

// Define the new RSI condition
rsiCondition = (rsi >= 55) or (rsiSMA > 50 and rsi > rsi[1])

// Check if the 50-day SMA has been rising on at least 16 of the last 20 trading days
risingDays = 0
for i = 1 to smaCheckLength
    if sma50[i] > sma50[i + 1]
        risingDays := risingDays + 1

// Check if the SMA has risen on at least 16 of the last 20 days
sma50Rising = risingDays >= requiredRisingDays

// Check if the price has been above the SMA150 for the last 20 trading days
priceAboveSma150 = true
for i = 1 to smaCheckLength
    if close[i] < sma150[i]
        priceAboveSma150 := false

// Check if the SMA150 has been above the SMA200 for the last 10 days
sma150AboveSma200 = true
for i = 1 to sma150AboveSma200CheckDays
    if sma150[i] < sma200[i]
        sma150AboveSma200 := false

// Define the conditions for the 150-day and 200-day SMAs being rising
sma150Rising = sma150 > sma150[1]
sma200Rising = sma200 > sma200[1]

// Check if most of the last 5 days are seller days (close < open)
sellerDays = 0
for i = 0 to 9
    if close[i] < open[i]
        sellerDays := sellerDays + 1

// Check if at least 1 day has seller volume higher than the 20-period volume MA
highSellerVolumeDays = 0
for i = 0 to 9
    if close[i] < open[i] and volume[i] > volumeMA20
        highSellerVolumeDays := highSellerVolumeDays + 1

// Check in the last N days the price below 150
priceBelowSma150 = true
for i = 0 to 0
    if close[i] > sma150[i]
        priceBelowSma150 := false

// Restrict the strategy to 1D time frame
if timeframe.isdaily
    // Buy condition:
    // - Most of the last 5 days are buyer days (buyerDays > 2)
    // - At least 1 of those days has high buyer volume (highVolumeDays >= 1)
    // - RSI SMA (14-period) between 45 and 50 with RSI >= 55, or RSI SMA > 50 and RSI rising
    // - 50-day SMA > 150-day SMA and 150-day SMA > 200-day SMA
    // - 50-day SMA has been rising on at least 16 of the last 20 trading days
    // - The price hasn't been below the 150-day SMA in the last 20 days
    // - 150-day SMA has been above the 200-day SMA for the last 10 days
    // - 150-day and 200-day SMAs are rising
    buyCondition = (close > sma150 and buyerDays > 4 and highVolumeDays >= 1 and rsiCondition  and sma50 > sma150 and sma50Rising and sma150Rising and sma200Rising and priceAboveSma150)

    // Sell condition:
    // - Price crossing below SMA 150
    // - Seller volume (current volume > volume MA 20)
    // - 150-day SMA crosses below 200-day SMA
    // - Most of the last 5 days are seller days (sellerDays > 2) and at least 1 day of higher seller volume (highSellerVolumeDays >= 1)
    sellCondition = (priceBelowSma150 and (sma50 < sma150 or (sellerDays >5 and highSellerVolumeDays >= 5)))

    // Execute buy when all conditions are met
    if (buyCondition)
        strategy.entry("Buy", strategy.long)

    // Execute sell when all conditions are met
    if (sellCondition)
        strategy.close("Buy")