
Die Strategie kombiniert drei Indikatoren: ein Moving Average, ein Brin-Band und ein relativ starker Indikator. Sie handelt mit mehreren Zyklen. Beim Kauf berücksichtigt sie gleichzeitig einen schnellen Moving Average über einen schnellen Moving Average, einen relativ starken Indikator unter 50 und einen Schlusskurs unter der Brin-Band-Mitte. Beim Verkauf berücksichtigt sie einen relativ starken Indikator über 70 und einen Schlusskurs über dem Brin-Band.
Die Strategie basiert hauptsächlich auf drei Indikatoren. Der erste ist der MACD-Indikator, der aus zwei verschiedenen Perioden von schnellen und langsamen Moving Averages besteht, die ein Kaufsignal erzeugen, wenn die schnelle Linie die langsame Linie durchquert. Der zweite Indikator ist der Brin-Band, der aus drei Linien besteht.
Bei konkreten Geschäften verlangt die Strategie zunächst, dass der schnelle Moving Average durch den langsamen Moving Average gekreuzt wird, um zu zeigen, dass die Aktienpreise ansteigen, um zu kaufen. Gleichzeitig wird der RSI unter 50 verlangt, um zu zeigen, dass die Aktienpreise möglicherweise in der Überverkaufszone sind, um zu kaufen.
In Bezug auf Stopps und Losses, wenn der RSI über 70 ist, bedeutet dies, dass die Aktie möglicherweise in der Überkaufzone ist, was zeigt, dass der Aufwärtstrend nachlässt, und ein Stopp sollte in Betracht gezogen werden. Darüber hinaus, wenn der Schlusskurs über dem Brin-Band liegt, zeigt dies, dass die Aktie möglicherweise zu hoch ist und ein Rückfallrisiko besteht, und ein entsprechender Stopp sollte erfolgen.
Die Strategie nutzt die Vorzüge von drei Indikatoren, den Moving Averages, Brin-Bands und RSI, um die Zeit der Kauf- und Verkaufsprozesse genauer zu bestimmen. Die Vorteile sind:
Der Moving Average beurteilt die Aufwärtsdynamik der Aktienpreise, der Blink-Trail findet die Kaufpunkte im Tal der Aktienpreise, der RSI verhindert die Kaufhöhe der Aktien. Die Kombination der drei kann die bessere Kaufzeit in der mittleren Periode des Aktienanstiegs bestimmen.
Die Kombination von RSI und Brin kann die Spitzen der Aktienpreise gut erfassen, um Überkauf zu vermeiden und die Aktien rechtzeitig zu stoppen.
Durch die Anwendung von Mehrzyklus-Urteilen können Handelschancen auf verschiedenen Ebenen erfasst und die Gewinnspanne erweitert werden.
Die Handelslogik dieser Strategie ist einfach, klar und leicht verständlich und eignet sich für mittlere und langfristige Investitionen.
Obwohl die Strategie mehrere Kennzahlen berücksichtigt, die die Genauigkeit von Handelsentscheidungen erhöhen, bestehen folgende Hauptrisiken:
Die Parameter müssen an die tatsächlichen Umstände angepasst werden, und wenn die Parameter nicht richtig eingestellt werden, kann dies die Effektivität des Handels beeinträchtigen.
In einem Bärenmarkt fallen die Aktienkurse schneller, und die Stop-Loss-Maßnahmen dieser Strategie können nicht so wirksam sein.
Die Strategie ist besser für Portfolios geeignet, da das Risiko einer einzigen Aktie besteht und die Investitionen verteilt werden müssen.
Die Handelsfrequenz kann zu hoch sein. Wenn die Parameter richtig eingestellt sind, kann die Strategie häufig gehandelt werden. Dies erhöht die Transaktionskosten und Steuern.
Entsprechende Lösungen:
Die Parameter sollten an die Rückmessdaten angepasst werden, damit die Frequenz des Signals des Indikators besser angepasst wird.
Der Moving-Average-Zyklus kann entsprechend angepasst werden, um die Kauffrequenz zu verringern und die Verluste zu verringern.
Erhöhung der Anlagevielfalt und Verringerung des Risikos für einzelne Aktien durch dezentrale Anlage.
Die Ein- und Ausstiegsbedingungen sollen entsprechend gelockert und die Häufigkeit der Transaktionen verringert werden.
Die Strategie kann noch weiter optimiert werden:
Es können weitere Kennzahlen, wie z. B. die Transaktionsmenge, eingeführt werden, um sicherzustellen, dass die Transaktionsmenge beim Kauf erhöht wird und die Entscheidungsgenauigkeit erhöht wird.
Positionsverwaltungsmodule können hinzugefügt werden, um die Positionen dynamisch an die Marktlage anzupassen.
Die Optimierung von Parameter-Einstellungen durch Training mit großen Datenmengen kann in Kombination mit Deep-Learning-Algorithmen automatisch optimiert werden.
Es können weitere Zeiträume hinzugefügt werden, um die Anwendbarkeit zu erweitern.
Die Strategie ist insgesamt logisch klar, leicht zu verstehen, die Anwendung von mehreren Indikatoren zu einem gewissen Grad reduziert falsche Signale. Durch die Optimierung der Parameter und die Hinzufügung von mehr technischen Indikatoren kann die Entscheidungsgenauigkeit weiter verbessert werden, um die Strategie robust zu machen. Die Strategie ist besser geeignet für mittlere und lange Investitionen, kann auch für quantitative Handel.
/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//
//@author Alorse
//@version=4
strategy("MACD + BB + RSI [Alorse]", shorttitle="BB + MACD + RSI [Alorse]", overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01)
txtVer = "1.0.1"
version = input(title="Version", type=input.string, defval=txtVer, options=[txtVer], tooltip="This is informational only, nothing will change.")
src = input(title="Source", type=input.source, defval=close)
// MACD
fast_length = input(title="Fast Length", type=input.integer, defval=12, group="MACD")
slow_length = input(title="Slow Length", type=input.integer, defval=26, group="MACD")
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input(title="Oscillator MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input(title="Signal Line MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)
// Bollinger Bands
bbGroup = "Bollindger Bands"
length = input(20, title="Length", group=bbGroup)
mult = input(2.0, title="StdDev", minval=0.001, maxval=5, group=bbGroup)
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
// RSI
rsiGroup = "RSI"
lenRSI = input(14, title="Length", minval=1, group=rsiGroup)
// lessThan = input(50, title="Less than", minval=1 , maxval=100, group=rsiGroup)
RSI = rsi(src, lenRSI)
// Strategy Conditions
buy = crossover(macd, signal) and RSI < 50 and close < basis
sell = RSI > 70 and close > upper
// Stop Loss
slGroup = "Stop Loss"
useSL = input(false, title="╔══════ Enable ══════╗", group=slGroup, tooltip="If you are using this strategy for Scalping or Futures market, we do not recommend using Stop Loss.")
SLbased = input(title="Based on", type=input.string, defval="Percent", options=["ATR", "Percent"], group=slGroup, tooltip="ATR: Average True Range\nPercent: eg. 5%.")
multiATR = input(10.0, title="ATR Mult", type=input.float, group=slGroup, inline="atr")
lengthATR = input(14, title="Length", type=input.integer, group=slGroup, inline="atr")
SLPercent = input(10, title="Percent", type=input.float, group=slGroup) * 0.01
longStop = 0.0
shortStop = 0.0
if SLbased == "ATR"
longStop := valuewhen(buy, low, 0) - (valuewhen(buy, rma(tr(true), lengthATR), 0) * multiATR)
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop := (valuewhen(sell, rma(tr(true), lengthATR), 0) * multiATR) + valuewhen(sell, high, 0)
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] > shortStopPrev ? max(shortStop, shortStopPrev) : shortStop
if SLbased == "Percent"
longStop := strategy.position_avg_price * (1 - SLPercent)
shortStop := strategy.position_avg_price * (1 + SLPercent)
strategy.entry("Long", true, when=buy)
strategy.close("Long", when=sell, comment="Exit")
if useSL
strategy.exit("Stop Loss", "Long", stop=longStop)