La estrategia se llama
La lógica central de esta estrategia se basa en el indicador CHOP, donde el sistema de promedio móvil juzga la dirección general de la tendencia. Específicamente, la estrategia calcula los valores de RSI de una línea rápida (Length = 20) y una línea lenta (Length = 50) en marcos de tiempo más altos, y calcula la diferencia entre las dos líneas RSI. Cuando la línea rápida RSI cruza por encima de la línea lenta RSI, señala una tendencia al alza y desencadena señales largas. Por el contrario, si la línea rápida RSI cruza por debajo de la línea lenta RSI, indica una tendencia a la baja y genera señales cortas.
La estrategia también introduce un mecanismo de marcos de tiempo múltiples: calcula la diferencia RSI en marcos de tiempo más altos (por ejemplo, diarios) para determinar la dirección general de la tendencia, y luego ejecuta órdenes de compra y venta reales en marcos de tiempo más bajos (por ejemplo, 5 minutos) basadas en el juicio de tendencia de marcos de tiempo más altos.
Soluciones:
Esta estrategia aprovecha la divergencia del RSI para capturar sensiblemente los posibles puntos de inflexión de la tendencia. La aplicación de marcos de tiempo múltiples asegura juzgar la tendencia general mientras mantiene la ejecución de operaciones específicas flexible. En comparación con otras estrategias de seguimiento de tendencias, esta estrategia es más directa, intuitiva en los ajustes de parámetros y fácil de optimizar. En conclusión, la estrategia forma un sistema de trading de tendencias eficiente y práctico que vale la pena explorar y aplicar más.
/*backtest start: 2023-11-19 00:00:00 end: 2023-12-19 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Flow Trend Indicator Strategy", "FlowTI", overlay=true, calc_on_every_tick=true) isTimeFrame(timeFrame) => timeFrame == timeframe.period ? true : false Htf() => isTimeFrame("12") ? "60" : isTimeFrame("60") ? "300" : isTimeFrame("300") ? "D" : isTimeFrame("D") ? "W" : isTimeFrame("W") ? "M" : isTimeFrame("M") ? "5M" : "D" TrendIndication() => trendFastLength = 20 trendSlowLength = 50 upFastHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on) downFastHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on) rsiFastHtf = downFastHtf == 0 ? 100 : upFastHtf == 0 ? 0 : 100 - (100 / (1 + upFastHtf / downFastHtf)) upSlowHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on) downSlowHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on) rsiSlowHtf = downSlowHtf == 0 ? 100 : upSlowHtf == 0 ? 0 : 100 - (100 / (1 + upSlowHtf / downSlowHtf)) rsiDiff = rsiFastHtf - rsiSlowHtf crossover(rsiDiff, 0) ? true : crossunder(rsiDiff, 0) ? false : na if (TrendIndication() == true) strategy.entry("Long", strategy.long) if (TrendIndication() == false) strategy.entry("Short", strategy.short)