Diese Strategie erzeugt Kauf- und Verkaufssignale basierend auf der Kreuzung des Preises mit einem gleitenden Durchschnitt. Sie bietet verschiedene Arten von gleitenden Durchschnitten und einen Toleranzparameter, um falsche Ausbrüche zu filtern.
Die Strategie berechnet einen gleitenden Durchschnitt mit einer Länge N basierend auf dem Schlusskurs. Zu den typischen gleitenden Durchschnittsarten gehören der einfache gleitende Durchschnitt (SMA), der exponentielle gleitende Durchschnitt (EMA), der gewichtete gleitende Durchschnitt (WMA) usw. Dann wird ein Toleranzniveau festgelegt, z. B. 5%, und Oberband (1,05 Mal gleitender Durchschnitt) und Unterband (0,95 Mal gleitender Durchschnitt) werden berechnet. Wenn der Schlusskurs über den oberen Band überschreitet, wird ein Kaufsignal generiert. Wenn der Schlusskurs unter dem unteren Band überschreitet, wird ein Verkaufssignal generiert. Dies hilft, einige falsche Ausbrüche zu filtern.
Im Großen und Ganzen ist dies eine typische Trendfolgestrategie. Sie verwendet die Beziehung zwischen Preis und gleitendem Durchschnitt, um Trends zu bestimmen, mit einer gewissen Flexibilität. Durch Parameteroptimierung und richtige Signalfilterung kann sie eine anständige Quant-Strategie werden.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-25 00:00:00 period: 1h basePeriod: 15m 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/ // © RafaelPiccolo //@version=4 strategy("Price X MA Cross", overlay=true) typ = input("HMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len = input(100, minval=1, title="Length") src = input(close, "Source", type=input.source) tol = input(0, minval=0, title="Tolerance (%)", type=input.float) shortOnly = input(false, "Short only") tema(src, len)=> ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) return = 3 * (ema1 - ema2) + ema3 getMAPoint(type, len, src)=> return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len) ma = getMAPoint(typ, len, src) upperTol = ma * (1 + tol/100) lowerTol = ma * (1 - tol/100) longCondition = crossover(close, upperTol) shortCondition = crossunder(close, lowerTol) if (shortCondition) strategy.entry("Short", strategy.short) if (longCondition) if (shortOnly) strategy.close("Short") else strategy.entry("Long", strategy.long) plot(ma, "Moving Average", close > ma ? color.green : color.red, linewidth = 2) t1 = plot(tol > 0 ? upperTol : na, transp = 70) t2 = plot(tol > 0 ? lowerTol : na, transp = 70) fill(t1, t2, color = tol > 0 ? color.blue : na)