Esta es una estrategia de negociación cuantitativa que incorpora múltiples indicadores técnicos. Combina promedios móviles, MACD, bandas de Bollinger, RSI y otros indicadores para implementar un modelo de negociación automatizada impulsado por múltiples factores.
Las señales comerciales de esta estrategia provienen de las siguientes partes:
Cuando los indicadores anteriores emiten simultáneamente señales de compra o venta, la estrategia tomará las decisiones largas o cortas correspondientes.
Específicamente, cuando el promedio móvil rápido cruza el lento, los histogramas MACD comienzan a aumentar, el RSI rebota desde la zona de sobreventa y el precio se acerca al tren inferior de las bandas de Bollinger, se considera como una señal de inversión de tendencia para la entrada larga.
Y cuando el MA rápido cruza por debajo del MA lento, los histogramas MACD comienzan a disminuir, el RSI cae desde el área de sobrecompra y el precio alcanza las bandas superiores de Bollinger, se considera una reversión superior a corto plazo para la entrada corta.
Al combinar señales de múltiples indicadores, se pueden filtrar de manera efectiva las señales falsas y mejorar la estabilidad de la estrategia.
La mayor ventaja de esta estrategia es que adopta un modelo multifactorial para la negociación, lo que mejora la fiabilidad de las señales, la estabilidad y la rentabilidad de la estrategia.
El modelo multifactor puede verificar las señales comerciales entre sí y reducir eficazmente las interferencias de las señales falsas.
Los indicadores de diferentes categorías pueden capturar características más completas de los movimientos del mercado y hacer juicios más precisos.
La combinación de múltiples indicadores puede suavizar las fluctuaciones de los indicadores individuales y garantizar rendimientos más constantes.
Los indicadores y sus ponderaciones en la combinación pueden ajustarse de forma flexible para adaptar la estrategia a las diferentes condiciones del mercado.
Algunos de los riesgos de esta estrategia deben ser:
La compleja combinación de múltiples indicadores requiere un ajuste y ensayo precisos de los parámetros, de lo contrario puede producir señales no válidas.
El rendimiento de un solo producto puede no ser lo suficientemente estable, por lo que debe construirse una cartera de productos adecuados para diversificar los riesgos.
El tamaño de las posiciones y los mecanismos de detención de pérdidas deben controlarse estrictamente para limitar las pérdidas en condiciones extremas de mercado.
Algunas direcciones de esta estrategia se puede optimizar:
Prueba de combinaciones de más indicadores para determinar los parámetros óptimos, como la volatilidad implícita, el volumen, etc.
Utilice métodos de aprendizaje automático para generar automáticamente combinaciones óptimas de indicadores y conjuntos de parámetros.
Hacer más pruebas y optimización en marcos de tiempo más largos, ajustar los pesos en consecuencia para las diferentes etapas del mercado.
Incorporar herramientas de gestión de riesgos para controlar estrictamente las pérdidas en operaciones individuales y posiciones globales.
Esta estrategia aprovecha al máximo las ventajas de los diferentes indicadores técnicos y forma un modelo multifactorial, que mejora efectivamente la precisión de las señales.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Математическая Торговая Система с Ишимоку, TP/SL, ADX, RSI, OBV", shorttitle="МТС Ишимоку TP/SL ADX RSI OBV", overlay=true) is_short_enable = input(0, title="Короткие сделки") is_long_enable = input(1, title="Длинные сделки") // Входные параметры для скользящих средних fast_length = input(21, title="Быстрый период") slow_length = input(26, title="Медленный период") // Входные параметры для Ишимоку tenkan_length = input(9, title="Тенкан-сен") kijun_length = input(26, title="Киджун-сен") senkou_length = input(52, title="Сенкоу-спан B") // Входные параметры для ADX adx_length = input(14, title="ADX период") adx_level = input(30, title="ADX уровень") // Входные параметры для RSI rsi_length = input(14, title="RSI период") rsi_overbought = input(70, title="RSI перекупленность") rsi_oversold = input(30, title="RSI перепроданность") // Входные параметры для OBV obv_length = input(14, title="OBV период") // Вычисление скользящих средних fast_ma = ta.sma(close, fast_length) slow_ma = ta.sma(close, slow_length) // Вычисление Ишимоку tenkan_sen = ta.sma(high + low, tenkan_length) / 2 kijun_sen = ta.sma(high + low, kijun_length) / 2 senkou_span_a = (tenkan_sen + kijun_sen) / 2 senkou_span_b = ta.sma(close, senkou_length) // Вычисление ADX [diplus, diminus, adx_value] = ta.dmi(14, adx_length) // Вычисление RSI rsi_value = ta.rsi(close, rsi_length) // Вычисление OBV f_obv() => ta.cum(math.sign(ta.change(close)) * volume) f_obv_1() => ta.cum(math.sign(ta.change(close[1])) * volume[1]) f_obv_2() => ta.cum(math.sign(ta.change(close[2])) * volume[2]) f_obv_3() => ta.cum(math.sign(ta.change(close[3])) * volume[3]) obv_value = f_obv() price_is_up = close[1] > close[3] price_crossover_fast_ma = close > fast_ma fast_ma_is_up = ta.sma(close[1], fast_length) > ta.sma(close[3], fast_length) rsi_is_trand_up = ta.rsi(close[1], rsi_length) > ta.rsi(close[3], rsi_length) rsi_is_upper_50 = rsi_value > 50 obv_is_trand_up = f_obv_1() > f_obv_3() and obv_value > ta.sma(obv_value, obv_length) is_up = price_is_up and price_crossover_fast_ma and fast_ma_is_up and rsi_is_trand_up and rsi_is_upper_50 and obv_is_trand_up fast_ma_is_down = close < fast_ma rsi_is_trend_down = ta.rsi(close[1], rsi_length) < ta.rsi(close[2], rsi_length) rsi_is_crossover_sma = rsi_value < ta.sma(rsi_value, rsi_length) obv_is_trend_down = f_obv_1() < f_obv_2() obv_is_crossover_sma = obv_value < ta.sma(obv_value, obv_length) is_down = fast_ma_is_down and rsi_is_trend_down and rsi_is_crossover_sma and obv_is_trend_down and obv_is_crossover_sma //----------// // MOMENTUM // //----------// ema8 = ta.ema(close, 8) ema13 = ta.ema(close, 13) ema21 = ta.ema(close, 21) ema34 = ta.ema(close, 34) ema55 = ta.ema(close, 55) longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55 exitLongEmaCondition = ema13 < ema55 shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55 exitShortEmaCondition = ema13 > ema55 // ---------- // // OSCILLATORS // // ----------- // rsi = ta.rsi(close, 14) longRsiCondition = rsi < 70 and rsi > 40 exitLongRsiCondition = rsi > 70 shortRsiCondition = rsi > 30 and rsi < 60 exitShortRsiCondition = rsi < 30 // Stochastic length = 14, smoothK = 3, smoothD = 3 kFast = ta.stoch(close, high, low, 14) dSlow = ta.sma(kFast, smoothD) longStochasticCondition = kFast < 80 exitLongStochasticCondition = kFast > 95 shortStochasticCondition = kFast > 20 exitShortStochasticCondition = kFast < 5 // Логика входа и выхода longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0 exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0 shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0 exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0 enter_long = (ta.crossover(close, senkou_span_a) or is_up) and longCondition enter_short = (ta.crossunder(close, senkou_span_a) or is_down) and shortCondition exit_long = ((ta.crossunder(fast_ma, slow_ma) or ta.crossunder(close, senkou_span_b) or enter_short) or exitLongCondition) exit_short = ((ta.crossover(fast_ma, slow_ma) or ta.crossover(close, senkou_span_b) or enter_long) or exitShortCondition) // Выполнение сделок if is_long_enable == 1 strategy.entry("Long", strategy.long, when=enter_long) strategy.close("Long", when=exit_long) if is_short_enable == 1 strategy.entry("Short", strategy.short, when=enter_short) strategy.close("Short", when=exit_short)