Strategi Stop Profit Sawtooth yang Terbatas Berdasarkan Moving Average

Penulis:ChaoZhang, Tanggal: 2023-12-21 12:26:18
Tag:

img

Gambaran umum

Strategi ini membuka posisi berdasarkan salib emas dan salib kematian dari rata-rata bergerak, dan set mengambil keuntungan dan stop loss dengan cara floor-crossing. Fitur utamanya adalah:

  1. Gunakan sistem rata-rata bergerak untuk menyaring kejut
  2. Mengadopsi pindah mengambil keuntungan dan menghentikan kerugian untuk manajemen modal yang dinamis
  3. Filter posisi yang dapat dikonfigurasi untuk menghindari pembukaan satu arah

Prinsip Strategi

Strategi ini terdiri dari empat bagian:

  1. Sistem Rata-rata Bergerak

    Gunakan golden cross dan death cross dari moving average untuk menentukan tren dan menyaring kejutan.

  2. Berpindah Mendapatkan Keuntungan dan Menghentikan Kerugian

    Gunakan mengambil keuntungan dan stop loss dengan persentase tertentu untuk mengunci keuntungan dan mengendalikan risiko, mewujudkan manajemen modal yang dinamis.

  3. Filter Posisi

    Dapat mengkonfigurasi apakah untuk mengaktifkan penyaringan posisi. Jika posisi sebelumnya panjang, sinyal berikutnya harus pendek untuk membuka posisi, menghindari memegang sepihak.

  4. ATR Stop Loss

    Gunakan ATR untuk membatasi kisaran stop loss maksimum dan menghindari stop loss yang berlebihan.

Secara khusus, strategi ini pertama kali menghitung moving average, long di golden cross, dan short di death cross. Setelah masuk, atur garis take profit dan stop loss bergerak dengan persentase tertentu. Jika harga menyentuh garis take profit, maka take profit; jika menyentuh garis stop loss atau melebihi rentang stop loss ATR, maka stop loss.

Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Konfigurasi Tinggi

    Banyak parameter dalam strategi dapat dikonfigurasi agar pengguna dapat menyesuaikan berdasarkan gaya trading mereka.

  2. Manajemen Modal yang Baik

    Penerapan bergerak mengambil keuntungan dan stop loss dan ATR stop loss dapat secara efektif mengontrol amplitudo stop loss tunggal dan mencapai manajemen modal yang sangat baik.

  3. Cocok untuk Pasar Trending

    Strategi rata-rata bergerak itu sendiri lebih cocok untuk pasar tren yang kuat untuk menyaring kejutan secara efektif.

Risiko dan Tindakan Balap

Ada juga beberapa risiko dalam strategi ini:

  1. Kesalahan Penilaian Tren

    Penghakiman rata-rata bergerak di pasar yang kompleks tidak sempurna, dan penilaian yang salah mungkin terjadi. Pada saat ini, parameter rata-rata bergerak harus disesuaikan dengan demikian, atau indikator lain dapat dikombinasikan untuk menilai tren.

  2. Stop Loss yang berlebihan

    Parameter ATR harus dikombinasikan untuk mengatur rentang stop loss.

  3. Risiko pembukaan satu arah

    Memungkinkan penyaringan posisi akan memiliki beberapa dampak pada frekuensi perdagangan.

Arahan Optimasi

Arah optimasi utama adalah:

  1. Optimasi Parameter

    Sesuaikan siklus rata-rata bergerak, parameter ATR, mengambil keuntungan dan stop loss rasio dan parameter lainnya untuk mengoptimalkan kinerja strategi.

  2. Menambahkan indikator

    Tambahkan indikator seperti CMF, OBV untuk menilai arus modal dan menghindari stop loss yang berlebihan.

  3. Menggabungkan dengan strategi lain

    Gabungkan dengan strategi istirahat untuk mengikuti tren setelah tren stabil untuk mencapai hasil yang lebih baik.

Ringkasan

Singkatnya, melalui filter rata-rata bergerak dan bergerak mengambil keuntungan dan stop loss, strategi ini mewujudkan manajemen modal dinamis berdasarkan tren. Ini memiliki konfigurasi yang tinggi, cocok untuk investor rasional untuk menyesuaikan dan menggunakan sesuai dengan gaya mereka sendiri.


/*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)


Lebih banyak