Diese Strategie handelt basierend auf den Handelssignalen, die vom Faytterro Estimator generiert werden. Der Faytterro Estimator ist ein Indikator, der Trends beurteilt, indem die Konvergenz- und Divergenzrate der Preise berechnet wird. Diese Strategie kombiniert die Handelssignale des Faytterro Estimator und einige zusätzliche Bedingungen, um lange und kurze Signale unterschiedlicher Größe an idealen Punkten zu generieren.
Der Kern dieser Strategie ist der Faytterro-Schätzer. Seine Berechnung besteht darin: zuerst die Konvergenz- und Divergenzrate (CR) der Preise zu berechnen, dann eine quadratische Funktion zu konstruieren, die die Form der CR-Kurve widerspiegeln kann, indem verschiedene Koeffizienten festgelegt werden. Durch die Beobachtung der Wendepunkte der quadratischen Kurve beurteilt er die Veränderung der Preisentwicklung.
Konkret berechnet die Strategie zunächst die CR der Preise. Dann baut sie ein Array dizi von Länge 2*len und füllt es sequentiell mit quadratischen Funktionswerten. Die Koeffizienten der quadratischen Funktion spiegeln den Wert von CR wider. Danach bestimmt sie, ob die quadratische Funktion einen Wendepunkt hat. Wenn es einen Wendepunkt gibt, generiert sie Kauf- oder Verkaufssignale.
Auf dieser Grundlage legt die Strategie auch einige zusätzliche Bedingungen fest, z. B. die Festlegung des Mindestabstands zwischen den Preisdurchbrüchen, um häufigen Handel zu vermeiden, die Erzeugung von Signalen unterschiedlicher Größe usw. Diese Bedingungen werden verwendet, um einige unerwünschte Handelspunkte auszufiltern.
Diese Strategie hat folgende Vorteile:
Die Verwendung des Faytterro-Schätzers zur Beurteilung von Trends, der empfindlich auf Preisschwankungen reagiert und Trendänderungen frühzeitig erfassen kann.
Die Konstruktion einer quadratischen Funktion, die die Form der CR-Kurve widerspiegelt, und die direkte und effektive Ermittlung von Wendepunkten.
Die Erzeugung von Signalen unterschiedlicher Größen ermöglicht den Pyramidenhandel an idealen Punkten und erhöht das Gewinnpotenzial.
Eine Erhöhung der Mindestdistanzfilterung filtert die Signale effektiv und verhindert ineffektiven häufigen Handel.
Viele verstellbare Parameter können für verschiedene Handelsprodukte optimiert werden, wodurch die Anpassungsfähigkeit verbessert wird.
Die Strategielogik ist klar und leicht verständlich, und der Code ist sehr lesbar, so dass es leicht zu lernen ist.
Für diese Strategie sind auch einige Risiken zu beachten:
Der Faytterro Estimator birgt das Risiko einer Kurvenanpassung und kann bei einigen Handelsprodukten unterdurchschnittlich funktionieren.
Das Urteilen ausschließlich anhand der Wendepunkte der quadratischen Kurve kann zu grob sein und zu Fehleinschätzungen führen.
Häufiger Pyramidenhandel erhöht die Kosten für Provisionen.
Eine Vielzahl von einstellbaren Parametern erhöht die Schwierigkeit der Optimierung.
Es kann nicht wirksam mit Fehleinschätzungen in Zeiten von Preisschwankungen umgehen.
Fehlende Stop-Loss-Mechanismen können zu größeren Verlusten führen.
Die entsprechenden Lösungen sind:
Optimierung der Parameter für verschiedene Produkte zur Verbesserung der Robustheit.
Hinzufügen anderer Indikatoren für die Filtration, um Fehleinschätzungen zu vermeiden, die sich ausschließlich auf die Wendepunkte stützen.
Setzen Sie einen ordnungsgemäßen Stop-Loss, um Einzelverlust zu kontrollieren.
Verwenden Sie Big-Data-Methoden zur automatischen Optimierung von Parametern.
Hinzufügen einer Oszillationskennzeichnung, um den Handel in Oszillationsperioden zu vermeiden.
Stellen Sie eine angemessene Stop-Loss-Logik fest.
Zu den Optimierungsrichtungen gehören:
Hinzufügen von Stop-Loss-Logik zur Steuerung von Einzelverlusten, wie zum Beispiel Trailing Stop Loss oder Time Stop Loss.
Hinzufügen anderer Indikatoren, um Fehleinschätzungen zu vermeiden, die sich ausschließlich auf den Faytterro-Schätzer stützen.
Hinzufügen von Bestätigungsmechanismen, um nicht durch kurzfristige Rückzüge ausgeschlossen zu werden.
Optimierung von verstellbaren Parametern für verschiedene Produkte unter Verwendung genetischer Algorithmen, Bayesian Optimierung usw.
Identifizieren Sie schwankende Märkte unter Verwendung von ATR, DMI usw. und vermeiden Sie den Handel während der Schwankung.
Optimieren Sie die Pyramidenlogik, um zu verhindern, dass Trends verfolgt werden.
Testparameter in verschiedenen Zeitrahmen, um den optimalen Zeitrahmen zu finden.
Diese Strategie trifft Entscheidungen basierend auf den Handelssignalen des Faytterro Estimator und fügt darüber hinaus Logikurteile und unterschiedlich große Einstiegssignale hinzu, um eine Trendfolgestrategie mit Pyramidenmerkmalen zu bilden. Die Strategie ist intuitiv und leicht zu verstehen, mit starken Trendfangfähigkeiten. Aber sie hat auch Probleme wie Indikatorfehler, keinen Stop-Loss, Schwierigkeiten bei der Optimierung von Parametern. Zukünftige Optimierungen umfassen das Hinzufügen von Filtermechanismen, Stop-Loss-Logik, Parameteroptimierung usw., um die Robustheit und Anpassungsfähigkeit zu verbessern. Insgesamt bietet diese Strategie eine Möglichkeit, Indikatoren zu verwenden, um Trendänderungen zu beurteilen, von denen es sich zu lernen lohnt.
/*backtest start: 2022-09-21 00:00:00 end: 2023-08-10 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/ // © faytterro //@version=5 // strategy("Faytterro Estimator Strategy", overlay=true, pyramiding=100) src=input(hlc3,title="source") len=input.int(10,title="faytterro estimator lenght", maxval=500) len2=100 len3=input.float(500,title="minumum enrty-close gap (different direction)") len4=input.float(500,title="minumum entry-entry gap (same direction)") cr(x, y) => z = 0.0 weight = 0.0 for i = 0 to y-1 z:=z + x[i]*((y-1)/2+1-math.abs(i-(y-1)/2)) z/(((y+1)/2)*(y+1)/2) cr= cr(src,2*len-1) width=input.int(10, title="strong entry size", minval=1) dizi = array.new_float(500) // var line=array.new_line() //if barstate.islast for i=0 to len*2 array.set(dizi,i,(i*(i-1)*(cr-2*cr[1]+cr[2])/2+i*(cr[1]-cr[2])+cr[2])) buy = array.get(dizi,len+1+5)>array.get(dizi,len+1+4) and array.get(dizi,len+1+5)<cr[len] sell = array.get(dizi,len+1+5)<array.get(dizi,len+1+4) and array.get(dizi,len+1+5)>cr[len] bb=buy? hlc3 : na ss=sell? hlc3 : na sbuy= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3*3 ssell= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3*3 buy:= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3 //and close>ta.highest(fixnan(ss),len2)-len3*3 sell:= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3 //and close<ta.lowest(fixnan(bb),len2)+len3*3 alertcondition(buy or sell) if (sbuy) strategy.entry("strong buy", strategy.long,width) if (ssell) strategy.entry("strong sell", strategy.short,width) if (buy) strategy.entry("buy", strategy.long) if (sell) strategy.entry("sell", strategy.short)