Estrategia de negociación de impulso personalizada

El autor:¿ Qué pasa?, Fecha: 2023-11-23 15:18:27
Las etiquetas:

img

Resumen general

Esta es una estrategia de trading personalizada que combina indicadores de impulso y filtración de entidades de velas. Utiliza de manera integral tres indicadores técnicos: el índice de impulso estocástico, el RSI rápido y el filtración de entidades de velas para implementar una estrategia basada en el impulso de avance mientras también considera las condiciones de sobrecompra y sobreventa.

La lógica de la negociación

La estrategia utiliza los siguientes tres indicadores para el juicio de las señales de negociación:

  1. Índice de Momentum Estocástico (SMI): Combina el espaciamiento entre las entidades de candlestick y la posición relativa del precio de cierre para juzgar la fuerza o debilidad del impulso del precio.

  2. RSI rápido (línea de 7 días): Juzga las condiciones de sobrecompra y sobreventa de los precios. RSI por debajo de 20 genera una señal de compra como sobreventa mientras que por encima de 80 genera una señal de venta como sobrecompra.

  3. Filtro de entidades de velas: Calcula el tamaño promedio de las entidades de velas en los últimos 10 días. Sólo activa la señal cuando la entidad de velas de hoy excede un tercio de ese promedio para evitar señales no válidas.

La estrategia primero juzga las señales de SMI y RSI. Si se cumple cualquiera de los requisitos de señal de indicador, luego se combina el filtro de entidad de velas para determinar si esa señal es válida y generar una señal de negociación si es válida.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. El juicio es más preciso y fiable con la combinación de múltiples indicadores.

  2. La adición de un filtro de entidades de velas evita señales no válidas.

  3. Al combinar las condiciones de sobrecompra y sobreventa, es más fácil captar las señales en los puntos de inversión de la tendencia.

  4. Aumento de las oportunidades de ganancia con el comercio largo / corto bidireccional.

  5. La negociación de posiciones parciales evita pérdidas excesivas de una sola vez.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Los indicadores pueden generar señales falsas que conducen a pérdidas.

  2. El comercio de posiciones parciales no puede utilizar plenamente las oportunidades de tendencia en cada dirección.

  3. Como indicador principal, el SMI es sensible a la configuración de los parámetros.

  4. El comercio frecuente con una estrategia bidireccional aumenta los costos de transacción.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Optimizar los parámetros de SMI y RSI para encontrar las mejores combinaciones de parámetros.

  2. Aumentar el tamaño de las posiciones y los mecanismos de gestión de posiciones para lograr mayores rendimientos durante las tendencias.

  3. Añadir estrategias de stop loss para reducir el riesgo de pérdida única.

  4. Combinar más indicadores para juzgar la fiabilidad de la señal y reducir las señales falsas.

  5. Adoptar contratos eficientes para reducir los costes de transacción.

Conclusión

La estrategia utiliza ampliamente los indicadores de filtración de entidades SMI, RSI rápido y candlestick para implementar una estrategia de trading personalizada basada en el impulso, sobrecompra/superventa consciente. Tiene ventajas como juicio preciso, identificación de señales válidas, combinación de condiciones de sobrecompra/superventa y comercio bidireccional, pero también riesgos como sensibilidad de parámetros, incapacidad de capitalizar completamente las tendencias y operaciones frecuentes. Al optimizar continuamente los parámetros, aumentar el tamaño de la posición y la gestión de pérdidas de parada, reducir las señales falsas, etc., la estrategia puede lograr un mejor rendimiento comercial.


/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Stochastic Strategy v1.2", shorttitle = "Stochastic str 1.2", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)

//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Más.