Esta estratégia gera sinais de negociação através do cruzamento da média móvel de Jurik (JMA) e do indicador RSI.
A estratégia utiliza principalmente dois tipos de indicadores:
Indicador JMA: uma média móvel suavizada utilizando multiplicadores de potência, com menor atraso e mais rápido na captura de mudanças de preço.
Indicador RSI: Um indicador comum de força que reflete o ímpeto de compra/venda.
Quando o JMA cruza acima do RSI, ele indica uma tendência de alta de curto prazo mais forte do que a tendência de longo prazo e gera um sinal de compra.
Após o sinal, a estratégia entra no comércio na direção correspondente.
Parâmetros JMA ajustáveis adaptáveis a diferentes períodos.
O RSI filtra falsas fugas.
A combinação de dois indicadores reduz os falsos sinais.
Controles de perda de stop.
Relatório de lucro personalizável para a orientação de lucro.
Uma combinação de dois indicadores pode gerar poucos sinais, pode ajustar os parâmetros de sensibilidade.
O JMA ainda tem atraso, pode perder pontos de virada, pode otimizar com indicadores líderes.
A colocação incorreta de stop loss pode ser atingida por uma perda maior.
A dependência excessiva dos indicadores pode produzir sinais falsos, pode adicionar filtros de volume ou volatilidade.
Teste os parâmetros JMA para encontrar as configurações ideais.
Tente diferentes parâmetros RSI para melhor desempenho.
Adicionar o mecanismo de travagem para paradas adaptativas.
Otimizar o tamanho da posição de entrada como adicionar para ganhar negócios.
Pesquise filtros adicionais como KD, MACD.
A estratégia permite seguir a tendência com cruzamento de JMA e RSI e limita o risco através de paradas. Mas sinais falsos permanecem prováveis, exigindo mais otimização em parâmetros e filtros.
/*backtest start: 2023-01-01 00:00:00 end: 2023-03-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Stratégie marche le mieux sur du 2 jours strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000) // Strategy Tester Start Time sYear = input(2019, title = "Start Year") sMonth = input(06, title = "Start Month", minval = 01, maxval = 12) sDay = input(01, title = "Start Day", minval = 01, maxval = 31) sHour = input(00, title = "Start Hour", minval = 00, maxval = 23) sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59) startTime = true // Strategy Tester End Time eYear = input(2019, title = "End Year") eMonth = input(12, title = "End Month", minval = 01, maxval = 12) eDay = input(01, title = "End Day", minval = 01, maxval = 31) eHour = input(00, title = "End Hour", minval = 00, maxval = 23) eMinute = input(00, title = "End Minute", minval = 00, maxval = 59) endTime = true // === RSI === src = close, len = input(14, minval=1, title="Length") up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) plot(rsi, color=color.purple) band1 = hline(70) band0 = hline(30) // === JMA === _length = input(7, title="Length") _phase = input(50, title="Phase") _power = input(2, title="Power") highlightMovements = input(true, title="Highlight Movements ?") // srcJMA = input(rsi, title="Source") srcJMA = rsi phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5 beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2) alpha = pow(beta, _power) jma = 0.0 e0 = 0.0 e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1]) e1 = 0.0 e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1]) e2 = 0.0 e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1]) jma := e2 + nz(jma[1]) // === End of JMA def === jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0) // === Inputs === // risk management useStop = input(true, title = "Use Initial Stop Loss?") goLong() => crossover(rsi, jma) killLong() => crossunder(rsi, jma) // ======= DEBUGGGGGGGG ============ long_price = 0.0 short_price = 0.0 if(startTime and endTime) if(goLong()) long_price := close strategy.entry("Buy", strategy.long, when = goLong()) strategy.close("Buy", when = killLong() and close > long_price) // Shorting if using goShort() => killLong() killShort() => goLong() if(startTime and endTime) if(goShort()) short_price := close strategy.entry("Sell", strategy.short, when = goShort() and close < short_price) strategy.close("Sell", when = killShort()) // ========================= if (useStop) strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08) strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)