
Esta estratégia usa o princípio da ruptura do indicador William, combinado com a linha K de uma forma específica, para projetar um modelo de abertura e fechamento de posições muito eficientes, para que você possa fazer mais curto com precisão nos pontos-chave da reversão do mercado, capturar a tendência da linha curta do meio e obter ganhos extras.
Esta estratégia usa pontos de divisão no indicador de William para julgar o sinal de inversão. Quando uma divisão acima ou abaixo ocorre, um sinal de negociação é gerado se coincidir com a direção da entidade da linha K.
Especificamente, a estratégia define um indicador personalizado WMX Williams Fractals. O indicador usa a função fator para determinar o tipo superior (upFractal) e o tipo inferior (dnFractal).
A lógica de classificação superior é: o valor máximo da linha K atual é maior que o valor máximo da linha K anterior n-raiz (n é um parâmetro ajustável), formando assim uma classificação superior de ruptura.
A lógica de classificação abaixo é: o valor mínimo da linha K atual é menor que o valor mínimo da linha K anterior de n raizes, formando assim uma classificação abaixo da ruptura.
Depois de classificar para cima e para baixo, julgar se eles estão mudando, ou seja, de nada para ter ou de ter para nada. Este é o momento em que a classificação está apenas se formando, o que significa que a reversão é mais provável.
Depois, é combinado com a direção da entidade da linha K para determinar o sinal de negociação específico. Quando a classificação superior for formada, feche acima da abertura, faça mais; quando a classificação atual for formada, feche abaixo da abertura, faça vazio.
O ponto de classificação William para determinar o tempo de reversão é um indicador técnico bem estabelecido
Combinação com a direção da linha K para confirmar sinais de negociação e evitar chops fora de tendência
Menos parâmetros, apenas n ciclos de modelagem, fácil teste e otimização
Regras de abertura de posição flexíveis, como tamanho de posição, condições de posição, etc., fáceis de aplicar no mercado
A partir do momento em que a classificação é feita, a tendência pode não ser totalmente reversível, mas deve ser avaliada em função das tendências.
A configuração do ponto de parada precisa ser cuidadosamente feita para evitar que o trânsito seja interrompido pelo ruído.
O parâmetro n precisa ser ajustado de acordo com as diferentes variedades, se o ciclo for muito grande ou muito pequeno, isso afetará o resultado
Solução:
Indicadores como médias móveis podem ser usados para avaliar tendências gerais e evitar posições adversas
Determinação de perdas de rastreamento dinâmico ou configuração de um limite de perda de retirada razoável
Otimizar os parâmetros usando o método de Análise de Caminho Avançado para encontrar o melhor parâmetro
Uma estratégia de reversão baseada em diversificação é propensa a criar situações em que uma reversão leva a perdas depois de vários lucros. Pode-se considerar a adição de filtros de tendência, limitando ainda mais o alcance das negociações e reduzindo as negociações de reversão desnecessárias.
Os métodos de parada atuais são simples e não permitem um acompanhamento efetivo. Pode-se tentar adicionar métodos de parada como parada móvel, parada de tempo e parada dinâmica.
Atualmente, apenas a direção física da linha K é julgada. Se mais informações da linha K, como a linha de sombra, a posição do terminal, etc., forem consideradas, um sinal de negociação mais preciso pode ser projetado.
Esta estratégia pertence a uma estratégia de inversão baseada em indicadores técnicos. Utiliza a classificação do Índice William para capturar a tendência de mudança das ações do índice em momentos críticos, combinando com a entidade da linha K para formar um sinal de negociação com o objetivo de obter lucros extras.
Em comparação com outras estratégias de reversão, esta estratégia pode ser diretamente implementada em operação física através de um design parametrizado, lógica clara e fácil de entender, ajuste de parâmetros conveniente e fácil de testar. O próximo passo é o julgamento de tendências, parada de perdas, etc. Otimizar ainda mais, espera-se obter melhores efeitos estratégicos.
/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © WMX_Q_System_Trading
//@version=4
SystemName="WMX Williams Fractals strategy V4"
InitCapital = 1000000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 10
strategy(title=SystemName, shorttitle=SystemName, overlay=true, initial_capital=InitCapital, default_qty_type=strategy.percent_of_equity, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission)
//study("WMX Williams Fractals", shorttitle="WMX Fractals", format=format.price, precision=0, overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input(title="Periods", defval=2, minval=2, type=input.integer)
h=close
l=close
factorh(High)=>
upFractal = ( (High[n+2] < High[n]) and (High[n+1] < High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+3] < High[n]) and (High[n+2] < High[n]) and (High[n+1] == High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+4] < High[n]) and (High[n+3] < High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+5] < High[n]) and (High[n+4] < High[n]) and (High[n+3] == High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ((High[n+6] < High[n]) and (High[n+5] < High[n]) and (High[n+4] == High[n]) and (High[n+3] <= High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
upFractal
upFractal=factorh(h)
factorl(Low)=>
dnFractal = ( (Low[n+2] > Low[n]) and (Low[n+1] > Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+3] > Low[n]) and (Low[n+2] > Low[n]) and (Low[n+1] == Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+4] > Low[n]) and (Low[n+3] > Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+5] > Low[n]) and (Low[n+4] > Low[n]) and (Low[n+3] == Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ((Low[n+6] > Low[n]) and (Low[n+5] > Low[n]) and (Low[n+4] == Low[n]) and (Low[n+3] >= Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
dnFractal=factorl(l)
U=valuewhen(upFractal[0]!= upFractal[1],l[0],3)
L=valuewhen(dnFractal[0]!=dnFractal[1],h[0],3)
longcon=crossover(close ,L) and close>open
shortcon=crossunder(close ,U) and close<open
if longcon
strategy.entry("Long", strategy.long, when = strategy.position_size <= 0 )
if shortcon
strategy.entry("Short", strategy.short, when = strategy.position_size >= 0 )