Estratégia de negociação quantitativa multifatorial combinando RSI dinâmico e CCI


Data de criação: 2023-11-27 18:54:34 última modificação: 2023-11-27 18:54:34
cópia: 0 Cliques: 732
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa multifatorial combinando RSI dinâmico e CCI

Visão geral

Esta estratégia permite uma estratégia de negociação quantitativa multifatorista, combinando um indicador RSI dinâmico, um indicador CCI e uma média de MA múltipla. A estratégia considera várias dimensões, como tendências, sobrecompra e sobrevenda, para julgar e gerar sinais de negociação.

Princípio da estratégia

Indicadores técnicos

  • Linha média de MA: calcula o valor médio do preço de fechamento em um determinado período para determinar a tendência dos preços
  • Indicador de fraqueza relativa do RSI: a região de sobrecompra e sobrevenda
  • Indicador de tendência do CCI: como avaliar a sobrevenda e a sobrevenda
  • Stoch KDJ Indicador: julgar se o indicador aleatório está fora da tendência principal

Sinais de negociação

Sinais de compra: MA12 com MA26, CCI abaixo de 100 (superado), Stoch KDJ abaixo de 80 (superado)

Sinais de venda: Dinâmica de penetração abaixo do RSI, Stoch KDJ acima de 80 (super)

Vantagens estratégicas

  1. Multi-factor drive, julgamento integrado, redução de falsos sinais
  2. Sellable, detecção em tempo real de sobrecompra e sobrevenda
  3. Combinação de tendências, aleatoriedade e vários indicadores tecnológicos
  4. Modelagem de múltiplos conjuntos de parâmetros, alta flexibilidade

Risco estratégico

  1. A combinação de múltiplos fatores é muito complexa e os parâmetros são difíceis de ajustar
  2. Performance da estratégia altamente correlacionada com a seleção de parâmetros
  3. Optimizar os parâmetros rigorosamente de acordo com o processo de quantificação
  4. Risco de curvatura mais elevado

Otimização de Estratégia

  1. A robustez das estratégias de testes de mais conjuntos de dados
  2. Testes de combinação de múltiplos parâmetros para encontrar o parâmetro ótimo
  3. Aumentar o mecanismo de suspensão de prejuízos e reduzir a retirada máxima
  4. Aumentar o controle de posições para evitar a queda de preços
  5. Testar a adequação de diferentes tipos de contratos

Resumir

Esta estratégia utiliza um conjunto de indicadores técnicos e de julgamentos multifatores para encontrar os melhores parâmetros através de ajustes de parâmetros e verificação estatística rigorosa, o que permite obter melhores efeitos estratégicos. No entanto, a complexidade é maior, e é necessário evitar o risco de sobreajuste, ao mesmo tempo em que se controla o posicionamento e o stop loss para reduzir o máximo retorno.

Código-fonte da estratégia
/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)