Quantitative Broken-Line-Strategie


Erstellungsdatum: 2023-11-21 13:43:24 zuletzt geändert: 2023-12-01 15:01:07
Kopie: 1 Klicks: 622
1
konzentrieren Sie sich auf
1617
Anhänger

Quantitative Broken-Line-Strategie

Überblick

Der Zweck dieser Strategie ist es, verschiedene Eingabevariablen wie die K-Liniefarbe, die Transaktionsmenge und die Zufallsmethode zu testen, um Preisänderungen in Form von Signalwellen zu prognostizieren. Die Strategie überträgt diese Variablen in Form von Signalwellen, um eine Kauf- oder Verkaufsentscheidung zu treffen, wenn die Höhe oder die Tiefe einer Welle eine bestimmte Anzahl von Mal erreicht.

Strategieprinzip

Die Strategie besteht aus drei Teilen: Der erste Teil erkennt die Farbveränderung der K-Linien. Wenn mehrere gleichfarbige K-Linien eine andere Farbe aufweisen, werden die Sinuswellen umgewandelt. Der zweite Teil erkennt, ob der Umsatz über oder unter dem Mittelwert liegt, und wenn der Mittelwert durchbrochen wird, werden die Wellen umgewandelt.

Der Code steuert den Lauf der Welle, indem er die aktuelle Richtung der drei Wellen, die Wellenhöhe und den Zustand der letzten K-Linie verfolgt. Wenn die Wellenhöhe die Parameter erreicht, ändert er die Laufrichtung. Durch diesen Kreislauf wird der Lauf der Synchronwellen simuliert.

Analyse der Stärken

Diese Theorie der Synchronwellen scheint sehr plausibel zu sein, und die simulierten Wellenformen haben auch eine gewisse Beziehung zum realen Markt. Durch die Prüfung dieser Strategie wird jedoch festgestellt, dass es sich um zufällige Ergebnisse handelt. Welche Kombination von Variablen sieht ähnlicher aus und verbessert nicht die Handelsergebnisse.

Ein Vorteil dieser Strategie ist also, dass sie die falsche Vorstellung widerlegt, dass der Silbermarkt den Silberpreis vorhersagen kann. Variablen in den Märkten beeinflussen zwar die Preise, aber unvorhersehbare, zufällige Entscheidungen können ähnliche Ergebnisse erzielen.

Risikoanalyse

Das größte Risiko dieser Strategie besteht darin, dass es schwierig ist, bei einem zufälligen Handel Gewinne und Verluste zu ermitteln. Die Ergebnisse unter verschiedenen Parametern sind schwierig vorherzusagen und es ist nicht möglich, im Voraus zu bestimmen, ob sie rentabel sind.

Darüber hinaus ist die Theorie der Synchronwellen-Vorhersage an sich falsch. Marktveränderungen sind zu komplex, um mit einfachen, periodischen Simulationen zu simuliert werden. Die Strategie kann also nicht wirklich auf den realen Markt angewendet werden.

Um das Risiko zu verringern, müssen die zufälligen Ergebnisse weiter analysiert werden, um die Parameterbereiche zu bestimmen; oder in Kombination mit anderen Analysemethoden, um Handelssignale zu überprüfen.

Optimierungsrichtung

Diese Strategie kann in folgenden Richtungen optimiert werden:

  1. Umwandlung von mehr Variablen in Wellen und Erweiterung der Stichprobenräume
  2. Kombination der aktuellen drei Wellen zur Suche nach der optimalen Durchlaufkombination
  3. Einstellung der Stop-Loss-Methode, wie zum Beispiel die Stop-Loss-Rate
  4. Optimierung der Ein- und Ausstiegslogik, Rückmessungen zur Suche nach optimalen Parametern

Zusammenfassen

Diese Strategie zeigt die unvorhersehbare Natur des Marktes durch die Prüfung verschiedener Synchronwellen. Gleichzeitig widerlegt sie die falsche Theorie, die mit Wellenläufen vorhergesagt wird.

Der nächste Schritt ist, die Verfügbarkeit der Strategie zu verbessern, indem man Variablen hinzufügt, Wellenformen kombiniert, Stop-Loss- und Optimierungsparameter setzt. Es ist jedoch wichtig zu verstehen, dass Marktveränderungen kompliziert und unberechenbar sind. Was wir tun wollen, ist, das Zufallsrisiko zu reduzieren, nicht den Markt vorherzusagen.

Strategiequellcode
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 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/
// © Gentleman-Goat

//@version=5
strategy("Sine Wave Theory",overlay=false, precision = 2, initial_capital = 1000,shorttitle = "SINE_W_T")

var bar_change_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Bar Change")
bar_change_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Bar Change")
bar_change_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Bar Change")
bar_change_trade = input.bool(defval=true,title="Trade",group="Bar Change")

var volume_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Volume")
avg_volume_length = input.int(7,title="Lookback Length",group="Volume")
volume_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Volume")
volume_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Volume")
volume_trade = input.bool(defval=false,title="Trade",group="Volume")

var coin_flip_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Coin Flip")
coin_flip_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Coin Flip")
coin_flip_seed = input.int(defval=1,title="Seed #",group="Coin Flip")
coin_flip_trade = input.bool(defval=false,title="Trade",group="Coin Flip")

avg_volume = ta.sma(volume,avg_volume_length)

//Green or Red Candle
bar_color = close>open ? color.green : color.red
bar_color_time_adj = request.security(syminfo.tickerid, bar_change_sine_wave_res, bar_color)

//Above or Below Average
volume_state = (volume>avg_volume) ? color.blue : color.purple
volume_state_time_adj = request.security(syminfo.tickerid, volume_sine_wave_res, volume_state)
 
//Coinflip
coin_flip = math.random(0,100,coin_flip_seed)>=50 ? color.teal : color.yellow

var bar_change_wave_count = 0
var volume_wave_count = 0
var coin_flip_wave_count = 0

//Wave Counters
if(volume_state_time_adj[1] != volume_state_time_adj)
    volume_wave_count := volume_wave_count + volume_wave_direction

if(bar_color_time_adj[1] != bar_color_time_adj)
    bar_change_wave_count := bar_change_wave_count + bar_change_wave_direction

if(coin_flip[1] != coin_flip)
    coin_flip_wave_count := coin_flip_wave_count + coin_flip_wave_direction

//Direction changers
if(math.abs(bar_change_wave_count) == bar_change_sine_wave_number and bar_color_time_adj[1] != bar_color_time_adj)
    bar_change_wave_direction := bar_change_wave_direction * -1

if(math.abs(volume_wave_count) == volume_sine_wave_number and volume_state_time_adj[1] != volume_state_time_adj)
    volume_wave_direction := volume_wave_direction * -1

if(math.abs(coin_flip_wave_count) == coin_flip_sine_wave_number and coin_flip[1] != coin_flip)
    coin_flip_wave_direction := coin_flip_wave_direction * -1

//Entry positions
if(bar_change_wave_count==bar_change_sine_wave_number and bar_change_trade==true)
    strategy.entry(id="short",direction=strategy.short)
if(bar_change_wave_count==bar_change_sine_wave_number*-1 and bar_change_trade==true)
    strategy.entry(id="long",direction=strategy.long)

if(volume_wave_count==volume_sine_wave_number and volume_trade==true)
    strategy.entry(id="short-volume",direction=strategy.short)
if(volume_wave_count==volume_sine_wave_number*-1 and volume_trade==true)
    strategy.entry(id="long-volume",direction=strategy.long)

if(coin_flip_wave_count==coin_flip_sine_wave_number and coin_flip_trade==true)
    strategy.entry(id="short-coinflip",direction=strategy.short)
if(coin_flip_wave_count==coin_flip_sine_wave_number*-1 and coin_flip_trade==true)
    strategy.entry(id="long-coinflip",direction=strategy.long)

hline(0, title='Center', color=color.white, linestyle=hline.style_dashed, linewidth=1)
plot(bar_change_wave_count,title="Bar Change", color=bar_color, linewidth=2)
plot(volume_wave_count,title="Volume Average Change", color=volume_state, linewidth=2)
plot(coin_flip_wave_count,title="Coin Flip Change", color=coin_flip, linewidth=2)