Estrategia de oscilación cuantitativa de soporte y resistencia

El autor:¿ Qué pasa?, Fecha: 2024-01-25 15:53:06
Las etiquetas:

img

Resumen general

Esta estrategia combina la estrategia de cruce de RSI con la estrategia de stop loss optimizada para lograr un control lógico preciso y un stop loss preciso y obtener ganancias.

Principio de la estrategia

  1. El indicador RSI determina el área de sobrecompra y sobreventa. Combinado con el valor K y D cruz dorada y cruz muerta para formar señales comerciales.
  2. Introduce el reconocimiento de patrones de velas para ayudar a juzgar las señales de tendencia para evitar operaciones incorrectas.
  3. Las líneas SMA ayudan a determinar la dirección de la tendencia.

Análisis de ventajas

  1. La optimización del parámetro RSI determina el área de sobrecompra y sobreventa con precisión para evitar operaciones incorrectas.
  2. Optimización de parámetros STO, ajuste de suavidad filtra el ruido y mejora la calidad de la señal.
  3. Se introdujo la tecnología Heikin-Ashi para reconocer el cambio de dirección de las velas y garantizar señales comerciales precisas.
  4. Las líneas SMA ayudan a juzgar la dirección de la tendencia principal, evita el comercio contra la tendencia.
  5. La estrategia de stop loss bloquea el beneficio máximo para cada operación.

Análisis de riesgos

  1. Enfrentando un mayor riesgo cuando el mercado continúa bajando.
  2. La alta frecuencia de negociación aumenta el costo de negociación y el costo de deslizamiento.
  3. El RSI tiende a generar señales falsas, necesita filtrarse por otros indicadores.

Optimización de la estrategia

  1. Ajustar los parámetros del RSI, optimizar el juicio sobrecomprado sobrevendido.
  2. Ajustar los parámetros STO, la suavidad y el período para mejorar la calidad de la señal.
  3. Ajustar el período de promedio móvil para optimizar el juicio de tendencia.
  4. Introducir más indicadores técnicos para mejorar la precisión de la señal.
  5. Optimizar la proporción de pérdida de parada para reducir el riesgo de una sola operación.

Conclusión

La estrategia integra las ventajas de múltiples indicadores técnicos convencionales. A través de la optimización de parámetros y el refinamiento de la lógica, equilibra la calidad de la señal de negociación y el stop loss. Con cierta versatilidad y rentabilidad constante.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//study(title="@sentenzal strategy", shorttitle="@sentenzal strategy", overlay=true)
strategy(title="@sentenzal strategy", shorttitle="@sentenzal strategy", overlay=true  )
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
overbought = input(80, minval=1)
oversold = input(20, minval=1)
smaLengh = input(100, minval=1)
smaLengh2 = input(50, minval=1)
smaLengh3 = input(20, minval=1)

src = input(close, title="RSI Source")
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testPeriod() =>
    time >= testPeriodStart ? true : false

rsi1 = rsi(src, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
crossBuy = crossover(k, d) and k < oversold
crossSell = crossunder(k, d) and k > overbought

dcLower = lowest(low, 10)
dcUpper = highest(high, 10)


heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_low = security(heikinashi(syminfo.tickerid), timeframe.period, low)
heikinashi_high = security(heikinashi(syminfo.tickerid), timeframe.period, high)
heikinashiPositive = heikinashi_close >= heikinashi_open

heikinashiBuy = heikinashiPositive == true and heikinashiPositive[1] == false  and heikinashiPositive[2] == false
heikinashiSell = heikinashiPositive == false and heikinashiPositive[1] == true and heikinashiPositive[2] == true

//plotshape(heikinashiBuy, style=shape.arrowup, color=green, location=location.belowbar, size=size.tiny)
//plotshape(heikinashiSell, style=shape.arrowdown, color=red, location=location.abovebar, size=size.tiny)

buy = (crossBuy == true or crossBuy[1] == true or crossBuy[2] == true) and (heikinashiBuy == true or heikinashiBuy[1] == true or heikinashiBuy[2] == true)
sell = (crossSell == true or crossSell[1] == true or crossSell[2] == true) and (heikinashiSell == true or heikinashiSell[1] == true or heikinashiSell[2] == true)

mult = timeframe.period == '15' ? 4 : 1
mult2 = timeframe.period == '240' ? 0.25 : mult

movingAverage = sma(close, round(smaLengh))
movingAverage2 = sma(close, round(smaLengh2))
movingAverage3 = sma(close, round(smaLengh3))

uptrend = movingAverage < movingAverage2 and movingAverage2 < movingAverage3 and close > movingAverage
downtrend = movingAverage > movingAverage2 and movingAverage2 > movingAverage3 and close < movingAverage

signalBuy = (buy[1] == false and buy[2] == false and buy == true) and uptrend
signalSell = (sell[1] == false and sell[2] == false and sell == true) and downtrend

takeProfitSell = (buy[1] == false and buy[2] == false and buy == true) and uptrend == false
takeProfitBuy = (sell[1] == false and sell[2] == false and sell == true)  and uptrend

plotshape(signalBuy, style=shape.triangleup, color=green, location=location.belowbar, size=size.tiny)
plotshape(signalSell, style=shape.triangledown, color=red, location=location.abovebar, size=size.tiny)



plot(movingAverage, linewidth=3, color=orange, transp=0)
plot(movingAverage2, linewidth=2, color=purple, transp=0)
plot(movingAverage3, linewidth=1, color=navy, transp=0)

alertcondition(signalBuy, title='Signal Buy', message='Signal Buy')
alertcondition(signalSell, title='Signal Sell', message='Signal Sell')


strategy.close("L", when=dcLower[1] > low)
strategy.close("S", when=dcUpper[1] < high)

strategy.entry("L", strategy.long, 1, when = signalBuy and testPeriod() and uptrend) 
strategy.entry("S", strategy.short, 1, when = signalSell and testPeriod() and uptrend ==false) 

//strategy.exit("Exit Long", from_entry = "L", loss = 25000000, profit=25000000)
//strategy.exit("Exit Short", from_entry = "S", loss = 25000000, profit=25000000)



Más.