Diese Strategie eröffnet Positionen, die auf dem goldenen Kreuz und dem Todeskreuz gleitender Durchschnitte basieren, und setzt Gewinn und Stop-Loss auf eine bodenkreuzende Weise ein.
Die Strategie besteht aus vier Teilen:
System des gleitenden Durchschnitts
Verwenden Sie das goldene Kreuz und das Todeskreuz der gleitenden Durchschnitte, um Trends zu bestimmen und Schocks zu filtern.
Ein Umzug bringt Gewinn und verhindert Verluste
Nutzen Sie Gewinn und Stop-Loss mit einem bestimmten Prozentsatz, um Gewinne zu erzielen und Risiken zu kontrollieren und ein dynamisches Kapitalmanagement zu realisieren.
Positionsfilterung
Wenn die vorherige Position lang ist, muss das nächste Signal kurz sein, um die Position zu öffnen und einseitiges Halten zu vermeiden.
ATR-Stoppverlust
Verwenden Sie ATR, um den maximalen Stoppverlustbereich zu begrenzen und übermäßigen Stoppverlust zu vermeiden.
Speziell berechnet die Strategie zuerst den gleitenden Durchschnitt, Longs auf dem goldenen Kreuz und Shorts auf dem Todeskreuz. Nach dem Eintritt setzen Sie die beweglichen Take Profit- und Stop Loss-Linien mit einem bestimmten Prozentsatz ein. Wenn der Preis die Take Profit-Linie berührt, dann nehmen Sie Profit; wenn er die Stop Loss-Linie berührt oder den ATR Stop Loss-Bereich überschreitet, dann Stop Loss.
Die wichtigsten Vorteile dieser Strategie sind:
Hohe Konfigurationsfähigkeit
Viele Parameter in der Strategie sind konfigurierbar, damit Benutzer sie anhand ihrer Handelsstile anpassen können.
Gutes Kapitalmanagement
Durch die Einführung von Bewegung Take Profit und Stop Loss sowie ATR Stop Loss kann die Amplitude eines einzigen Stop Loss effektiv kontrolliert und ein ausgezeichnetes Kapitalmanagement erreicht werden.
Geeignet für Trendmarkt
Die gleitende Durchschnittsstrategie eignet sich besser für stark trendige Märkte, um Schocks wirksam zu filtern.
Diese Strategie birgt auch einige Risiken:
Trendfehler
Die Beurteilung der gleitenden Durchschnitte auf komplexen Märkten ist nicht perfekt, und es können Fehleinschätzungen auftreten.
Übermäßiger Stop Loss
Bewegliche Stoppverluste können bei Schocks annulliert werden. ATR-Parameter sollten kombiniert werden, um den Stoppverlustbereich festzulegen.
Einseitige Eröffnungsrisiken
Die Einführung der Positionsfilterung hat einen gewissen Einfluss auf die Handelsfrequenz.
Die wichtigsten Optimierungsrichtungen sind:
Optimierung der Parameter
Anpassung des gleitenden Durchschnittszyklus, ATR-Parameter, Gewinn- und Stop-Loss-Verhältnisse und andere Parameter zur Optimierung der Strategieleistung.
Hinzufügen von Indikatoren
Hinzufügen von Indikatoren wie CMF, OBV, um den Kapitalfluss zu beurteilen und übermäßigen Stop-Loss zu vermeiden.
Kombination mit anderen Strategien
Kombination mit Breakout-Strategien, um Trends zu folgen, nachdem sich der Trend stabilisiert hat, um bessere Ergebnisse zu erzielen.
Zusammenfassend lässt sich sagen, dass diese Strategie durch den gleitenden Durchschnittsfilter und den gleitenden Take-Profit und Stop-Loss ein dynamisches Kapitalmanagement auf Basis von Trends realisiert. Sie hat eine hohe Konfigurationsfähigkeit, die für rationale Anleger geeignet ist, sich an ihre eigenen Stile anzupassen und zu verwenden. Als universelle quantitative Strategie hat sie immer noch ein großes Optimierungspotenzial und ist eine eingehende Forschung wert.
/*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)