Estratégia quantitativa de negociação multifatores combinada de RSI dinâmico e CCI

Autora:ChaoZhang, Data: 2023-11-27 18:54:34
Tags:

img

Resumo

Esta estratégia combina RSI dinâmico, CCI e múltiplas médias móveis MA para implementar uma estratégia quantitativa de negociação orientada por vários fatores.

Princípio da estratégia

Indicadores técnicos

  • MA: Calcula o preço médio de fechamento durante um período para determinar a tendência dos preços
  • RSI: Níveis de sobrecompra e sobrevenda dos juízes
  • CCI: Estatuto dos juízes sobrecomprados e sobrevendidos
  • Stoch KDJ: Juízes desvio do estocástico da tendência principal

Sinais comerciais

Sinal de compra: MA12 ultrapassa MA26, CCI abaixo de 100 (supervenda), Stoch KDJ abaixo de 80 (supervenda)

Signo de venda: RSI cruza abaixo do limiar dinâmico, Stoch KDJ acima de 80 (overbought)

Vantagens

  1. Multifatores, julgamento abrangente, sinais falsos mais baixos
  2. Limite dinâmico para a detecção de sobrecompra e sobrevenda em tempo real
  3. Combina indicadores técnicos de tendência, estocásticos e principais
  4. Adota ajuste de parâmetros múltiplos, alta flexibilidade

Riscos

  1. Combinação multifator excessivamente complexa, ajuste de parâmetros difícil
  2. Desempenho fortemente relacionado com a selecção de parâmetros
  3. Requer um processo quantitativo rigoroso para a otimização de parâmetros
  4. Risco elevado de ajustamento da curva

Optimização

  1. Mais testes de conjuntos de dados para a robustez da estratégia
  2. Ensaios de combinação de parâmetros múltiplos para encontrar o valor ideal
  3. Adicionar stop loss para reduzir o drawdown máximo
  4. Adicionar dimensionamento de posição para evitar perseguição e matar
  5. Teste de adaptabilidade entre diferentes produtos

Conclusão

Esta estratégia combina múltiplos indicadores técnicos e julgamentos baseados em múltiplos fatores com ajuste de parâmetros e validação estatística para alcançar bons resultados.


/*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)

Mais.