O recurso está a ser carregado... Carregamento...

Estratégia de negociação da JMA para cruzar o RSI

Autora:ChaoZhang, Data: 2023-09-18 21:42:50
Tags:

Resumo

Esta estratégia gera sinais de negociação através do cruzamento da média móvel de Jurik (JMA) e do indicador RSI.

Princípios

A estratégia utiliza principalmente dois tipos de indicadores:

  1. 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.

  2. 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.

Vantagens

  1. Parâmetros JMA ajustáveis adaptáveis a diferentes períodos.

  2. O RSI filtra falsas fugas.

  3. A combinação de dois indicadores reduz os falsos sinais.

  4. Controles de perda de stop.

  5. Relatório de lucro personalizável para a orientação de lucro.

Riscos e atenuações

  1. Uma combinação de dois indicadores pode gerar poucos sinais, pode ajustar os parâmetros de sensibilidade.

  2. O JMA ainda tem atraso, pode perder pontos de virada, pode otimizar com indicadores líderes.

  3. A colocação incorreta de stop loss pode ser atingida por uma perda maior.

  4. A dependência excessiva dos indicadores pode produzir sinais falsos, pode adicionar filtros de volume ou volatilidade.

Oportunidades de melhoria

  1. Teste os parâmetros JMA para encontrar as configurações ideais.

  2. Tente diferentes parâmetros RSI para melhor desempenho.

  3. Adicionar o mecanismo de travagem para paradas adaptativas.

  4. Otimizar o tamanho da posição de entrada como adicionar para ganhar negócios.

  5. Pesquise filtros adicionais como KD, MACD.

Resumo

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)



Mais.