
Esta estrategia es un sistema de composición de comercio que combina el indicador CCI, el indicador RSI y dos medias móviles. El sistema puede capturar tendencias habituales y, al mismo tiempo, utilizar el cruce del indicador RSI para aumentar la confirmación de la hora de entrada y filtrar algo de ruido.
La estrategia se basa principalmente en el indicador CCI para determinar la dirección de la tendencia. Si el indicador CCI es superior a 100 es un mercado de tijeras, y si es inferior a 100 es un mercado de tijeras. El sistema utiliza dos cruces de medias móviles para ayudar a determinar la dirección de la tendencia.
Una vez que se determina una tendencia en el horizonte, el sistema utiliza el cruce de dos indicadores RSI de diferentes longitudes de parámetros como verificación de entrada. Por ejemplo, en un mercado de múltiples cabezas, si un indicador RSI de corto período atraviesa un indicador RSI de largo período, se obtiene una señal de compra final. Este diseño es principalmente para filtrar el ruido y evitar que los ajustes a corto plazo en la tendencia provoquen operaciones erróneas.
Esta estrategia solo abre posiciones en el horario de negociación designado y cierra todas las posiciones 15 minutos antes del cierre, para evitar el riesgo de la noche a la mañana. Después de abrir la posición, se utiliza el stop loss móvil para bloquear las ganancias.
Esta estrategia tiene en cuenta el análisis de tendencias y la verificación cruzada de indicadores, asegurando la eficacia de las señales de negociación al tiempo que controla el riesgo. A través de la optimización de los parámetros y el ajuste lógico, la estrategia puede aumentar aún más el margen de ganancia y reducir las oportunidades de omisión.
/*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")