Esta estratégia é um sistema de negociação quantitativo que combina o índice de força relativa (RSI) e as médias móveis (MA) para identificar tendências de mercado e oportunidades de negociação. O sistema também incorpora filtros de volume e volatilidade para melhorar a confiabilidade dos sinais de negociação.
A estratégia utiliza um mecanismo de confirmação de dois sinais: 1. Camada de confirmação de tendência: usa o cruzamento da média móvel rápida (FastMA) e da média móvel lenta (SlowMA) para determinar as tendências do mercado. Quando a linha rápida cruza acima da linha lenta, uma tendência de alta é estabelecida; quando a linha rápida cruza abaixo da linha lenta, uma tendência de queda é estabelecida. 2. Camada de confirmação de momento: usa o RSI como uma ferramenta de confirmação de momento. Em tendências de alta, o RSI deve estar abaixo de 50, indicando potencial ascendente; em tendências de baixa, o RSI deve estar acima de 50, indicando potencial descendente. 3. Filtros de negociação: define limiares mínimos para volume e volatilidade ATR para filtrar sinais com liquidez ou volatilidade insuficientes.
Esta estratégia estabelece um sistema de negociação abrangente através do uso integrado de indicadores de tendência e momentum. Os pontos fortes do sistema estão em seu mecanismo de confirmação de sinal em várias camadas e estrutura abrangente de gerenciamento de riscos. No entanto, a aplicação prática requer atenção ao impacto das condições do mercado no desempenho da estratégia e otimização de parâmetros com base nas circunstâncias reais. Através de melhoria e otimização contínuas, esta estratégia tem o potencial de manter um desempenho estável em diferentes ambientes de mercado.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-16 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ // © Boba2601 //@version=5 strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100) // === Налаштування індикаторів === length_rsi = input.int(14, title="RSI Period", group="Індикатори") fastMALength = input.int(9, title="Fast MA Length", group="Індикатори") slowMALength = input.int(21, title="Slow MA Length", group="Індикатори") // === Налаштування стоп-лосу і тейк-профіту === useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт") stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") // === Налаштування об'єму та волатильності === useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність") volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність") useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність") atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність") volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність") // === Розрахунок індикаторів === rsiValue = ta.rsi(close, length_rsi) fastMA = ta.sma(close, fastMALength) slowMA = ta.sma(close, slowMALength) // === Розрахунок об'єму та волатильності === averageVolume = ta.sma(volume, 20) atrValue = ta.atr(atrLength) // === Умови входу в позицію === longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50 if useVolumeFilter longCondition := longCondition and volume > volumeThreshold if useVolatilityFilter longCondition := longCondition and atrValue > volatilityThreshold shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50 if useVolumeFilter shortCondition := shortCondition and volume > volumeThreshold if useVolatilityFilter shortCondition := shortCondition and atrValue > volatilityThreshold // === Логіка входу та виходу з позиції === if (longCondition) strategy.entry("Long", strategy.long) if (useStopLossTakeProfit) stopLossPrice = close * (1 - stopLossPercent / 100) takeProfitPrice = close * (1 + takeProfitPercent / 100) strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice) if (shortCondition) strategy.entry("Short", strategy.short) if (useStopLossTakeProfit) stopLossPrice = close * (1 + stopLossPercent / 100) takeProfitPrice = close * (1 - takeProfitPercent / 100) strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice) // === Закриття позицій за зворотнім сигналом === if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50)) strategy.close("Long", comment="Закрито по сигналу") if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50)) strategy.close("Short", comment="Закрито по сигналу")