
Die Strategie ist ein kombiniertes Handelssystem, das CCI, RSI und zwei Moving Averages kombiniert. Das System kann die üblichen Trends erfassen und die Überschneidung des RSI als Eintrittszeit erhöht die Bestätigung, um etwas Lärm zu filtern.
Die Strategie basiert hauptsächlich auf dem CCI-Indikator, um die Trendrichtung zu bestimmen. Wenn der CCI-Indikator über 100 liegt, ist dies ein Mehrkopfmarkt, und wenn er unter 100 liegt, ist es ein Leerkopfmarkt. Das System nutzt zwei Moving Average-Kreuzungen, um die Trendrichtung zu bestimmen.
Nach der Feststellung des Mehrraumtrends nutzt das System die Kreuzung zweier RSI-Indikatoren mit unterschiedlichen Parameterlängen als Eingangsprüfung. In einem Mehrkopfmarkt beispielsweise wird ein letztes Kaufsignal ausgegeben, wenn der kurzfristige RSI-Indikator über den langfristigen RSI-Indikator überschritten wird. Diese Konstruktion dient hauptsächlich dazu, Geräusche zu filtern und zu vermeiden, dass kurzfristige Anpassungen im Trend zu falschen Geschäften führen.
Die Strategie eröffnet nur Positionen zu bestimmten Handelszeiten und schließt 15 Minuten vor dem Schließen aktiv alle Positionen aus, um Übernachtungsrisiken zu vermeiden. Nach der Eröffnung wird der mobile Stop-Loss verwendet, um Gewinne zu sperren.
Diese Strategie berücksichtigt die Trend-Erkennung und die Kennzahlen-Kreuzprüfung und gewährleistet die Effektivität der Handelssignale, während die Risiken kontrolliert werden. Durch die Optimierung der Parameter und die logische Anpassung kann die Strategie die Gewinnspanne weiter erhöhen und die Möglichkeit der Verpassung reduzieren.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
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/
// © rwestbrookjr
//@version=5
strategy("EMA with RSI Cross Strategy", overlay=true)
//EMA
fastLen = input(title='Fast EMA Length', defval=9)
slowLen = input(title='Slow EMA Length', defval=20)
fastEMA = ta.ema(close, fastLen)
slowEMA = ta.ema(close, slowLen)
fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line)
fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud')
// Bull and Bear Alerts
//Bull = ta.crossover(fastEMA, slowEMA)
Bull = fastEMA > slowEMA
//Bear = ta.crossunder(fastEMA, slowEMA)
Bear = fastEMA < slowEMA
//RSIs
rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSource1Input = input.source(close, "Source", group="RSI Settings")
rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings")
rsiSource2Input = input.source(close, "Source", group="RSI Settings")
up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input)
down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input)
rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))
up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input)
down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))
//CCI
cciLength = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, cciLength)
cci = (src - ma) / (0.015 * ta.dev(src, cciLength))
//Trail Stop Setup
trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5)
longStop = 0.0, shortStop = 0.0
longStop := if Bull
stopValue = close - trstp
math.max(stopValue, longStop[1])
else
0.0
shortStop := if Bear
stopValue = close + trstp
math.min(stopValue, shortStop[1])
else
999999
//Session Setup
open_session=input(defval="0930-1545")
session = time("1", open_session)
validSession=(na(session) ? 0 : 1)
//Trade Signals
longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession
if (longCondition)
strategy.entry("Long", strategy.long, 1)
//longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75
longExit = close < longStop or not validSession
if (longExit)
strategy.close("Long")
shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession
if (shortCondition)
strategy.entry("Short", strategy.short, 1)
//shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75
shortExit = close > shortStop or not validSession
if (shortExit)
strategy.close("Short")