Parameteroptimierte Entwicklung nach quantitativer Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-02 11:01:22
Tags:

img

Übersicht

Die Hauptidee dieser Strategie besteht darin, Preistrends zu beurteilen und zu verfolgen, indem der Percentrank-Indikator und die Parameteroptimierung kombiniert werden. Die Strategie erzeugt Handelssignale, indem der aktuelle Preis mit dem Prozentsatz der Preise über einen bestimmten historischen Zeitraum verglichen wird, um den Spiegeleffekt zu erfassen und Trends für überschüssige Renditen zu verfolgen.

Strategieprinzip

Die Strategie verwendet den Prozent-Rank-Indikator, um die Preisentwicklung zu bestimmen. Percentrank stellt die relative Stärke des aktuellen Preises über den betrachteten Zeitraum dar. Der Parameter len gibt die Länge des zu betrachtenden historischen Zeitraums an.

Der Bereich der Percentrank-Werte liegt zwischen 0 und 100. Wenn der Percentrank-Wert nahe an 0 liegt, bedeutet dies, dass der aktuelle Preis in der Nähe des niedrigsten Preises im betrachteten Zeitraum ist und sich in einem unterbewerteten Bereich befindet. Wenn er nahe an 100 liegt, bedeutet dies, dass der aktuelle Preis in der Nähe des höchsten Preises im betrachteten Zeitraum ist und sich in einem überbewerteten Bereich befindet.

Die Strategie führt außerdem einen Skalaparameter als Versatz ein, um den Bereich von 0 bis 100 auf den Bereich von 100+ Skala zu verschieben.

Wenn der Preis-Prozent-Rank-Indikator Level_1 nach oben überschreitet, wird ein langes Signal generiert. Wenn er Level_2 nach unten überschreitet, wird ein kurzes Signal generiert. Die Ausstiegsbedingungen sind gegenüber den Einstiegssignalen.

Vorteile der Strategie

  1. Verwenden Sie den Prozent-Rank-Indikator, um die Stärke der Preisentwicklung zu bestimmen, um nicht in die Falle zu geraten oder Höchststände zu verfolgen
  2. Anwendung von Parameteroptimierungsmethoden zur Anpassung von Versatzskala und Signalleitenschwelle für verschiedene Produkte und Zyklen zur Verbesserung der Stabilität
  3. Kombination von Trend- und Mittelumkehrhandelsideen, um Trends rechtzeitig nach dem Durchbrechen der Signallinie zu verfolgen

Risikoanalyse

  1. Falsche Beurteilung von Trends, die zu unnötigen Verlusten führen
  2. Anfällig für falsche Signale, wenn Preisvolatilität und -trend unklar sind
  3. Falsche Einstellungen von Parametern können zu einem zu häufigen Handel oder zu einem unzureichenden Handelsvolumen führen

Um die oben genannten Risiken zu beheben, können Parameter wie len, Skala, Level für die Optimierung angepasst werden.

Optimierungsrichtlinien

Es besteht Raum für eine weitere Optimierung der Strategie:

  1. Stop-Loss-Punkte können eingeführt werden, um Einzelhandelsverluste zu reduzieren
  2. Indikatoren wie gleitender Durchschnitt können zur Bestätigung eingesetzt werden, um einige falsche Signale auszufiltern
  3. Maschinelle Lernmethoden können zur automatischen Optimierung von Parametern verwendet werden
  4. Kann über mehrere Zeitrahmen parallel ausgeführt werden

Schlussfolgerung

Die Gesamtidee der Strategie ist klar: Quantitative Methoden der Optimierung von Parametern zur Beurteilung und Verfolgung von Preistrends werden angewendet.


/*backtest
start: 2023-12-02 00:00:00
end: 2024-01-01 00:00:00
period: 4h
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/
// © Alex_Dyuk

//@version=4
strategy(title="percentrank", shorttitle="percentrank")
src = input(close, title="Source")
len = input(title="lookback - Период сравнения", type=input.integer, defval=10, minval=2)
scale = input(title="scale offset - смещение шкалы", type=input.integer, defval=50, minval=0, maxval=100)
level_1 = input(title="sygnal line 1", type=input.integer, defval=30)
level_2 = input(title="sygnal line 2", type=input.integer, defval=-30)

prank = percentrank(src,len)-scale
plot(prank, style = plot.style_columns)
plot(level_2, style = plot.style_line, color = color.red)
plot(level_1, style = plot.style_line, color = color.green)

longCondition = (crossunder(level_1, prank) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (crossover(level_2, prank) == true)
if (longExitCondition)
    strategy.close("Long")
    
shortCondition = (crossover(level_2, prank) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (crossunder(level_1, prank) == true)
if (shortexitCondition)
    strategy.close("Short")

    

Mehr