CCI+RSI+KC Trendfilterung Long- und Short-Zweiwege-Handelsstrategie

CCI RSI KC SMA EMA SMMA CMA TMA
Erstellungsdatum: 2024-05-15 16:56:03 zuletzt geändert: 2024-05-15 16:56:03
Kopie: 1 Klicks: 670
1
konzentrieren Sie sich auf
1617
Anhänger

CCI+RSI+KC Trendfilterung Long- und Short-Zweiwege-Handelsstrategie

Überblick

Die Strategie nutzt die drei technischen Indikatoren CCI, RSI und KC in Kombination mit einem Trendfilter, um einen mehrspurigen, bidirektionalen Handel in den Währungspaaren AUDNZD und GBPNZD zu realisieren. Die Strategie beurteilt überkaufte und überverkaufte Geschäfte anhand des CCI und des RSI, wobei der KC als Referenz für die Stop-Loss-Stop verwendet wird. Die Strategie wird unter normalen Bedingungen mit einem Moving Average als Trendfilter betrieben.

Strategieprinzip

  1. Berechnen Sie den CCI-, RSI- und KC-Indikator. Der KC wird mit ATR auf der oberen Bahn und mit ATR abgezogen auf der unteren Bahn berechnet.
  2. Wählen Sie den Moving Average-Typ (SMA, EMA, SMMA, CMA oder TMA) und die Trendfiltermethode (Off, Positiv oder Inversion) nach den Eingabeparametern.
  3. Mehrköpfe-Positionsbedingungen: Erlaubt, mehr zu machen, CCI < Überverkaufslinie, Schlusskurs < KC nach unten, RSI < Überverkaufslinie, Transaktionsvolumen> 50 Zyklusdurchschnitt*Es gibt keine weiteren Positionen.
  4. Leerlauf-Positionsbedingungen: Leerlauf erlaubt, CCI> Überkauflinie, Schlusskurs> KC auf Kurs, RSI> Überkauflinie, Transaktionsvolumen> 50 Zyklusdurchschnitt*Das ist die zweite offenen Position, die die Bank derzeit hat.
  5. Mehrfach-Plating-Bedingungen: CCI>0 ≠ Leerplating-Bedingungen: CCI ≠
  6. Wenn eine Position geöffnet wird, wird eine Warnung ausgesprochen, wenn eine Position gelöst wird, wird eine Warnung ausgesprochen.

Strategische Vorteile

  1. Die Daten werden in einer Reihe von verschiedenen Indikatoren zusammengefasst, um die Signalgenauigkeit zu verbessern.
  2. Der Trendfilter kann flexibel an die Marktentwicklung angepasst werden.
  3. Es gibt verschiedene Arten von Moving Averages, die unterschiedlichen Markteigenschaften angepasst werden können.
  4. Es ist nachweisbar, dass es sich um eine langjährige historische Datenüberprüfung handelt, die eine gute Stabilität und Langzeitanwendbarkeit aufweist.
  5. Es ist ein zweiseitiger Handel, der sich an verschiedene Situationen anpasst und mehr Gewinnchancen bietet.
  6. Die Automatisierung ist hochgradig, erfordert keine manuelle Intervention und spart Zeit und Energie.

Strategisches Risiko

  1. Es fehlen die traditionellen Stop-Loss-Stopps, die bei Extremsituationen zu größeren Rückzügen führen können.
  2. In einem wackligen Markt kann es zu häufigen Negativpositionen kommen, was zu höheren Transaktionskosten führt.
  3. Bei relativ kurzen CCI-Zyklen kann es zu Geräuschsignalen kommen.
  4. Trend-Filter wirken nur begrenzt, wenn Trends unklar sind oder die Marktschwankungen zunehmen.
  5. Fixe Positionen, die sich nicht an Veränderungen der Marktfluktuation anpassen können.

Richtung der Strategieoptimierung

  1. Es kann in Betracht gezogen werden, den mobilen Stop-Loss oder den Fixed-Point-Stop-Loss zu erhöhen, um das Risiko eines einzelnen Handels zu kontrollieren.
  2. Die Parameter für RSI und CCI können weiter optimiert werden, um das Signalgeräusch zu reduzieren.
  3. Ein Einführung von Volatilitätsindikatoren wie ATR, die die Positionen und Stop-Loss-Positionen an die Marktfluktuation anpassen, kann in Erwägung gezogen werden.
  4. Weitere Währungspaare hinzuzufügen und die Parameter individuell nach den Merkmalen jeder Sorte zu optimieren.
  5. Es ist ein Versuch, künstliche Intelligenz (KI) Technologien wie Machine Learning einzuführen, um die Optimierungsparameter selbst anzupassen.

Zusammenfassen

Die Strategie verwendet mehrere klassische Indikatoren, die im Trading View erstellt und getestet werden können. Die Testergebnisse sind gut, aber in der Praxis ist es wichtig, die Risiken zu kontrollieren und die Parameter anzupassen. Es wird empfohlen, zuerst kleine Investitionen zu testen und nach dem Sammeln von Erfahrungen schrittweise zu investieren.

Strategiequellcode
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('CCI Strategy with Trend Filter AUDNZD, GBPNZD', overlay=true, default_qty_type=strategy.cash, default_qty_value=50000, commission_value=0.0005, slippage=2, initial_capital=10000)

// State variables to ensure one entry per signal
var bool isLongOpen = false
var bool isShortOpen = false

// Input Parameters for allowing long and short trades
allowLong = input(true, title='Allow Long Trades')
allowShort = input(true, title='Allow Short Trades')

// Trend Filter Inputs
maType = input.string(title='MA Type', options=['OFF', 'SMA', 'EMA', 'SMMA', 'CMA', 'TMA'], defval='OFF')
trendFilterMethod = input.string(title='Trend Filter Method', options=['OFF', 'Normal', 'Reversed'], defval='OFF')
maLength = input(14, title='MA Length')

// Other Input Parameters
lengthKC = input(30, title='Keltner Channels Length')
multKC = input(0.7, title='Keltner Channels Multiplier')
lengthCCI = input(5, title='CCI Length')
overboughtCCI = input(75, title='CCI Overbought Level')
oversoldCCI = input(-75, title='CCI Oversold Level')
rsiPeriod = input(30, title='RSI Period')
rsiOverbought = input(60, title='RSI Overbought Level')
rsiOversold = input(60, title='RSI Oversold Level')
volumeMultiplier = input.float(0, title='Volume Multiplier', step=0.1, minval=0)

// Define Moving Averages
var float maValue = na
if maType == 'SMA'
    maValue := ta.sma(close, maLength)
else if maType == 'EMA'
    maValue := ta.ema(close, maLength)
else if maType == 'SMMA'
    float initialSMMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? initialSMMA : (maValue[1] * (maLength - 1) + close) / maLength
else if maType == 'CMA'
    float firstSMA = ta.sma(close, maLength)
    float secondSMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? firstSMA : (firstSMA + secondSMA - maValue[1]) / 2
else if maType == 'TMA'
    maValue := ta.sma(ta.sma(close, math.round(maLength / 2)), math.round(maLength / 2) + 1)

// Entry Conditions with Trend Filter
longCondition = allowLong and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close > maValue or trendFilterMethod == 'Reversed' and close < maValue)
shortCondition = allowShort and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close < maValue or trendFilterMethod == 'Reversed' and close > maValue)

// Keltner Channels
typicalPrice = hlc3
middleLine = ta.sma(typicalPrice, lengthKC)
range_1 = multKC * ta.atr(lengthKC)
upperChannel = middleLine + range_1
lowerChannel = middleLine - range_1

// CCI
cci = ta.cci(close, lengthCCI)

// RSI
rsi = ta.rsi(close, rsiPeriod)

// Volume
volCondition = volume > ta.sma(volume, 50) * volumeMultiplier

// Combined Entry Conditions with Trend Filter and state check
longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition and not isLongOpen
shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition and not isShortOpen

// Execute orders at the open of the new bar after conditions are met
if longCondition
    strategy.entry('Long', strategy.long)
    alert('LicenseID,buy,AUDNZD,risk=1')
    isLongOpen := true
if shortCondition
    strategy.entry('Short', strategy.short)
    alert('LicenseID,sell,AUDNZD,risk=1')
    isShortOpen := true

// Exit Conditions and Alerts
longExitCondition = cci > 0
shortExitCondition = cci < 0
if (longExitCondition and isLongOpen)
    strategy.close('Long')
    alert('LiceneseID,closelong,AUDNZD')
    isLongOpen := false
if (shortExitCondition and isShortOpen)
    strategy.close('Short')
    alert('LicenseID,closeshort,AUDNZD')
    isShortOpen := false

// Plotting
plot(upperChannel, color=color.new(color.red, 0), linewidth=1)
plot(lowerChannel, color=color.new(color.green, 0), linewidth=1)
hline(overboughtCCI, 'Overbought', color=color.red)
hline(oversoldCCI, 'Oversold', color=color.green)