Estratégia quântica de reversão dupla da OCM

Autora:ChaoZhang, Data: 2024-01-04 14:35:23
Tags:

img

Resumo

Esta estratégia é uma estratégia de reversão dupla, combinando o indicador 123 Reversão e o indicador quântico CMOWMA para obter uma dupla confirmação dos sinais de reversão de preços com efeitos visuais de linha K vermelha e verde.

Princípio da estratégia

A estratégia consiste em duas partes:

  1. 123 Indicador de reversão

    • Use o preço de fechamento em relação ao preço de fechamento anterior para determinar o preço para cima ou para baixo
    • Utilize o cruzamento das linhas rápidas e lentas do indicador estocástico para confirmar os sinais de reversão
    • Gerar sinais longos ou curtos quando as condições são cumpridas
  2. Indicador quântico CMOWMA

    • Utilização do indicador da OCM para medir a dinâmica dos preços
    • Aplicar a média móvel ponderada pela WMA ao indicador da OCM
    • Ver longo (curto) quando o OCM está acima (abaixo) da sua MMA

Insira posições quando ambas as partes emitirem sinais na mesma direcção.

Vantagens da estratégia

  1. Mecanismo de confirmação dupla pode filtrar falhas e reduzir posições desnecessárias
  2. A coloração de linhas K vermelhas e verdes gera efeitos visuais para julgar facilmente as condições do mercado
  3. A combinação de indicadores de inversão e de impulso proporciona estabilidade geral
  4. Configurações de parâmetros simples tornam-no adequado para vários produtos e fácil de implementar

Riscos da Estratégia

  1. Os preços podem voltar a reverter após a reversão inicial, com risco de desacelerações
  2. A frequente mudança de posição gera taxas de negociação excessivas
  3. Configurações de parâmetros incorretas podem causar sinais demasiados ou demasiados poucos
  4. Os parâmetros da OCM devem ser ajustados com base nas características do produto

Os riscos podem ser reduzidos através do relaxamento das condições de reversão, do aumento do período de detenção, da otimização das combinações de parâmetros, etc.

Orientações de otimização

  1. Impactos dos testes de diferentes parâmetros estocásticos
  2. Substituir/adicionar confirmações por outros indicadores como MACD, KDJ, etc.
  3. Optimizações de ensaios de diferentes comprimentos de OCM e WMA
  4. Tente adicionar stop loss / take profit em certos níveis
  5. Configurar filtros para controlar a frequência de novas posições

Resumo

A estratégia é robusta em geral com parâmetros simples, fácil de implementar, combinando inversão de preço e indicadores de momento para formar um mecanismo de filtragem de sinal duplo eficaz para eliminar falsos sinais.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 19/08/2019
// 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 indicator plots Chandre Momentum Oscillator and its WMA on the 
//    same chart. This indicator plots the absolute value of CMO.
//    The CMO is closely related to, yet unique from, other momentum oriented 
//    indicators such as Relative Strength Index, Stochastic, Rate-of-Change, 
//    etc. It is most closely related to Welles Wilder?s RSI, yet it differs 
//    in several ways:
//    - It uses data for both up days and down days in the numerator, thereby 
//        directly measuring momentum;
//    - The calculations are applied on unsmoothed data. Therefore, short-term 
//        extreme movements in price are not hidden. Once calculated, smoothing 
//        can be applied to the CMO, if desired;
//    - The scale is bounded between +100 and -100, thereby allowing you to clearly 
//        see changes in net momentum using the 0 level. The bounded scale also allows 
//        you to conveniently compare values across different securities.
//
// 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

CMOWMA(Length, LengthWMA) =>
    pos = 0
    xMom = abs(close - close[1])
    xSMA_mom = sma(xMom, Length)
    xMomLength = close - close[Length]
    nRes = 100 * (xMomLength / (xSMA_mom * Length))
    xWMACMO = wma(nRes, LengthWMA)
    pos := iff(nRes > xWMACMO, 1,
    	   iff(nRes <= xWMACMO, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & CMO & WMA", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthCMO = input(14, minval=1)
LengthWMA = input(13, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posCMOWMA = CMOWMA(LengthCMO, LengthWMA)
pos = iff(posReversal123 == 1 and posCMOWMA == 1 , 1,
	   iff(posReversal123 == -1 and posCMOWMA == -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.