Baseado em sistema de negociação quantitativa dupla


Data de criação: 2024-02-26 14:30:54 última modificação: 2024-02-26 14:30:54
cópia: 5 Cliques: 654
1
focar em
1617
Seguidores

Baseado em sistema de negociação quantitativa dupla

Esta estratégia é um sistema de negociação combinando o indicador CCI, o indicador RSI e duas médias móveis. O sistema pode capturar tendências convencionais e, ao mesmo tempo, usar o cruzamento do indicador RSI para aumentar a confirmação de entradas para filtrar algum ruído.

Princípio da estratégia

A estratégia baseia-se principalmente no indicador CCI para determinar a direção da tendência. Quando o indicador CCI é superior a 100 é um mercado de ativos e inferior a 100 é um mercado de ativos. O sistema usa duas médias móveis cruzadas para auxiliar na determinação da direção da tendência.

Após a determinação da tendência de pluralidade, o sistema usa o cruzamento de dois indicadores RSI de diferentes comprimentos de parâmetros como verificação de entrada. Por exemplo, no mercado de múltiplos, se o indicador RSI de curto período atravessar o indicador RSI de longo período, é um sinal de compra final. Este design é principalmente para filtrar o ruído e evitar que o ajuste de curto prazo na tendência leve a erros de negociação.

A estratégia de abrir posições apenas no horário de negociação designado, e ativamente fechar todas as posições 15 minutos antes do fechamento, para evitar o risco do dia seguinte. Depois de abrir a posição, o stop loss móvel será usado para bloquear os lucros.

Análise de vantagens

  • A combinação de discernimento de tendências e cruzamento de indicadores permite uma identificação eficaz de tendências e filtragem de ruído, com entrada precisa.
  • Usar o Stop Loss móvel para controlar o risco e evitar que o Stop Loss seja perseguido
  • Abrir posições apenas em horários marcados para evitar o risco de cair à noite
  • Os parâmetros do RSI são ajustáveis e podem ser adaptados de forma flexível a diferentes cenários de mercado

Análise de Riscos

  • Indicadores do CCI não são eficazes em avaliar mercados com extrema volatilidade
  • O RSI duplo está mais limitado e pode perder algumas oportunidades
  • A perda móvel pode ser muito subjetiva e precisa de parâmetros de otimização
  • Especificar o horário de negociação que pode perder o salto causado por notícias importantes da noite

Recomendações de otimização

  • Teste os diferentes parâmetros do CCI para encontrar o melhor conjunto de parâmetros
  • Teste se é possível cancelar a condição de restrição de cruzamento RSI e entrar diretamente na CCI
  • Optimizar a retrospectiva dos parâmetros do método de parada móvel para encontrar o melhor parâmetro
  • Teste a eliminação da lógica de posições limpas obrigatórias em vez de um rastreamento móvel de stop loss durante a posse para maximizar os lucros

Resumir

Esta estratégia leva em consideração o julgamento de tendências e a verificação cruzada dos indicadores, garantindo a eficácia dos sinais de negociação, ao mesmo tempo em que controla o risco. Através da otimização dos parâmetros e do ajuste lógico, a estratégia pode aumentar ainda mais a margem de lucro e reduzir as oportunidades de omissão. Esta é uma ideia de negociação com muito potencial.

Código-fonte da estratégia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rwestbrookjr

//@version=5
strategy("EMA with RSI Cross Strategy", overlay=true)

//EMA
fastLen = input(title='Fast EMA Length', defval=9)
slowLen = input(title='Slow EMA Length', defval=20)

fastEMA = ta.ema(close, fastLen)
slowEMA = ta.ema(close, slowLen)

fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line)

fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud')

// Bull and Bear Alerts
//Bull = ta.crossover(fastEMA, slowEMA)
Bull = fastEMA > slowEMA
//Bear = ta.crossunder(fastEMA, slowEMA)
Bear = fastEMA < slowEMA

//RSIs
rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSource1Input = input.source(close, "Source", group="RSI Settings")
rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings")
rsiSource2Input = input.source(close, "Source", group="RSI Settings")

up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input)
down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input)
rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))
up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input)
down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

//CCI
cciLength = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, cciLength)
cci = (src - ma) / (0.015 * ta.dev(src, cciLength))

//Trail Stop Setup
trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5)

longStop = 0.0, shortStop = 0.0

longStop := if Bull
    stopValue = close - trstp
    math.max(stopValue, longStop[1])
else
    0.0

shortStop := if Bear
    stopValue = close + trstp
    math.min(stopValue, shortStop[1])
else
    999999


//Session Setup
open_session=input(defval="0930-1545")
session = time("1", open_session)
validSession=(na(session) ? 0 : 1)

//Trade Signals
longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession
if (longCondition)
    strategy.entry("Long", strategy.long, 1)
    
//longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75
longExit = close < longStop or not validSession
if (longExit)
    strategy.close("Long")

shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession
if (shortCondition)
    strategy.entry("Short", strategy.short, 1)

//shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75
shortExit = close > shortStop or not validSession
if (shortExit)
    strategy.close("Short")