Diese Strategie basiert auf den goldenen Kreuz- und toten Kreuzsignalen der doppelten ALMA- gleitenden Durchschnittslinien, kombiniert mit den langen und kurzen Signalen des MACD-Indikators, um automatische Long- und Short-Positionen zu erzielen.
Die Strategie verwendet schnelle und langsame Linien, die aus ALMA konstruiert wurden, um den doppelten gleitenden Durchschnitt zu erstellen. Die Schnelle Linienlänge beträgt 20 und die langsame Linienlänge 40, wobei beide eine Verschiebung von 0,9 und eine Standardabweichung von 5 annehmen. Wenn die schnelle Linie über die langsame Linie geht, wird ein langes Signal erzeugt. Wenn die schnelle Linie unterhalb der langsamen Linie geht, wird ein kurzes Signal erzeugt.
Gleichzeitig enthält die Strategie das Histogrammsignal des MACD-Indikators. Nur wenn das MACD-Histogramm positiv ist (steigend), ist das lange Signal gültig; nur wenn das MACD-Histogramm negativ ist (fallend), ist das kurze Signal gültig.
Die Strategie legt auch die Bedingungen für Take Profit und Stop Loss fest. Der Long Take Profit beträgt 2 Mal und der Stop Loss 0,2 Mal; der Short Take Profit beträgt 0,05 Mal und der Stop Loss 1 Mal.
Die Strategie kombiniert das Trendbeurteil des doppelten gleitenden Durchschnitts und das Energiebeurteil des MACD-Indikators, das falsche Signale effektiv filtern und die Genauigkeit des Eintrags verbessern kann.
Die Backtest-Daten werden seit 2017 übernommen und decken mehrere Bullen- und Bären-Konversionszyklen ab. Die Strategie funktioniert immer noch über die Perioden hinweg gut. Dies beweist, dass sich die Strategie sowohl an die Linearität als auch an die Nichtlinearität des Marktes anpasst.
Die Strategie birgt folgende Risiken:
Lösungen:
Die Strategie kann auch in folgenden Aspekten optimiert werden:
Die Strategie kombiniert erfolgreich das Trendurteil von gleitenden Durchschnitten und das Hilfsurteil des MACD und legt angemessene Take-Gewinne und Stop-Losses fest, die in verschiedenen Marktbedingungen stabile Renditen erzielen können.
/*backtest start: 2023-11-04 00:00:00 end: 2023-12-04 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/ // © exlux99 //@version=4 strategy(title = "Full Crypto Swing Strategy ALMA Cross", overlay = true, pyramiding=1,initial_capital = 1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03) //time condition fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2010, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2031, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations") haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low //alma fast and slow src = haClose windowsize = input(title="Length Size Fast", type=input.integer, defval=20) windowsize2 = input(title="Length Size Slow", type=input.integer, defval=40) offset = input(title="Offset", type=input.float, defval=0.9, step=0.05) sigma = input(title="Sigma", type=input.float, defval=5) outfast=alma(src, windowsize, offset, sigma) outslow=alma(src, windowsize2, offset, sigma) //macd fast_length = input(title="Fast Length", type=input.integer, defval=6) slow_length = input(title="Slow Length", type=input.integer, defval=25) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) // Calculating fast_ma = ema(src, fast_length) slow_ma = ema(src, slow_length) macd = fast_ma - slow_ma signal = ema(macd, signal_length) hist = macd - signal long=crossover(outfast,outslow) and hist > hist[1] and time_cond short=crossunder(outfast,outslow) and hist < hist[1] and time_cond takeProfit_long=input(2.0, step=0.005) stopLoss_long=input(0.2, step=0.005) takeProfit_short=input(0.05, step=0.005) stopLoss_short=input(1.0, step=0.005) strategy.entry("long",1,when=long) strategy.entry("short",0,when=short) strategy.exit("short_tp/sl", "long", profit=close * takeProfit_long / syminfo.mintick, loss=close * stopLoss_long / syminfo.mintick, comment='LONG EXIT', alert_message = 'closeshort') strategy.exit("short_tp/sl", "short", profit=close * takeProfit_short / syminfo.mintick, loss=close * stopLoss_short / syminfo.mintick, comment='SHORT EXIT', alert_message = 'closeshort')