Chiến lược dừng lợi nhuận Sawtooth vượt mặt bằng dựa trên đường trung bình động

Tác giả:ChaoZhang, Ngày: 21-12-2023 12:26:18
Tags:

img

Tổng quan

Chiến lược này mở các vị trí dựa trên thập tự vàng và thập tự chết của đường trung bình động, và đặt lấy lợi nhuận và dừng lỗ theo cách vượt qua sàn.

  1. Sử dụng hệ thống trung bình động để lọc các cú sốc
  2. Nhập nhận chuyển động lấy lợi nhuận và dừng lỗ cho quản lý vốn năng động
  3. Bộ lọc vị trí có thể cấu hình để tránh mở một chiều

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

Chiến lược bao gồm bốn phần:

  1. Hệ thống trung bình động

    Sử dụng đường chéo vàng và đường chéo chết của đường trung bình động để xác định xu hướng và lọc các cú sốc.

  2. Di chuyển mang lại lợi nhuận và ngăn chặn tổn thất

    Sử dụng lợi nhuận và dừng lỗ với một tỷ lệ phần trăm nhất định để khóa lợi nhuận và kiểm soát rủi ro, nhận ra quản lý vốn năng động.

  3. Chế độ lọc vị trí

    Nếu vị trí trước đó là dài, tín hiệu tiếp theo phải ngắn để mở vị trí, tránh giữ một bên.

  4. ATR Stop Loss

    Sử dụng ATR để giới hạn phạm vi dừng lỗ tối đa và tránh dừng lỗ quá mức.

Cụ thể, chiến lược đầu tiên tính toán đường trung bình động, dài trên đường chéo vàng và ngắn trên đường chéo chết. Sau khi nhập, đặt các đường chuyển động lấy lợi nhuận và dừng lỗ với một tỷ lệ phần trăm nhất định. Nếu giá chạm vào đường lấy lợi nhuận, sau đó lấy lợi nhuận; nếu chạm vào đường dừng lỗ hoặc vượt quá phạm vi dừng lỗ ATR, thì dừng lỗ.

Ưu điểm

Những lợi thế chính của chiến lược này là:

  1. Khả năng cấu hình cao

    Nhiều thông số trong chiến lược có thể được cấu hình để người dùng điều chỉnh dựa trên phong cách giao dịch của họ.

  2. Quản lý vốn tốt

    Việc áp dụng chuyển động lấy lợi nhuận và dừng lỗ và ATR dừng lỗ có thể kiểm soát hiệu quả phạm vi của một lỗ dừng duy nhất và đạt được quản lý vốn tuyệt vời.

  3. Thích hợp cho thị trường xu hướng

    Chiến lược trung bình động tự nó phù hợp hơn với các thị trường có xu hướng mạnh để lọc các cú sốc một cách hiệu quả.

Rủi ro và biện pháp đối phó

Có một số rủi ro trong chiến lược này:

  1. Sự đánh giá sai về xu hướng

    Việc đánh giá các đường trung bình động trên các thị trường phức tạp không hoàn hảo và có thể xảy ra những đánh giá sai.

  2. Stop Loss quá mức

    Các thông số ATR nên được kết hợp để thiết lập phạm vi stop loss.

  3. Rủi ro mở cửa một chiều

    Cho phép lọc vị trí sẽ có một số tác động đến tần suất giao dịch.

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

Các hướng tối ưu hóa chính là:

  1. Tối ưu hóa tham số

    Điều chỉnh chu kỳ trung bình động, tham số ATR, tỷ lệ lợi nhuận và dừng lỗ và các tham số khác để tối ưu hóa hiệu suất chiến lược.

  2. Thêm các chỉ số

    Thêm các chỉ số như CMF, OBV để đánh giá dòng vốn và tránh dừng lỗ quá mức.

  3. Kết hợp với các chiến lược khác

    Kết hợp với các chiến lược đột phá để theo xu hướng sau khi xu hướng ổn định để đạt được kết quả tốt hơn.

Tóm lại

Tóm lại, thông qua bộ lọc trung bình động và chuyển động lấy lợi nhuận và dừng lỗ, chiến lược này nhận ra quản lý vốn năng động dựa trên xu hướng. Nó có khả năng cấu hình cao, phù hợp với các nhà đầu tư hợp lý để điều chỉnh và sử dụng theo phong cách của riêng họ. Là một chiến lược định lượng phổ quát, nó vẫn có tiềm năng tối ưu hóa lớn và đáng nghiên cứu sâu sắc.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-11 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/
// © MGULHANN

//@version=5

//İchimoku Leading Span 2 Hesaplaması ve Girişleri
strategy("Stairs Gain Strategy - MG", overlay=true, margin_long=100, margin_short=100)
laggingSpan2Periods = input.int(52, minval=1, title="Leading Periot")
displacement = input.int(1, minval=1, title="Displacement")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
leadLine2 = donchian(laggingSpan2Periods)
p2 = plot(leadLine2, offset = displacement - 1, color=#EF9A9A,
	 title="Leading Span B")

// İşlem Tekrarını Filtrele	 
filtreUygula = input.bool(true,title="Pozisyon Sıra Filtresi Uygula")

//Kar Al / Zarar Durdur Seviyeleri Girişleri
zararDurdurmaYuzde = input.float(1.0, title='Zarar Durdurma %', step=0.01) / 100
karAlmaYuzde = input.float(2.0, title='Kar Alma %', step=0.01) / 100

//ATR Hesaplaması
atrCarpani = input.float(0.3, title="ATR Çarpanı", step= 0.01)
atrDegeri = ta.atr(14) * atrCarpani

//ATR Değer Girişleri
atrbuyukdeger = input.float(0.01, title="ATR Üst Limit", step=0.01)
atrkucukdeger = input.float(0.06, title="ATR Alt Limit", step=0.01)

//Buy ve Sell Şartları
buycross =   ta.crossover(close,leadLine2[displacement-1]) ? atrDegeri > atrbuyukdeger : strategy.position_size == 0
sellcross = ta.crossover(leadLine2[displacement-1],close) ? atrDegeri < atrkucukdeger : strategy.position_size == 0

//KONTROL
var sonPozisyonYonu = 0
//Son kapanan pozisyon long ise degiskenin degerini 1 olarak ata
if strategy.position_size[1] > 0 and strategy.position_size == 0
    sonPozisyonYonu := 1

//Son kapanan pozisyon short ise degiskenin degerini -1 olarak ata
if strategy.position_size[1] < 0 and strategy.position_size == 0
    sonPozisyonYonu := -1
    
//eger filtre uygulama seçiliyse ve son pozisyon yönü long ise 'longFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun long olmasını engelle
longFiltreSonuc = filtreUygula ? sonPozisyonYonu == 1 ? false : true : true

//eger filtre uygulama seçiliyse ve son pozisyon yönü short ise 'shortFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun short olmasını engelle
shortFiltreSonuc = filtreUygula ? sonPozisyonYonu == -1 ? false : true : true

//LONG GİRİŞ
strategy.entry("Long", strategy.long, when=buycross and longFiltreSonuc)
longKarAl = strategy.position_avg_price * (1 + karAlmaYuzde)
longZararDurdur = strategy.position_avg_price * (1 - zararDurdurmaYuzde)
strategy.exit("Long Exit","Long",limit=longKarAl, stop=longZararDurdur)

//SHORT GİRİŞ
strategy.entry("Short", strategy.short, when=sellcross and shortFiltreSonuc)
shortKarAl = strategy.position_avg_price * (1 - karAlmaYuzde)
shortZararDurdur = strategy.position_avg_price * (1 + zararDurdurmaYuzde)
strategy.exit("Short Exit","Short",limit=shortKarAl, stop=shortZararDurdur)

//Kar Al ve Zarar Durdur Seviyelerinin Grafikte İşaretlenmesi
plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.navy, linewidth=2, style=plot.style_linebr, title="İşleme Giriş Seviyesi")
plot(strategy.position_size > 0 ? longKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Long Kar Alım Seviyesi")
plot(strategy.position_size > 0 ? longZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Long Zarar Durdurma Seviyesi")
plot(strategy.position_size < 0 ? shortKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Short Kar Alım Seviyesi")
plot(strategy.position_size < 0 ? shortZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Short Zarar Durdurma Seviyesi")

//plotshape(buycross,size=size.small,style=shape.labelup,location=location.belowbar,color=color.green,text="Al", offset = displacement-1, textcolor=color.white)
//plotshape(sellcross,size=size.small,style=shape.labeldown,location=location.abovebar,color=color.red,text="Sat", offset = displacement-1, textcolor=color.white)


Thêm nữa