
Die Strategie basiert auf dem goldenen Kreuzprinzip der Moving Averages. Konkret verwendet sie zwei einfache Moving Averages mit unterschiedlichen Perioden, nämlich die 50-Periodenlinie und die 200-Periodenlinie. Wenn die 50-Periodenlinie von unten die 200-Periodenlinie durchbricht, erzeugt sie ein Kaufsignal; wenn die 50-Periodenlinie von oben die 200-Periodenlinie durchbricht, erzeugt sie ein Verkaufsignal.
Die Strategie wurde in der Pine Script-Sprache geschrieben, und die Hauptlogik lautet wie folgt:
Die Bedeutung des SMA-Indikators besteht darin, dass er die Lärm von Marktdaten effektiv ausfiltert und den langfristigen Trend erfasst. Die schnelle SMA-Linie durchquert die langsame SMA-Linie, um zu zeigen, dass die kurzfristige Aufwärtsdynamik den langfristigen Abwärtstrend besiegt und ein Kaufsignal erzeugt.
Die Strategie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken:
Es kann ein falscher Durchbruch auftreten, der die Strategie zu einem falschen Signal führt. Die beiden SMA-Parameter können entsprechend angepasst werden, um die Wahrscheinlichkeit eines falschen Durchbruchs zu verringern.
Die Kurzzeit-SMA-Phasen sind für langfristige Anleger geeignet. Sie können entsprechend verkürzt werden.
Der Rückzug kann größer sein. Sie können einen Stop-Loss-Punkt festlegen oder die Positionsverwaltung entsprechend anpassen.
Die Strategie kann in folgenden Dimensionen weiter optimiert werden:
Filter für weitere Kennzahlen, Kombination mehrerer Kauf-/Verkaufskonditionen, Verringerung der Wahrscheinlichkeit von Falschsignalen.
Erhöhung der Stop-Loss-Mechanismen. Erzwungene Stop-Loss-Mechanismen, wenn der Preis unter einem bestimmten Niveau fällt.
Optimierung des Positionsmanagements. Zum Beispiel, wenn Sie mit dem Trend aufsteigen, Verluste verfolgen, etc. Zurückziehen kontrollieren und höhere Erträge anstreben.
Optimierung der Parameter. Beurteilung der Auswirkungen der verschiedenen Parameter auf das Risiko-Rendite-Verhältnis.
Die Strategie ist im Großen und Ganzen eine typische Trendverfolgungsstrategie. Sie nutzt die Vorteile der SMA, um einfache und effiziente Capture Longline-Trends. Sie kann den Raum für die Anpassung an den eigenen Stil und die Parameter anpassen.
/*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, "#.##"))