Estratégia de negociação do indicador JMA crossover RSI


Data de criação: 2023-09-18 21:42:50 última modificação: 2023-09-18 21:42:50
cópia: 0 Cliques: 1340
1
focar em
1617
Seguidores

Visão geral

A estratégia gera um sinal de compra e venda através da interseção da média móvel Jurik (JMA) com o indicador RSI. A estratégia tenta usar a combinação dos dois indicadores para filtrar os falsos sinais e negociar quando a tendência é mais evidente.

Princípios

A estratégia utiliza uma combinação de dois indicadores:

  1. Indicador JMA: um tipo de média móvel plana de multiplicação por um eixo, com menor atraso, capaz de capturar mudanças de preço mais rapidamente.

  2. RSI: Indicador de força e fraqueza mais comum, refletindo a tendência de compra e venda no mercado.

Quando o JMA atravessa o RSI, indica que o impulso de aumento de preços de curto prazo é mais forte do que a tendência de longo prazo, gerando um sinal de compra; quando o JMA atravessa o RSI, indica um sinal de fechamento.

Após o sinal de cruzamento, o negócio abre uma posição na direção correspondente. A condição de parada é que o preço excede a proporção do alvo especificado ou o indicador cruza novamente.

Vantagens

  1. Os parâmetros do indicador JMA são ajustáveis e podem ser otimizados para diferentes períodos.

  2. O RSI pode ser filtrado para falsas rupturas.

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

  4. O mecanismo de suspensão de prejuízos embutido permite limitar os prejuízos.

  5. A taxa de lucro pode ser personalizada para atingir os objetivos de lucro.

Riscos e soluções

  1. Inating de combinação de dois indicadores, a frequência de geração de sinais pode ser muito baixa. Os parâmetros podem ser ajustados para tornar o indicador mais sensível.

  2. O indicador JMA também tem problemas de atraso e pode perder o ponto de inflexão de preços. Pode ser otimizado em combinação com outros indicadores pioneiros.

  3. A configuração inadequada do ponto de parada pode ser rompida, resultando na expansão dos prejuízos. O ponto de parada apropriado deve ser determinado com base em testes de dados históricos.

  4. A dependência de um indicador pode gerar falsos sinais. Pode-se adicionar um indicador de volume de transação ou de volatilidade para filtragem.

Otimização de ideias

  1. Teste os parâmetros do JMA para encontrar a melhor combinação de parâmetros.

  2. Tente diferentes configurações de parâmetros RSI para otimizar o efeito do indicador.

  3. A inclusão de um mecanismo móvel de suspensão de prejuízos para tornar a suspensão de prejuízos mais adaptável

  4. Optimizar a lógica de gerenciamento de estoque de estoque, como adicionar condições de estoque e estoque.

  5. Estude outros indicadores Filter Signals, como KD, MACD, etc.

Resumir

A estratégia baseia-se em JMA e RSI para implementar o rastreamento de tendências em dois indicadores cruzados, e pode ser configurada para limitar o risco de stop loss. No entanto, ainda há uma certa probabilidade de falso sinal, e é necessário continuar a otimizar os parâmetros do indicador e as condições de filtragem para reduzir a perda de negociação. A estratégia de stop loss também precisa de testes de otimização com base em dados de retorno.

Código-fonte da estratégia
/*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)