Estratégia de acompanhamento da inversão da média de dois fatores

Autora:ChaoZhang, Data: 2023-12-19 11:09:20
Tags:

img

Resumo

Esta estratégia pertence à estratégia de rastreamento de reversão de média de dois fatores no campo da negociação quantitativa.

Princípio

A estratégia consiste em duas sub-estratégias. A primeira sub-estratégia é a estratégia de reversão 123. Ele julga se o mercado está em um ponto de reversão, calculando a mudança nos preços de fechamento nos dois dias de negociação anteriores e combinando o indicador estocástico. Especificamente, quando o preço de fechamento sobe por dois dias consecutivos e o indicador estocástico está abaixo de 50, um sinal de compra é emitido; Quando o preço de fechamento cai por dois dias consecutivos e o indicador estocástico está acima de 50, um sinal de venda é emitido.

A segunda subestratégia é a estratégia do canal de Keltner. Esta estratégia calcula a média móvel típica do preço e a faixa de volatilidade nos n dias de negociação mais recentes. Quando o preço se aproxima dos trilhos superiores ou inferiores, são emitidos sinais de negociação reversa. Quando o preço está abaixo do trilho inferior, vá curto; quando está acima do trilho superior, vá longo.

Por último, julgando as direcções dos sinais das duas sub-estratégias, a estratégia calcula o sinal de posição final.

Análise das vantagens

A maior vantagem desta estratégia de rastreamento de reversão de média de dois fatores é que pode aproveitar as oportunidades no tempo quando o mercado se inverte e realizar a idéia de negociação de comprar baixo e vender alto.

Especificamente, a configuração do parâmetro do indicador estocástico na estratégia de reversão 123 é relativamente conservadora, o que pode efetivamente filtrar falsas reversões em mercados oscilantes.

Análise de riscos

O principal risco desta estratégia é que o momento dos sinais de reversão é crucial. Se ocorrerem falsas reversões contínuas ou se o momento dos sinais de reversão for escolhido incorretamente, isso levará à falha de manter uma tendência completa, afetando assim o retorno final.

Além disso, as estratégias de dois fatores têm maior dificuldade na seleção e otimização de parâmetros do que as estratégias de um único fator. É necessário testar e avaliar de forma abrangente os parâmetros das duas sub-estratégias, caso contrário, o fracasso também é muito provável.

Por fim, a negociação reversa em si tem uma relação risco-recompensa desproporcional. Condições anormais do mercado podem facilmente levar à liquidação.

Orientações de otimização

De acordo com a análise de risco acima referida, a estratégia pode ser otimizada nos seguintes aspectos:

  1. Teste diferentes definições dos parâmetros do indicador de inversão para encontrar combinações com maior tolerância a falhas e menos sinais falsos
  2. Tente valores de parâmetros de diferentes comprimentos de ciclo para encontrar valores que capturam reversões com mais precisão
  3. Adicionar um módulo de stop loss para controlar estritamente a perda máxima por negociação
  4. Teste os efeitos de diferentes períodos de retenção para encontrar pontos de saída que correspondam melhor à lógica da estratégia
  5. Aumentar o número de posições abertas ou acrescentar módulos de controlo de posições para tornar o rácio risco/retorno mais razoável

Resumo

Como uma estratégia típica de rastreamento de reversão de média de dois fatores, integrando as sub-estratégias de reversão 123 e do canal Keltner, essa estratégia visa capturar com mais precisão o momento de comprar baixo e vender alto nos pontos de reversão do mercado. Com otimização adequada de parâmetros e controle de risco, tal estratégia pode obter alfa relativamente considerável.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/12/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
// The Keltner Channel, a classic indicator 
// of technical analysis developed by Chester Keltner in 1960. 
// The indicator is a bit like Bollinger Bands and Envelopes.
//
// 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

KeltnerChn(nPeriod) =>
    pos = 0.0
    xPrice = sma(hlc3, nPeriod)
    xMove = sma(high - low, nPeriod)
    reverse = input(false, title="Trade reverse")
    xUpper = xPrice + xMove
    xLower = xPrice - xMove
    pos := iff(close < xLower, -1,
             iff(close > xUpper, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Keltner Channel", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nPeriod = input(title="Period", defval=10, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKeltnerChn = KeltnerChn(nPeriod)
pos = iff(posReversal123 == 1 and posKeltnerChn == 1 , 1,
	   iff(posReversal123 == -1 and posKeltnerChn == -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.