Preisunterschied und Trend nach Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-10-25 18:02:11
Tags:

img

Übersicht

Diese Strategie verwendet den CCI-Indikator und den Momentum-Indikator in Kombination mit dem RSI-Indikator, um Markttrends zu identifizieren und einzutreten, wenn eine Lücke in der Überkauft/Überverkauft-Zone auftritt.

Strategie Logik

Zunächst bestimmt die Strategie die Long- und Short-Signale durch den CCI-Indikator oder den Momentum-Indikator, der über/unter die Nulllinie überschreitet.

Darüber hinaus kann sich die Strategie dafür entscheiden, RSI-Bullish/Bearish-Divergenzen zu bestimmen, um zuverlässigere Signale zu gewährleisten.

Wenn CCI oder Momentum-Langsignal auslöst und der RSI in der Überverkaufszone ist, wird die Strategie überprüfen, ob vorheriges Hoch und Tief beide über der Bollinger-Band-Mittellinie liegen. Wenn ja, wird ein langes Signal generiert. Umgekehrt, wenn kurzes Signal auslöst und vorheriges Hoch und Tief unter der Mittellinie liegen, wird ein kurzes Signal generiert.

Die Strategie nutzt somit sowohl Trend- als auch Schwingungsindikatoren, um frühzeitig in einen Trend zu gelangen und einen falschen Ausbruch mit mittlerem Umkehrbereich zu vermeiden.

Analyse der Vorteile

  1. Durch die Kombination von Trend- und Schwingungsindikatoren kann der Trend frühzeitig eingegriffen und unnötige Positionen auf dem Marktbereich vermieden werden.

  2. Die Verwendung von Bollinger-Band-Mittelwerten mit Preislücken filtert falsche Ausbrüche effektiv.

  3. Die Überprüfung des historischen RSI verhindert, dass falsche Handelssignale generiert werden.

  4. Voll automatisierter Handel ohne manuelle Eingriffe, geeignet für den Algorithmushandel.

  5. Flexible Anpassung der Parameter an verschiedene Handelsprodukte.

  6. Stop-Loss und Gewinnkontrolle Risiken wirksam.

Risikoanalyse

  1. Bei unzulässigen Bollinger-Band-Parametern kann eine ungültige Identifizierung der mittleren Reversion eintreten.

  2. Falsche Indikatorparameter können zu viele falsche Signale erzeugen.

  3. Ein gescheiterter Ausbruch erfordert einen rechtzeitigen Stop-Loss, wenn der Preis auf den Durchschnitt zurückzieht.

  4. Eine schlechte Liquidität kann zu einem ineffektiven Breakout-Handel führen.

  5. Es müssen ausreichende historische Daten vorliegen, um eine schlechte Kurvenanpassung zu vermeiden.

  6. Achten Sie auf Handelssitzungen, um einen falschen Ausbruch zu vermeiden.

Verbesserungsrichtlinien

  1. Optimierung der Bollinger-Bänderparameter für einen stabileren Mittelumkehrbereich.

  2. Testparameter auf verschiedenen Produkten für eine bessere Optimierung.

  3. Zusätzliche Positionsgröße, um übergroße Einzelpositionen zu vermeiden.

  4. Hinzufügen eines Handelssitzungsfilters, um hauptsächlich in aktiven Stunden zu handeln.

  5. Einbeziehung von maschinellen Lernmodellen zur Erzeugung intelligenter Signale.

  6. Integrieren Sie mehr Datenquellen, um die allgemeine Marktentwicklung zu ermitteln.

  7. Zusätzlich werden weitere Indikatoren hinzugefügt, um ein solides Indikatorensammlement zu bilden.

Schlussfolgerung

Diese Strategie integriert Trend- und Oszillationsindikatoren, um Trends frühzeitig zu erfassen. Mit Bollinger-Band-Mittelwert und Preislücken vermeidet sie effektiv falsche Ausbrüche. Flexible Parameter passen sich mit großartigen Backtest-Ergebnissen an verschiedene Produkte an. Die nächsten Schritte sind die Optimierung von Parametern und Modellensemble für mehr Robustheit und das Erreichen konsistenter Überzinsungen auf lange Sicht.


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='BroTheJo Strategy', shorttitle='BTJ', overlay=true)

// Input settings
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'])
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.6, title='Outer Bands Multiplier')

// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)

// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought

// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]

// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na

// Entry Conditions
prevHigh = ta.highest(high, 1)
prevLow = ta.lowest(low, 1)
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)

// Plotting
oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

// Strategy logic
if (longEntryCondition)
    strategy.entry("Buy", strategy.long)
if (shortEntryCondition)
    strategy.entry("Sell", strategy.short)

// Close all open positions when outside of bands
closeAll = (high >= upperBand) or (low <= lowerBand)

if (closeAll)
    strategy.close_all("Take Profit/Cut Loss")


// Plotting
plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1)
plot(meanReversion, title='Mean', color=color.gray, linewidth=1)
plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)

Mehr