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

Chiến lược chéo trung bình chuyển động theo hàm số gia tăng nhiều giai đoạn động với hệ thống tối ưu hóa rút lui

Tác giả:ChaoZhang, Ngày: 2024-12-27 15:29:38
Tags:EMAMASMARSI

img

Tổng quan

Chiến lược này là một hệ thống giao dịch định lượng dựa trên nhiều đường chéo trung bình chuyển động nhân tố (EMA) và tối ưu hóa pullback. Nó sử dụng năm EMA (EMA5, EMA8, EMA13, EMA21, và EMA50) để quan sát các mối quan hệ chéo giữa các đường trung bình giai đoạn khác nhau và các mối quan hệ giá-EMA để thực hiện xây dựng vị trí theo giai đoạn và đóng vị trí năng động. Chiến lược sử dụng một hệ thống quản lý vốn chia các vị trí thành các tỷ lệ khác nhau như 20% và 40%, dần dần xây dựng hoặc giảm vị trí dựa trên các tín hiệu thị trường khác nhau.

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

Logic cốt lõi bao gồm ba điều kiện nhập cảnh chính và hai điều kiện xuất cảnh:

  1. Các tín hiệu nhập cảnh: Mở 20% vị trí khi EMA5 vượt qua EMA8; Thêm 20% khi EMA5 vượt qua EMA13; Thêm 40% khi EMA8 vượt qua EMA21
  2. Hệ thống tối ưu hóa pullback: Mở 20% vị trí khi giá chạm vào EMA50; Thêm 20% khi giá vượt qua EMA50
  3. Các tín hiệu thoát: Đóng 50% vị trí khi EMA5 vượt qua dưới EMA13; Đóng tất cả các vị trí khi EMA8 vượt qua dưới EMA21
  4. Kiểm soát rủi ro: Ngay lập tức xóa tất cả các vị trí khi giá, EMA5 và EMA8 đều dưới EMA50

Ưu điểm chiến lược

  1. Cơ chế xác nhận nhiều lần: Cung cấp các tín hiệu giao dịch đáng tin cậy hơn thông qua nhiều đường chéo EMA
  2. Quản lý vị trí động: Sử dụng kích thước vị trí khác nhau dựa trên sức mạnh tín hiệu để kiểm soát rủi ro hiệu quả
  3. Thiết kế tối ưu hóa pullback: Sử dụng EMA50 như là hỗ trợ cho các mục nhập pullback, cải thiện độ chính xác nhập
  4. Cơ chế thoát lỏng lẻo: áp dụng chiến lược đóng cửa vị trí theo từng bước để bảo vệ lợi nhuận trong khi kiểm soát việc rút tiền
  5. Kiểm soát rủi ro toàn diện: Thiết lập các điều kiện dừng lỗ rõ ràng để ngăn ngừa tổn thất từ xu hướng giảm đáng kể

Rủi ro chiến lược

  1. EMA lag: Đường trung bình động có sự chậm trễ vốn có, có thể gây ra tín hiệu chậm trễ
  2. Rủi ro thị trường bên cạnh: Có thể tạo ra sự phá vỡ sai thường xuyên trong các thị trường khác nhau
  3. Rủi ro giao dịch quá mức: Nhiều điều kiện nhập cảnh có thể dẫn đến giao dịch quá mức
  4. Chi phí thực hiện: Giao dịch thường xuyên có thể dẫn đến chi phí hoa hồng cao
  5. Rủi ro có hệ thống: Có thể không thoát khỏi các vị trí đủ nhanh trong các thị trường biến động cao

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

  1. giới thiệu các bộ lọc xu hướng: Thêm các chỉ số như ADX để thực hiện giao dịch chỉ trong xu hướng mạnh
  2. Tối ưu hóa quản lý vị trí: Điều chỉnh kích thước vị trí theo cách năng động dựa trên biến động
  3. Kết hợp nhận dạng mô hình giá: Kết hợp các mô hình nến để cải thiện độ chính xác nhập
  4. Cải thiện cơ chế thu lợi nhuận: Đặt mức thu lợi nhuận năng động để đảm bảo lợi nhuận tốt hơn
  5. Thêm các chỉ số tâm lý thị trường: giới thiệu các chỉ số như RSI để lọc các điều kiện thị trường

Tóm lại

Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh thông qua nhiều đường chéo EMA và tối ưu hóa pullback. Sức mạnh của nó nằm trong cơ chế xác nhận nhiều và quản lý vị trí linh hoạt, mặc dù nó có những hạn chế vốn có như sự chậm trễ EMA. Sự ổn định và lợi nhuận của chiến lược có thể được tăng thêm bằng cách giới thiệu bộ lọc xu hướng và các tối ưu hóa khác. Nó phù hợp với thị trường xu hướng, và các nhà giao dịch cần tối ưu hóa các tham số dựa trên điều kiện thị trường thực tế.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Strategy with Price & EMA5 & EMA8 < EMA50 Condition", overlay=true, margin_long=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)

// ==============================
// INPUTS
// ==============================
lengthEMA5 = input.int(5, "EMA5 Length")
lengthEMA8 = input.int(8, "EMA8 Length")
lengthEMA13 = input.int(13, "EMA13 Length")
lengthEMA21 = input.int(21, "EMA21 Length")
lengthEMA50 = input.int(50, "EMA50 Length")

// Tam pozisyon boyutu (örnek: 100 birim)
full_position = 100.0 
qty20 = full_position * 0.2
qty40 = full_position * 0.4

// ==============================
// EMA HESAPLAMALARI
// ==============================
ema5 = ta.ema(close, lengthEMA5)
ema8 = ta.ema(close, lengthEMA8)
ema13 = ta.ema(close, lengthEMA13)
ema21 = ta.ema(close, lengthEMA21)
ema50 = ta.ema(close, lengthEMA50)

// ==============================
// KESİŞİMLERİ TESPİT FONKSİYONLARI
// ==============================
crossUp(src1, src2) => ta.crossover(src1, src2)
crossDown(src1, src2) => ta.crossunder(src1, src2)

// ==============================
// STRATEJİ KOŞULLARI
// ==============================

// Adım 1: EMA5, EMA8’i yukarı keserse %20’lik alım
step1_condition = crossUp(ema5, ema8)

// Adım 2: EMA5, EMA8’i yukarı kestikten sonra EMA5, EMA13’ü de yukarı keserse %20 daha alım
step2_condition = crossUp(ema5, ema13)

// Adım 3: EMA8, EMA21’i yukarı keserse %40 alım
step3_condition = crossUp(ema8, ema21)

// Çıkış koşulları:
// EMA5, EMA13’ü aşağı keserse pozisyonun %50’sini kapat.
// EMA8, EMA21’i aşağı keserse tüm pozisyonu kapat.
half_close_condition = crossDown(ema5, ema13)
full_close_condition = crossDown(ema8, ema21)

// Düşüşlerde EMA50'ye dokunma -> %20 alım
pullback_condition = low <= ema50 or close <= ema50

// Fiyat tekrar EMA50'nin üzerine çıkarsa -> %20 alım
above_ema50_condition = crossUp(close, ema50)

// Yeni ek koşul:  
// Fiyat, EMA5 ve EMA8’in herbiri EMA50’nin altındaysa tüm pozisyon kapat.
// Bu durum tam bir düşüş senaryosunu işaret eder.
all_below_condition = (close < ema50) and (ema5 < ema50) and (ema8 < ema50)

// Mevcut pozisyon büyüklüğü
pos_size = strategy.position_size

// ==============================
// POZİSYON GİRİŞLERİ
// ==============================
if (step1_condition and pos_size == 0)
    strategy.entry("Step1", strategy.long, qty=qty20)

if (step2_condition and strategy.opentrades < 2)
    strategy.entry("Step2", strategy.long, qty=qty20)

if (step3_condition and strategy.opentrades < 3)
    strategy.entry("Step3", strategy.long, qty=qty40)

// Pullback: Fiyat EMA50'ye temas ederse ve pozisyon yoksa %20 alım
if (pullback_condition and strategy.opentrades == 0)
    strategy.entry("Pullback", strategy.long, qty=qty20)

// Fiyat EMA50’nin üzerine çıkarsa ve pozisyon %100'e ulaşmamışsa %20 alım
if (above_ema50_condition and strategy.opentrades < 4)
    strategy.entry("Above50", strategy.long, qty=qty20)

// ==============================
// POZİSYON YÖNETİMİ (ÇIKIŞLAR)
// ==============================
if (all_below_condition and strategy.opentrades > 0)
    // Tüm pozisyonu kapat çünkü sert düşüş senaryosuna girildi
    strategy.close("Step3")
    strategy.close("Step2")
    strategy.close("Step1")
    strategy.close("Pullback")
    strategy.close("Above50")
else
    // Yarı kapatma (EMA5, EMA13 aşağı kesişimi)
    if (half_close_condition)
        totalTrades = strategy.opentrades
        // Öncelikle en son açılan en büyük pozisyonu kapatarak kademeli küçültme
        if (totalTrades >= 3)
            strategy.close("Step3")     // Bu 40% kapatır
        else if (totalTrades == 2)
            strategy.close("Step2")     // Bu 20% kapatır
        else if (totalTrades == 1)
            strategy.close("Step1")     // Bu da 20% kapatır (tamamen çıkar, ama basitlik için böyle)

    // Tam kapatma (EMA8, EMA21 aşağı kesişimi)
    if (full_close_condition)
        // Açık olan tüm pozisyonları kapat
        strategy.close("Step3")
        strategy.close("Step2")
        strategy.close("Step1")
        strategy.close("Pullback")
        strategy.close("Above50")

// ==============================
// GÖRSELLEŞTİRME
// ==============================
plot(ema5, "EMA5", color=color.new(color.yellow, 0))
plot(ema8, "EMA8", color=color.new(color.blue, 0))
plot(ema13, "EMA13", color=color.new(color.green, 0))
plot(ema21, "EMA21", color=color.new(color.red, 0))
plot(ema50, "EMA50", color=color.new(color.purple, 0))


Có liên quan

Thêm nữa