Diese Strategie ist ein quantitatives Handelssystem, das auf Multi-Periode Simple Moving Average (SMA) Crossover-Signalen basiert. Sie identifiziert in erster Linie Pullback-Möglichkeiten innerhalb langfristiger Aufwärtstrends. Die Strategie verwendet SMAs von fünf verschiedenen Perioden (5, 10, 20, 60 und 120 Tage), um Markttrends und Handelsmöglichkeiten durch ihre relativen Positionen und Crossover-Signalen zu bestimmen.
Die Kernlogik umfasst mehrere Schlüsselkomponenten:
Die Strategie baut ein Handelssystem auf, das sich darauf konzentriert, Pullback-Möglichkeiten innerhalb langfristiger Aufwärtstrends durch den koordinierten Einsatz von mehrjährigen SMAs zu erfassen.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("Long-Term Growing Stock Strategy", overlay=true) // Date Range // STEP 1. Create inputs that configure the backtest's date range useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.") backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period") // STEP 2. See if current bar falls inside the date range inTradeWindow = true // Calculate EMAs // ema20 = ta.ema(close, ema20_length) // ema60 = ta.ema(close, ema60_length) // ema120 = ta.ema(close, ema120_length) sma5 = ta.sma(close, 5) sma10 = ta.sma(close, 10) sma20 = ta.sma(close, 20) sma60 = ta.sma(close, 60) sma120 = ta.sma(close, 120) // Long-term growth condition: EMA 20 > EMA 60 > EMA 120 longTermGrowth = sma20 > sma60 // and ema60 > ema120 // Entry condition: Stock closes below EMA 20 and then rises back above EMA 10 // entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20) entryCondition = sma5[1] <= sma20[1] and sma5 > sma20 // ta.crossover(sma5, sma20) // Exit condition: EMA 20 drops below EMA 60 // exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30) exitCondition = ta.crossover(sma20, sma5) // Execute trades if entryCondition and inTradeWindow strategy.entry("Long Entry", strategy.long) if exitCondition and inTradeWindow strategy.close("Long Entry") // plotchar(true, char="sma5: " + str.tostring(sma5)) // plotchar(true, char="sma5: " + sma20) // label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small) // label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small) // x = time + (time - time[1]) * offset_x // var label lab = na // label.delete(lab) // lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up) // label.set_x(lab, x) // Plot EMAs for visualization // plot(ema20, color=color.red, title="EMA 20") // plot(ema60, color=color.green, title="EMA 60") // plot(ema120, color=color.blue, title="EMA 120")