Ba chiến lược giao dịch định lượng trung bình động


Ngày tạo: 2024-01-23 14:20:50 sửa đổi lần cuối: 2024-01-23 14:20:50
sao chép: 0 Số nhấp chuột: 624
1
tập trung vào
1617
Người theo dõi

Ba chiến lược giao dịch định lượng trung bình động

Chiến lược này là một chiến lược theo dõi xu hướng điển hình bằng cách tính toán các đường trung bình di chuyển trong ba chu kỳ khác nhau và kết hợp với giá phá vỡ để tạo ra tín hiệu giao dịch. Chiến lược này được thiết kế để theo dõi xu hướng trung hạn của thị trường và có thể áp dụng cho các giống và môi trường giao dịch khác nhau thông qua các tham số điều chỉnh động.

Nguyên tắc

Chiến lược này bao gồm ba đường trung bình di chuyển: MA1, MA2 và MA3. MA1 và MA2 tạo ra một kênh giao dịch, và sự giao thoa của chúng tạo ra tín hiệu giao dịch; MA3 được sử dụng để lọc tín hiệu.

Khi đường trung bình nhanh trên MA1 xuyên qua đường trung bình dài hạn MA2, cho thấy xu hướng ngắn hạn trở nên mạnh hơn, khi đó sẽ tạo ra tín hiệu làm nhiều nếu giá cao hơn đường trung bình dài hạn MA3; ngược lại, nếu đường trung bình dưới MA1 xuyên qua MA2, và giá thấp hơn MA3, sẽ tạo ra tín hiệu làm hỏng.

MA3 hoạt động để lọc tiếng ồn thị trường ngắn hạn và chỉ phát ra tín hiệu sau khi xác định xu hướng đi vào giai đoạn trung bình dài hạn. Chiến lược này có thể tìm kiếm sự kết hợp tốt nhất của các tham số trong các thị trường khác nhau bằng cách điều chỉnh động các tham số của ba đường trung bình di chuyển.

Ưu điểm

  • Chụp các xu hướng theo chu kỳ khác nhau thông qua nhiều nhóm trung bình di chuyển
  • MA3 lọc tín hiệu để tránh bị đánh giá
  • Các loại và tham số trung bình có thể tùy chỉnh, thích ứng mạnh mẽ
  • Hình ảnh chéo để nhận diện điểm tín hiệu

Rủi ro

  • Đường trung bình di chuyển bị tụt hậu khi xu hướng chu kỳ lớn đảo ngược
  • Tần suất giao dịch có thể quá cao, làm tăng chi phí giao dịch và rủi ro trượt
  • Các tham số không chính xác có thể dẫn đến giao dịch quá mức hoặc tín hiệu chỉ thị bị chậm trễ

Có thể điều chỉnh chu kỳ MA, tối ưu hóa các tham số để chọn các giống khác nhau; tối ưu hóa chiến lược dừng lỗ, kiểm soát tổn thất đơn lẻ; kết hợp với các chỉ số kỹ thuật khác để xác nhận hiệu quả tín hiệu, giảm xác suất tín hiệu sai.

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

  • Thêm các chỉ số khác để đánh giá xu hướng, như MACD, BRI, v.v.
  • Tăng chiến lược dừng lỗ / dừng lại
  • Động thái điều chỉnh các tham số, tìm kiếm sự kết hợp tham số tối ưu
  • Tối ưu hóa các tham số khác nhau
  • Xem xét chi phí giao dịch, tối ưu hóa tần suất giao dịch

Tóm tắt

Chiến lược này là một chiến lược theo dõi xu hướng điển hình bằng cách tính toán ba đường trung bình di chuyển và quan sát các tín hiệu giao dịch tạo ra giao dịch, sử dụng các ý tưởng hợp tác nhanh hoặc chậm. Chiến lược này có thể áp dụng cho các giống khác nhau thông qua tối ưu hóa tham số, nhưng có nguy cơ bị lấn át và bỏ lỡ các bước ngoặt.

Mã nguồn chiến lược
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © Meesemoo

//@version=4
strategy("Custom MA Strategy Tester", overlay = true)
MA1Period = input(13, title="MA1 Period")
MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA1Source = input(title="MA1 Source", type=input.source, defval=close)
MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true)
MA2Period = input(50, title="MA2 Period")
MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA2Source = input(title="MA2 Source", type=input.source, defval=close)
MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true) 
MA3Period = input(200, title="MA3 Period")
MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA3Source = input(title="MA3 Source", type=input.source, defval=close)
MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true)
ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true)

MA1 = if MA1Type == "SMA"
    sma(MA1Source, MA1Period)
else
    if MA1Type == "EMA"
        ema(MA1Source, MA1Period)
    else
        if MA1Type == "WMA"
            wma(MA1Source, MA1Period)
        else
            if MA1Type == "RMA"
                rma(MA1Source, MA1Period)
            else
                if MA1Type == "HMA"
                    wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period)))
                else
                    if MA1Type == "DEMA"
                        e = ema(MA1Source, MA1Period)
                        2 * e - ema(e, MA1Period)
                    else
                        if MA1Type == "TEMA"
                            e = ema(MA1Source, MA1Period)
                            3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period)

                    
MA2 = if MA2Type == "SMA"
    sma(MA2Source, MA2Period)
else
    if MA2Type == "EMA"
        ema(MA2Source, MA2Period)
    else
        if MA2Type == "WMA"
            wma(MA2Source, MA2Period)
        else
            if MA2Type == "RMA"
                rma(MA2Source, MA2Period)
            else
                if MA2Type == "HMA"
                    wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period)))
                else
                    if MA2Type == "DEMA"
                        e = ema(MA2Source, MA2Period)
                        2 * e - ema(e, MA2Period)
                    else
                        if MA2Type == "TEMA"
                            e = ema(MA2Source, MA2Period)
                            3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period)
                    
MA3 = if MA3Type == "SMA"
    sma(MA3Source, MA3Period)
else
    if MA3Type == "EMA"
        ema(MA3Source, MA3Period)
    else
        if MA3Type == "WMA"
            wma(MA3Source, MA3Period)
        else
            if MA3Type == "RMA"
                rma(MA3Source, MA3Period)
            else
                if MA3Type == "HMA"
                    wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period)))
                else
                    if MA3Type == "DEMA"
                        e = ema(MA3Source, MA3Period)
                        2 * e - ema(e, MA3Period)
                    else
                        if MA3Type == "TEMA"
                            e = ema(MA3Source, MA3Period)
                            3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period)
                    


p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1)
p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1)
p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2)

fill(p1, p2, color.silver, transp=80, title="Fill")


start = timestamp(2019, 1, 1, 1, 0)
end = timestamp(2025, 1, 1, 1, 0)

if time >= start and time <= end
    longCondition = crossover(MA1, MA2) and close > MA3
    if (longCondition)
        strategy.entry("Long", strategy.long)
        
    shortCondition = crossunder(MA1, MA2) and close < MA3
    if (shortCondition)
        strategy.entry("Short", strategy.short)