Esta estrategia utiliza dos indicadores de impulso estocástico (SMI y RSI) para señales largas y cortas, junto con el martingala y el filtro corporal para la selección de señales comerciales, con el objetivo de capturar las tendencias a medio plazo y las fluctuaciones de precios.
La estrategia juzga largo y corto usando dos indicadores estocásticos SMI y RSI. El SMI se calcula sobre la base de la media móvil del rango de barras y el precio de cierre, bueno para identificar puntos de reversión. El RSI compara el poder de los toros y los bajistas para determinar el estado de sobrecompra y sobreventa. La estrategia va largo cuando el SMI está por debajo de -50 y el RSI está por debajo de 20; va corto cuando el SMI está por encima de 50 y el RSI está por encima de 80.
Para filtrar las falsas rupturas, la estrategia también utiliza 1/3 de la SMA corporal de 10 períodos como condición del filtro de ruptura.
Además, la estrategia adopta martingale opcional, que es escalar lotes en operaciones perdedoras, tratando de recuperar las pérdidas anteriores.
La funcionalidad de pruebas de retroceso prueba la estrategia introduciendo un rango de fechas.
La estrategia combina dos indicadores estocásticos y filtros, capaces de identificar eficazmente los puntos de inversión, capturar las tendencias a medio plazo y rastrear las fluctuaciones de precios.
Los riesgos pueden mitigarse optimizando los parámetros SMI y RSI para reducir la probabilidad de persecución/muerte, utilizando la martingale estratégicamente controlando la proporción y los tiempos de escalado y habilitando filtros discrecionales basados en las condiciones del mercado.
La estrategia combina indicadores estocásticos duales para capturar los puntos de inversión, con filtros y martingale para la selección y persecución de señales comerciales. Puede identificar efectivamente las tendencias a medio plazo y rastrear las fluctuaciones de precios, adecuado para los inversores que persiguen una alta tasa de ganancia. Preste atención a los riesgos de mercado de retraso y rango de indicadores, maneje los riesgos mediante optimización de parámetros y stop loss.
/*backtest start: 2022-09-30 00:00:00 end: 2023-10-06 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", 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") //Backtesting Input Range 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()