Basado en una estrategia comercial cuantitativa multifactorial


Fecha de creación: 2024-01-31 13:55:37 Última modificación: 2024-01-31 13:55:37
Copiar: 0 Número de Visitas: 714
1
Seguir
1617
Seguidores

Basado en una estrategia comercial cuantitativa multifactorial

Descripción general

La estrategia es una estrategia de comercio cuantitativa que combina varios indicadores técnicos. Combina varios indicadores, como promedios móviles, MACD, Bollinger Bands y RSI, para realizar operaciones automatizadas impulsadas por modelos multifactoriales.

Principio de estrategia

Las señales de negociación de esta estrategia provienen de las siguientes partes:

  1. Las medias móviles dobles forman un tenedor de oro
  2. El MACD se forma en el eje cero y el eje cero.
  3. Brin y su subida y bajada de la vía
  4. El RSI se invierte en la zona de compra y venta

Cuando varios de los indicadores mencionados anteriormente emiten al mismo tiempo señales de compra o venta, la estrategia realiza la operación de compra y apertura de posición o venta de posición en blanco correspondiente.

Concretamente, cuando la media móvil rápida atraviesa la media móvil lenta y los histogramas MACD muestran un crecimiento de la línea columnar, el RSI rebota desde la zona de venta excesiva y el precio se acerca a la baja de la banda de Brin, se considera que el mercado ha invertido, lo que genera una señal de compra.

Y cuando la media móvil rápida se cruza por debajo de la media móvil lenta, los histogramas MACD muestran una línea columnar que disminuye, el RSI cae de la zona de sobreventa y el precio se acerca a la banda de Brin en la vía, creyendo que el mercado está a punto de llegar a la cima, lo que genera una señal de venta.

A través de esta combinación de indicadores múltiples, se puede filtrar eficazmente las señales falsas y mejorar la estabilidad de la estrategia.

Análisis de las ventajas

La mayor ventaja de esta estrategia es que utiliza un modelo multifactorial para operar, lo que mejora la fiabilidad de la señal y aumenta la estabilidad y la rentabilidad de la estrategia.

  1. Los modelos multifactoriales pueden verificar las señales de transacción entre sí, reduciendo la interferencia de las señales falsas.

  2. Las diferentes categorías de indicadores permiten capturar las características más completas de los movimientos del mercado y juzgar con mayor precisión.

  3. La combinación de múltiples factores puede suavizar la naturaleza de la oscilación existente en un solo indicador, garantizando una mayor estabilidad de los ingresos.

  4. La flexibilidad para ajustar los indicadores de la cartera y el peso de cada uno de ellos, con una estrategia personalizada para los diferentes mercados.

Análisis de riesgos

La estrategia también tiene algunos riesgos a tener en cuenta:

  1. Las combinaciones complejas de múltiples indicadores, la configuración de parámetros y la selección de indicadores requieren cálculos y pruebas precisos, de lo contrario, son propensas a generar señales de falla.

  2. Los efectos de una sola variedad pueden ser inestables y se necesita elegir la combinación de variedades adecuada para el comercio entre variedades, para dispersar el riesgo de una sola variedad.

  3. Se requiere un control estricto del tamaño de las posiciones y de las estrategias de stop loss para evitar la expansión de las pérdidas provocadas por situaciones extremas.

Dirección de optimización

La estrategia tiene las siguientes direcciones de optimización:

  1. Prueba más combinaciones de indicadores para encontrar el parámetro óptimo. Introduce otros indicadores en la combinación, como la tasa de volatilidad, el volumen de transacciones, etc.

  2. Utiliza métodos de aprendizaje automático para generar la combinación óptima de estrategias y configuraciones de parámetros.

  3. Prueba y optimiza en una escala de tiempo más larga, ajusta el peso para las diferentes etapas del mercado.

  4. Combinado con herramientas de gestión de riesgos, un control estricto de los pérdidas individuales y de las posiciones totales.

Resumir

La estrategia utiliza múltiples indicadores de negociación para formar un modelo multifactorial, aprovechando las ventajas de los diferentes indicadores y aumentando la capacidad de decisión de la señal. Al mismo tiempo, se debe prestar atención a la prevención de riesgos, ya que la estabilidad y la rentabilidad de la estrategia se pueden mejorar continuamente mediante la optimización y la actualización de los parámetros.

Código Fuente de la Estrategia
/*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)