Estrategia de trading cuantitativo multi-marco temporal basada en PSAR, MACD y RSI


Fecha de creación: 2023-12-27 16:12:57 Última modificación: 2023-12-27 16:12:57
Copiar: 0 Número de Visitas: 657
1
Seguir
1623
Seguidores

Estrategia de trading cuantitativo multi-marco temporal basada en PSAR, MACD y RSI

Descripción general

Esta estrategia permite la automatización de operaciones de varios titulares en varios marcos de tiempo mediante la combinación de los tres indicadores Parabolic SAR, MACD y RSI. La estrategia se aplica principalmente a las operaciones diarias de acciones y productos.

Principio de estrategia

  1. El indicador PSAR se utiliza para determinar la dirección de los precios y el punto de reversión de la tendencia. Cuando el número de puntos baja, es una señal de más cabeza y cuando el número de puntos aumenta, es una señal de cabeza vacía.

  2. El indicador MACD determina el movimiento de los precios. La línea MACD y la línea SIGNAL se rompen hacia arriba como una señal de más cabeza, y hacia abajo como una señal de cabeza hueca.

  3. El indicador RSI determina el fenómeno de sobrecompra y sobreventa. Si el RSI está por encima de la devaluación, es una señal de más cabeza, y si está por debajo de la devaluación, es una señal de cabeza vacía.

  4. La combinación de las tres señales de los indicadores anteriores, forma la decisión final de la multitud.

  5. Adaptarse a usar el índice Chop para filtrar el mercado consolidado y evitar las whipsaws.

  6. El principio de la pirámide inversa de alza de posición permite la gestión dinámica de riesgos y ganancias mediante el establecimiento de paradas y paradas de pérdidas.

Ventajas estratégicas

  1. La combinación de múltiples indicadores para evaluar tendencias, impulsos y características de sobrecompra y sobreventa, mejora la precisión de la toma de decisiones.

  2. Adaptarse a las características del mercado, filtrando los mercados consolidados por el indicador Chop Index, evitando ser encajonados.

  3. Gestión de la dinámica de riesgo y ganancias, mediante el principio de la pirámide inversa de la subida de la posición, para lograr el stop loss activo.

  4. Los parámetros son más personalizables y optimizados, y se pueden ajustar fácilmente a diferentes variedades y entornos de mercado.

  5. Soporta múltiples marcos horarios y tiene una gran flexibilidad para operaciones diarias de corto y medio plazo.

Análisis de riesgos

  1. La toma de decisiones de la multitapa depende de la configuración de los parámetros, y la configuración inadecuada puede causar errores.

  2. La probabilidad de que el indicador emita una señal errónea puede dar lugar a decisiones contrarias a la tendencia.

  3. El parón de pérdidas está mal configurado y puede aumentar las pérdidas o reducir las ganancias.

  4. Se requiere un monitoreo y ajuste frecuentes de los parámetros y un mayor costo de intervención humana.

Dirección de optimización

  1. Añadir módulos de verificación de modelos para evaluar la configuración de parámetros y la eficacia de las señales.

  2. La aplicación también incluye un módulo de aprendizaje automático que permite la optimización automática de parámetros y modelos.

  3. Acceso a más fuentes de datos, mayor espacio de características y mayor eficacia en la toma de decisiones.

  4. Desarrollo de sistemas automatizados de monitoreo y mantenimiento para reducir el costo de la intervención humana.

  5. Aumentar la evaluación de retroalimentación y simulación y la eficacia de las estrategias de inspección.

Resumir

Esta estrategia permite la automatización y la cuantificación de las transacciones basadas en reglas a través de una combinación de varios indicadores técnicos. La estrategia tiene un gran espacio de optimización, es escalable y es adecuada para ajustes de parámetros, expansión de funciones y optimizaciones de aprendizaje automático, que servirán mejor a las transacciones en disco.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © vikris

//@version=4
strategy("[VJ]Phoenix Force of PSAR +MACD +RSI", overlay=true, calc_on_every_tick = false,pyramiding=0)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01    


// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0



// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 
psar = sar(0.02,0.02,0.2)
c1a = close > psar
c1v = close < psar

malen = input(50, title="MA Length")
mm200 = sma(close, malen)
c2a = close > mm200
c2v = close < mm200

fast = input(12, title="MACD Fast EMA Length")
slow = input(26, title="MACD Slow EMA Length")
[macd,signal,hist] = macd(close, fast,slow, 9)
c3a = macd >= 0
c3v = macd <= 0

rsilen = input(7, title="RSI Length")
th = input(50, title="RSI Threshold")
rsi14 = rsi(close, rsilen)
c4a = rsi14 >= th
c4v = rsi14 <= th

chopi = input(7, title="Chop Index lenght")
ci = 100 * log10(sum(atr(1), chopi) / (highest(chopi) - lowest(chopi))) / log10(chopi)

buy = c1a and c2a and c3a and c4a ? 1 : 0
sell = c1v and c2v and c3v and c4v ? -1 : 0


//Final Long/Short Condition
longCondition = buy==1 and ci <50
shortCondition = sell==-1 and ci <50 
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********