Esta estrategia utiliza el indicador RSI para medir el impulso del precio y determina los tiempos de entrada calculando la desviación estándar de los cambios en el RSI. Entra en una posición larga cuando el impulso del RSI excede el umbral de desviación estándar y es menor que el impulso anterior multiplicado por un factor de agotamiento, y entra en una posición corta en las condiciones opuestas. La estrategia utiliza órdenes límite para salir, controlando el riesgo estableciendo objetivos de ganancia y ticks de stop loss. La estrategia se ejecuta en cada tick de precio para capturar todos los movimientos potenciales de precios.
Esta estrategia utiliza el impulso del RSI y los umbrales de desviación estándar para realizar operaciones de reversión en un entorno de alta frecuencia. Al introducir un factor de agotamiento y una salida de orden de límite, la estrategia es capaz de capturar las oportunidades comerciales traídas por los movimientos de precios mientras controla el riesgo. Sin embargo, la estrategia todavía necesita una mayor optimización en la aplicación real, como la introducción de más indicadores, la optimización de la configuración de parámetros, la introducción de la gestión de posiciones y el filtrado de tendencias, etc., para mejorar la estabilidad y la rentabilidad de la estrategia.
/*backtest start: 2024-03-01 00:00:00 end: 2024-03-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MCOTs Intuition Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, initial_capital=50000, calc_on_every_tick=true) // Input for RSI period rsiPeriod = input(14, title="RSI Period") // Input for standard deviation multiplier stdDevMultiplier = input(1.0, title="Standard Deviation Multiplier") // Input for exhaustion detection exhaustionMultiplier = input(1.5, title="Exhaustion Multiplier") // Input for profit target and stop loss in ticks profitTargetTicks = input(8, title="Profit Target (ticks)") stopLossTicks = input(32, title="Stop Loss (ticks)") // Calculate RSI rsiValue = ta.rsi(close, rsiPeriod) // Calculate standard deviation of RSI changes rsiStdDev = ta.stdev(ta.change(rsiValue), rsiPeriod) // Calculate momentum momentum = ta.change(rsiValue) // Conditions for entering a long position longCondition = momentum > rsiStdDev * stdDevMultiplier and momentum < momentum[1] * exhaustionMultiplier if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Take Profit Long", "Long", limit=close + profitTargetTicks * syminfo.mintick) strategy.exit("Stop Loss Long", "Long", stop=close - stopLossTicks * syminfo.mintick) // Conditions for entering a short position shortCondition = momentum < -rsiStdDev * stdDevMultiplier and momentum > momentum[1] * exhaustionMultiplier if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Take Profit Short", "Short", limit=close - profitTargetTicks * syminfo.mintick) strategy.exit("Stop Loss Short", "Short", stop=close + stopLossTicks * syminfo.mintick) // Plotting RSI value for reference plot(rsiValue, title="RSI", color=color.blue)