Estrategia de negociación cuantitativa basada en PSAR, MACD y RSI

El autor:¿ Qué pasa?, Fecha: 2023-12-27 16:12:57
Las etiquetas:

img

Resumen general

Esta estrategia combina los indicadores Parabolic SAR, MACD y RSI para implementar operaciones automáticas largas y cortas a través de múltiples marcos de tiempo.

Principio de la estrategia

  1. El indicador PSAR se utiliza para determinar la dirección del precio y los puntos de inversión de tendencia.

  2. El indicador MACD juzga el impulso del precio. Cruzar la línea MACD por encima de la línea SIGNAL hacia arriba es una señal alcista mientras que cruzar hacia abajo es bajista.

  3. El indicador RSI juzga las condiciones de sobrecompra y sobreventa.

  4. Combine las señales de los tres indicadores anteriores para formar una decisión final de largo/corto.

  5. Utilice el indicador de Chop Index de manera adaptativa para filtrar los mercados de consolidación para evitar los golpes.

  6. Utilice el dimensionamiento de posiciones de pirámide inversa para gestionar dinámicamente los objetivos de riesgo y ganancia.

Ventajas

  1. La combinación de múltiples indicadores que juzgan la tendencia, el impulso y los osciladores mejora la precisión.

  2. Adaptarse a las condiciones del mercado filtrando los mercados consolidados para evitar caer en trampas.

  3. Gestión dinámica de riesgos y ganancias mediante el dimensionamiento de posiciones de pirámide inversa con paradas y límites adaptativos.

  4. Muy personalizable con parámetros ajustables para diferentes productos y entornos de mercado.

  5. Apoyar múltiples marcos de tiempo, con flexibilidad para operaciones de posición intradiaria a corto plazo o a medio/largo plazo.

Análisis de riesgos

  1. Las decisiones largo/corto dependen de la configuración de parámetros que pueden causar errores si no son apropiadas.

  2. Posibilidad de señales falsas que conduzcan a decisiones contrarias a la tendencia.

  3. Las opciones inadecuadas de stop loss y take profit pueden aumentar las pérdidas o reducir las utilidades.

  4. Requiere un monitoreo frecuente y ajustes de parámetros que resultan en altos costos de intervención humana.

Direcciones de optimización

  1. Añadir un módulo de validación del modelo para evaluar la configuración de los parámetros y la eficacia de la señal.

  2. Aumentar el módulo de aprendizaje automático para la optimización automática de parámetros y modelos.

  3. Ingerir más fuentes de datos para enriquecer el espacio de características y mejorar las decisiones.

  4. Desarrollar sistemas automatizados de seguimiento y mantenimiento para reducir la intervención humana.

  5. Añadir evaluaciones de backtesting y simulación para validar el rendimiento de la estrategia.

Conclusión

Esta estrategia realiza la negociación cuantitativa automatizada mediante la combinación de múltiples indicadores técnicos sistema basado en reglas. Con un gran espacio de optimización y flexibilidad, es adecuado para el ajuste de parámetros, expansión de características y mejoras de aprendizaje automático para servir mejor el comercio en vivo.


/*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 **********

Más.