Estratégia combinada de inversão quantitativa e volume

Autora:ChaoZhang, Data: 21 de setembro de 2023
Tags:

Resumo

Esta estratégia combina duas estratégias de negociação quantitativas para gerar sinais de negociação mais precisos e confiáveis. A primeira estratégia é baseada na inversão de preço e a segunda é baseada na análise de volume. Os sinais combinados podem efetivamente melhorar a lucratividade.

Estratégia lógica

A estratégia consiste em duas partes:

  1. Estratégia de reversão

Usa o indicador STO para sinais de reversão. Vai longo quando o fechamento sobe por 2 dias e a linha lenta do STO está abaixo de 50. Vai curto quando o fechamento cai por 2 dias e a linha rápida do STO está acima de 50.

  1. Estratégia de volume

Analisa a relação preço-volume durante um período para determinar a direção, com suavização da média móvel.

Vai longo quando ambas as estratégias sinalizam longo, e vai curto quando ambas sinalizam curto.

A combinação melhora a qualidade do sinal, reduzindo muito os falsos sinais de qualquer estratégia.

Vantagens

  • Combina duas estratégias independentes, melhorando a precisão
  • A reversão captura oportunidades de recuperação, o volume prevê a direcção futura
  • Diferentes tipos de estratégias verificam-se mutuamente, reduzindo os falsos sinais
  • Combinação directa simples, fácil de implementar
  • Os parâmetros de cada estratégia podem ser otimizados separadamente

Riscos

  • Reversões arriscadas sem regras de saída rígidas
  • Análise de volume pode atrasar
  • Baseado exclusivamente em indicadores, requer análise técnica
  • São necessárias séries de dados mais longas para as médias móveis
  • Os parâmetros podem não ser universais para todos os produtos

Os riscos podem ser reduzidos:

  • Otimização do STO para melhor detecção de inversão
  • Adição de indicadores para confirmar os desvios de volume
  • Otimização dos períodos de média móvel
  • Análise de padrões de gráficos suplementares
  • Ensaios separados de parâmetros por produto

Orientações para a melhoria

A estratégia pode ser melhorada:

  1. Otimização dos parâmetros STO

    Valores de ajuste fino K, D para as melhores combinações

  2. Confirmação secundária das rupturas de volume

    Com indicadores como MACD, BOLL etc.

  3. Otimização dos períodos de média móvel

    Teste de diferentes períodos para sinais mais estáveis

  4. Adicionar padrões de gráficos

    Introdução de padrões além de sinais combinados

  5. Ensaios de parâmetros específicos do produto

    Os parâmetros podem variar entre os diferentes produtos

Resumo

Esta estratégia combina estratégias de reversão e volume para melhorar a qualidade e precisão do sinal. Mas a otimização de parâmetros, indicadores técnicos adicionais etc. podem refinar ainda mais o desempenho. Podemos ajustar continuamente com base nos resultados dos backtests, validar na negociação ao vivo, para obter uma estratégia de combo verdadeiramente robusta. Isso requer imenso tempo e esforço, mas as recompensas também serão significativas.


/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 21/10/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This is another version of FVE indicator that we have posted earlier 
// in this forum.
// This version has an important enhancement to the previous one that`s 
// especially useful with intraday minute charts.
// Due to the volatility had not been taken into account to avoid the extra 
// complication in the formula, the previous formula has some drawbacks:
// The main drawback is that the constant cutoff coefficient will overestimate 
// price changes in minute charts and underestimate corresponding changes in 
// weekly or monthly charts.
// And now the indicator uses adaptive cutoff coefficient which will adjust to 
// all time frames automatically.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


FVI(Samples,Perma,Cintra,Cinter) =>
    pos = 0
    xhl2 = hl2
    xhlc3 = hlc3
    xClose = close
    xIntra = log(high) - log(low)
    xInter = log(xhlc3) - log(xhlc3[1])
    xStDevIntra = stdev(sma(xIntra, Samples) , Samples)
    xStDevInter = stdev(sma(xInter, Samples) , Samples)
    xVolume = volume
    TP = xhlc3
    TP1 = xhlc3[1]
    Intra = xIntra
    Vintra = xStDevIntra
    Inter = xInter
    Vinter = xStDevInter
    CutOff = Cintra * Vintra + Cinter * Vinter
    MF = xClose - xhl2 + TP - TP1
    FveFactor =  iff(MF > CutOff * xClose, 1, 
                  iff(MF < -1 * CutOff * xClose, -1,  0))
    xVolumePlusMinus = xVolume * FveFactor
    Fvesum = sum(xVolumePlusMinus, Samples)
    VolSum = sum(xVolume, Samples)
    xFVE = (Fvesum / VolSum) * 100
    xEMAFVE = ema(xFVE, Perma)
    pos :=iff(xFVE > xEMAFVE, 1,
    	   iff(xFVE < xEMAFVE, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Volatility Finite Volume Elements", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Samples = input(22, minval=1)
Perma = input(40, minval=1)
Cintra = input(0.1)
Cinter = input(0.1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posFVI = FVI(Samples,Perma,Cintra,Cinter)
pos = iff(posReversal123 == 1 and posFVI == 1 , 1,
	   iff(posReversal123 == -1 and posFVI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Mais.