Der Zweck dieser Strategie ist es, zu testen, ob verschiedene Eingabevariablen wie Kerzenfarben, Volumen und zufällige Methoden verwendet werden können, um Preisänderungen in Form von Sinuswellen vorherzusagen.
Die Strategie ist in drei Teile unterteilt. Der erste Teil erkennt Veränderungen der Kerzenfarben. Wenn eine Kerze mit einer anderen Farbe nach mehreren Kerzen der gleichen Farbe erscheint, dreht sich die Sinuswelle Richtung. Der zweite Teil erkennt, ob das Volumen höher oder niedriger als der Durchschnitt ist. Wenn der Durchschnitt gebrochen wird, dreht sich die Welle Richtung. Der dritte Teil verwendet eine zufällige Methode, um das Münzwerfen zu simulieren. Wenn das zufällige Ergebnis anders ist, dreht sich die Welle Richtung. Wenn diese drei Wellen sich bis zur festgelegten Anzahl von Zeiten ansammeln, werden Handelsentscheidungen getroffen.
Der Code steuert den Lauf der Wellen, indem er die aktuelle Richtung, die Anzahl der Spitzen und die Position des vorherigen Kerzenstäbes für die drei Wellen verfolgt.
Diese Sinuswellen-Theorie scheint sinnvoll zu sein, und die simulierten Wellenformen haben auch eine gewisse Korrelation mit dem realen Markt. Aber durch den Test dieser Strategie kann festgestellt werden, dass sie tatsächlich zufällige Ergebnisse sind. Welche Kombination von Variablen die Wellenform ähnlicher macht, verbessert die Handelsergebnisse nicht.
Einer der Vorteile dieser Strategie besteht also darin, das falsche Konzept zu widerlegen, dass "der Markt vorhersehbar ist". Variablen auf dem Markt beeinflussen die Preise, aber sie sind unvorhersehbar, und zufällige Entscheidungen können auch ähnliche Ergebnisse erzielen.
Das größte Risiko dieser Strategie besteht darin, dass es schwierig ist, Gewinn und Verlust beim Zufallshandel zu bestimmen. Die Ergebnisse unter verschiedenen Parametern sind auch schwierig vorherzusagen, und es ist unmöglich, im Voraus festzustellen, ob es profitabel sein kann.
Darüber hinaus ist die Sinuswellen-Vorhersage-Theorie selbst falsch. Marktveränderungen sind zu komplex, um sie mit einfacher Zyklosität zu simulieren.
Zur Verringerung der Risiken ist es notwendig, die zufälligen Ergebnisse weiter zu analysieren, um den Parameterbereich zu bestimmen; oder andere analytische Methoden zu kombinieren, um Handelssignale zu überprüfen.
Diese Strategie kann in folgenden Richtungen optimiert werden:
Durch das Testen verschiedener Sinuswellen veranschaulicht diese Strategie die Unberechenbarkeit des Marktes und widerlegt gleichzeitig die falsche Theorie, dass Wellenzyklen zur Vorhersage verwendet werden.
Als nächstes kann die Praktikabilität der Strategie verbessert werden, indem Variablen erhöht, Wellenformen kombiniert, Stopps gesetzt und Parameter optimiert werden. Aber der Schlüssel ist immer noch zu verstehen, dass Marktveränderungen komplex und unvorhersehbar sind. Was wir tun müssen, ist, zufällige Risiken zu reduzieren, anstatt den Markt vorherzusagen.
/*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)