Diese Strategie basiert auf dem goldenen Kreuzprinzip der gleitenden Durchschnitte. Insbesondere verwendet sie zwei einfache gleitende Durchschnitte unterschiedlicher Perioden, nämlich die 50-Periodenlinie und die 200-Periodenlinie. Wenn die 50-Periodenlinie von unten durch die 200-Periodenlinie bricht, wird ein Kaufsignal generiert. Wenn die 50-Periodenlinie von oben durch die 200-Periodenlinie bricht, wird ein Verkaufssignal generiert.
Die Strategie ist in der Sprache Pine Script geschrieben, wobei die Hauptlogik folgendermaßen ist:
Die Bedeutung der Verwendung des SMA-Indikators besteht darin, dass er effektiv Marktlärm filtern und langfristige Trends erfassen kann. Wenn die schnellere SMA-Linie über die langsamere SMA-Linie geht, zeigt sie an, dass die kurzfristige Aufwärtstrenddynamik den langfristigen Abwärtstrend besiegt und ein Kaufsignal erzeugt.
Die Strategie weist folgende Vorteile auf:
Die Strategie birgt auch einige Risiken:
Es kann zwei SMA-Parameter anpassen, um die Wahrscheinlichkeit eines falschen Ausbruchs zu reduzieren.
Kann auf den kurzfristigen Markt reagieren, nur für langfristige Anleger geeignet. Kann die schnelle SMA-Periode entsprechend verkürzen.
Der Drawdown kann groß sein, den Stop-Loss einstellen oder das Positionsmanagement richtig anpassen.
Die Strategie kann in folgenden Aspekten weiter optimiert werden:
Hinzufügen anderer Indikatoren zur Filterung, die mehrere Kauf-/Verkaufsbedingungen kombinieren, um falsche Signale zu reduzieren.
Zusätzlicher Stop-Loss-Mechanismus: obligatorischer Stop-Loss, wenn der Preis ein bestimmtes Niveau überschreitet.
Optimieren Sie das Positionsmanagement, z. B. Pyramiden entlang des Trends, Stop-Loss-Verfolgung usw. Um den Rückzug zu kontrollieren und höhere Renditen zu erzielen.
Optimierung der Parameter: Bewertung der Auswirkungen verschiedener Parameter auf die Rendite/Risiko-Ratio.
Im Allgemeinen ist dies eine typische Trendverfolgungsstrategie. Es nutzt den Vorteil von SMA, um langfristige Trends einfach und effizient zu erfassen. Kann basierend auf dem Stil und dem Tuning-Raum angepasst werden.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-02 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // www.tradingview.com/u/TradeFab/ // www.tradefab.com // ___ __ __ __ __ __ // | |__) /\ | \ |__ |__ /\ |__) // | | \ /~~\ |__/ |__ | /~~\ |__) // // DISCLAIMER: Futures, stocks and options trading involves substantial risk of loss // and is not suitable for every investor. You are responsible for all the risks and // financial resources you use and for the chosen trading system. // Past performance is not indicative for future results. In making an investment decision, // traders must rely on their own examination of the entity making the trading decisions! // // TradeFab's Golden Cross Strategy. // The strategy goes long when the faster SMA 50 (the simple moving average of the last 50 bars) crosses // above the SMA 200. Orders are closed when the SMA 50 crosses below SMA 200. The strategy does not short. // VERSION = "1.2" // 1.2 FB 2020-02-09 converted to Pine version 4 // 1.1 FB 2017-01-15 added short trading // 1.0 FB 2017-01-13 basic version using SMAs // strategy( title = "TFs Golden Cross " + VERSION, shorttitle = "TFs Golden Cross " + VERSION, overlay = true ) /////////////////////////////////////////////////////////// // === INPUTS === /////////////////////////////////////////////////////////// inFastSmaPeriod = input(title="Fast SMA Period", type=input.integer, defval=50, minval=1) inSlowSmaPeriod = input(title="Slow SMA Period", type=input.integer, defval=200, minval=1) // backtest period testStartYear = input(title="Backtest Start Year", type=input.integer, defval=2019, minval=2000) testStartMonth = input(title="Backtest Start Month", type=input.integer, defval=1, minval=1, maxval=12) testStartDay = input(title="Backtest Start Day", type=input.integer, defval=1, minval=1, maxval=31) testStopYear = input(title="Backtest Stop Year", type=input.integer, defval=2099, minval=2000) testStopMonth = input(title="Backtest Stop Month", type=input.integer, defval=12, minval=1, maxval=12) testStopDay = input(title="Backtest Stop Day", type=input.integer, defval=31, minval=1, maxval=31) /////////////////////////////////////////////////////////// // === LOGIC === /////////////////////////////////////////////////////////// smaFast = sma(close, inFastSmaPeriod) smaSlow = sma(close, inSlowSmaPeriod) bullishCross = crossover (smaFast, smaSlow) bearishCross = crossunder(smaFast, smaSlow) // detect valid backtest period isTestPeriod() => true /////////////////////////////////////////////////////////// // === POSITION EXECUTION === /////////////////////////////////////////////////////////// strategy.entry("long", strategy.long, when=bullishCross) strategy.entry("short", strategy.short, when=bearishCross) /////////////////////////////////////////////////////////// // === PLOTTING === /////////////////////////////////////////////////////////// // background color nopColor = color.new(color.gray, 50) bgcolor(not isTestPeriod() ? nopColor : na) bartrendcolor = close > smaFast and close > smaSlow and change(smaSlow) > 0 ? color.green : close < smaFast and close < smaSlow and change(smaSlow) < 0 ? color.red : color.blue barcolor(bartrendcolor) plot(smaFast, color=change(smaFast) > 0 ? color.green : color.red, linewidth=2) plot(smaSlow, color=change(smaSlow) > 0 ? color.green : color.red, linewidth=2) // label posColor = color.new(color.green, 75) negColor = color.new(color.red, 75) dftColor = color.new(color.blue, 75) posProfit= (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0 posDir = (strategy.position_size > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat" posCol = (posProfit > 0) ? posColor : (posProfit < 0) ? negColor : dftColor var label lb = na label.delete(lb) lb := label.new(bar_index, max(high, highest(5)[1]), color=posCol, text="Pos: "+ posDir + "\nPnL: "+tostring(posProfit, "#.##")+"%" + "\nClose: "+tostring(close, "#.##"))