Doppelter gleitender Durchschnitt, Goldenes Kreuz und Dead Cross, quantitative Strategie


Erstellungsdatum: 2023-12-05 10:24:34 zuletzt geändert: 2023-12-05 10:24:34
Kopie: 0 Klicks: 704
1
konzentrieren Sie sich auf
1619
Anhänger

Doppelter gleitender Durchschnitt, Goldenes Kreuz und Dead Cross, quantitative Strategie

Überblick

Die Strategie basiert auf dem Gold- und Diebstahlsignal des Dual ALMA Moving Averages, kombiniert mit dem Multi-Blank-Signal des MACD-Indikators, um automatische Multi-Blankungen zu realisieren. Die Strategie gilt für Zeiträume von 4 Stunden und mehr, die Testdaten sind BNB/USDT, die Zeiträume sind 2017 bis heute, die Gebühren sind auf 0,03% festgelegt.

Strategieprinzip

Die Strategie verwendet ALMA-Schnell- und Langleiter, um einen doppelten Moving-Average zu erstellen. Die Schnell- und Langleiterlänge sind 20, die Langleiterlänge ist 40, beide mit einer Offsetsrate von 0,9 und einer Standardabweichung von 5. Die Schnell- und Langleiterlänge erzeugen mehrere Signale und die Langleiterlänge weniger.

Gleichzeitig ist die Strategie in Kombination mit dem MACD-Grad-Signal. Mehrsignale sind nur dann wirksam, wenn der MACD-Grad-Signal positiv ist (Aufwärts) und mehrsignale sind nur dann wirksam, wenn der MACD-Grad-Signal negativ ist (Rückwärts).

Die Strategie setzt gleichzeitig eine Stop-Loss-Bedingung. Ein Plus-Stop ist 2-mal, ein Stop-Loss ist 0.2-mal; ein Off-Stop ist 0.05-mal, ein Stop-Loss ist 1-mal.

Analyse der Stärken

Die Strategie kombiniert die Trend-Erkenntnis der zwei Bewegungsmittel mit der Energie-Erkenntnis des MACD-Indikators, um die falschen Signale effektiv zu filtern und die Eingabe-Genauigkeit zu verbessern. Die Stop-Loss-Einstellung ist vernünftig, maximiert die Gewinnbindung und vermeidet große Verluste.

Die Rückmeldedaten, die seit 2017 angenommen wurden, beinhalten mehrere Bullen-Bären-Umstellungen. Die Strategie hat sich unter über die Periode gehenden Bedingungen gut entwickelt. Dies beweist, dass die Strategie den linearen und nicht-linearen Merkmalen des Marktes angepasst ist.

Risikoanalyse

Die Strategie birgt folgende Risiken:

  1. Der Doppel-Moving-Average selbst ist zurückgeblieben und könnte eine Gelegenheit zur Verkürzung verpassen.
  2. Die Strategie wird kein Signal erzeugen, wenn der MACD-Drehkreis 0 ist
  3. Die Stop-Loss-Ratio ist vorab eingestellt und kann von der tatsächlichen Situation abweichen.

Die Lösung:

  1. Um die Bewegungsmittel-Periode angemessen zu verkürzen und die Sensibilität für kurze Linien zu erhöhen
  2. Optimierung der MACD-Parameter, um die Schwankungen des Diagramms häufiger zu machen
  3. Dynamische Anpassung der Einstellungen für die Stop-Loss-Einstellung

Optimierungsrichtung

Die Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Versuche mit verschiedenen Arten von gleitenden Durchschnitten, um bessere Effekte zu finden
  2. Optimierung von Moving Averages und MACD-Parametern für verschiedene Sorten und Perioden
  3. Hinzufügen von zusätzlichen Bedingungen, z. B. Änderungen des Handelsvolumens, Filtersignale
  4. Die Strategie wird durch die Anpassung der Stop-Loss-Raten in Echtzeit erleichtert.

Zusammenfassen

Diese Strategie kombiniert erfolgreich die Trendbeurteilung des Moving Averages mit der unterstützten Beurteilung des MACD und setzt eine angemessene Stop-Loss-Anordnung, um unter verschiedenen Umständen einen stabilen Gewinn zu erzielen. Die Stabilität und Profitabilität der Strategie können durch die kontinuierliche Optimierung der Parameter-Einstellungen und die Hinzufügung zusätzlicher Filterbedingungen weiter verbessert werden.

Strategiequellcode
/*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')