
La estrategia utiliza el RSI estocástico y el indicador de la tasa de cambio de precios para identificar la dirección de la tendencia en las multitudinarias y gestionar el riesgo con el método de stop loss de deslizamiento de coordenadas.
En primer lugar, la estrategia utiliza el indicador RSI de longitud 5 y el indicador estocástico de longitud 7 para calcular el RSI estocástico. Cuando el valor de K del RSI estocástico es superior al valor de D, es una señal alcista, y cuando el valor de K es inferior al valor de D, es una señal bajista.
En segundo lugar, la estrategia calcula el índice de variación de precios EMA ROC. Se considera que el precio está en movimiento activo cuando el EMA ROC es superior a la mitad de la depreciación o inferior a la mitad negativa de la depreciación.
Luego, se puede identificar la dirección de la tendencia combinando la señal de pluralidad del RSI estocástico y el indicador de la tasa de cambio de precios. Haga más cuando el RSI estocástico es positivo y el precio es activo. Haga menos cuando el RSI estocástico es negativo y el precio es activo.
Finalmente, la estrategia utiliza el método de control de pérdidas de deslizamiento de coordenadas. Después de abrir la posición, continúa actualizando el precio más alto o más bajo y se detiene a una cierta distancia del precio más alto o más bajo como punto de pérdida.
La estrategia tiene las siguientes ventajas:
El uso del indicador Stochastic RSI permite identificar de manera eficiente las tendencias y las situaciones de sobrecompra y sobreventa.
Los indicadores de fluctuación de los precios pueden filtrar los mercados que se encuentran en crisis y evitar falsas señales.
El modo de parada de deslizamiento de coordenadas puede bloquear los beneficios al máximo, mientras que también puede controlar el riesgo.
El espacio para optimizar los parámetros de la estrategia es amplio y se puede ajustar para diferentes variedades.
La idea de la estrategia es simple, clara y fácil de entender.
La estrategia también tiene sus riesgos:
El RSI estocástico puede generar falsas señales que requieren confirmación junto con otros factores.
El deslizamiento de las coordenadas puede ser demasiado radical para que los intervalos de la noche lo golpeen.
La reversión a corto plazo puede provocar que se active el stop loss.
Los parámetros de la estrategia necesitan ser optimizados para las diferentes variedades, de lo contrario el efecto puede ser negativo.
Los costos de las transacciones pueden afectar la rentabilidad de la estrategia, por lo que es necesario considerar una frecuencia razonable de las transacciones.
La estrategia también puede ser optimizada en los siguientes aspectos:
Optimización de los parámetros del RSI estocástico para reducir la tasa de falsedad. Se pueden probar diferentes parámetros de K-valores y D-valores.
Optimización de los parámetros de los indicadores de la tasa de variación de los precios para mejorar el efecto de filtración. Se pueden probar diferentes periodos de ventana y valores límite de la tasa de variación.
Combinar indicadores de tendencia para evitar el estancamiento inverso. Indicadores como la adición de promedios móviles.
Optimización de la proporción de pérdidas y reducción del riesgo de cobertura. Se pueden probar diferentes tipos de pérdidas.
Añadir la administración de posiciones para controlar el riesgo individual. Por ejemplo, fijar el monto de stop loss o ajustar las posiciones de forma dinámica según el saldo de la cuenta.
Prueba de parámetros de diferentes variedades para mejorar la adaptabilidad. Preferencia en varios mercados de verificación de varios períodos de tiempo.
La idea general de la estrategia es clara y simple, utiliza el RSI estocástico para identificar la dirección de la tendencia y, junto con la señal de filtro del índice de variación de precios, puede capturar de manera efectiva las oportunidades de tendencia de la línea media y larga. El método de parada de deslizamiento de coordenadas puede bloquear los beneficios y controlar los riesgos.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Sto2", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
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)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// Stochastic calc /////////////
smoothK = input(1, minval=1)
smoothD = input(7, minval=1)
lengthRSI = input(5, minval=1)
lengthStoch = input(7, minval=1)
src = input(close, title="RSI Source")
up = sma(max(change(src), 0), lengthRSI)
down = sma(-min(change(src), 0), lengthRSI)
rsi1 = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
///////////// Rate Of Change /////////////
source = close, roclength = input(14, minval=1), pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// STRATEGY ///////////////
long = k > d and isMoving()
short = k < d and isMoving()
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(9.0, title='Take Profit %') / 100
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
// Strategy
if testPeriod()
strategy.entry("Long Entry", strategy.long, when=long)
strategy.entry("Short Entry", strategy.short, when=short)
strategy.exit("Long Ex", "Long Entry", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
strategy.exit("Short Ex", "Short Entry", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
p1 = plot(k, color=color.gray, linewidth=0)
p2 = plot(d, color=color.gray, linewidth=0)
h0 = hline(100)
h1 = hline(50)
h3 = hline(0)
fill(p1, p2, color = k > d ? color.lime : color.red, transp=70)