Esta estratégia adota o princípio de ruptura fractal do indicador de Williams e combina padrões específicos de linha K para projetar um modelo de abertura e fechamento longo e curto eficiente.
Esta estratégia usa os pontos fractais no indicador de Williams para determinar sinais de reversão.
Especificamente, um indicador personalizado chamado WMX Williams Fractals é definido na estratégia.
A lógica do fractal superior é: o preço mais alto da linha K atual é maior do que o preço mais alto das n linhas K anteriores (n é um parâmetro ajustável), formando assim um fractal de ruptura do lado superior.
A lógica do fractal inferior é: o preço mais baixo da linha K atual é menor do que o preço mais baixo das n linhas K anteriores, formando assim um fractal de ruptura lateral inferior.
Depois de obter os fractais superior e inferior, determine se eles mudam, ou seja, de nenhum para existir ou vice-versa.
Em seguida, combinado com a direção da entidade da linha K para determinar sinais comerciais específicos. Quando o fractal superior é formado e o fechamento é maior que o aberto, vá longo. Quando o fractal inferior é formado e o fechamento é menor que o aberto, vá curto.
Use os pontos fractais do indicador Williams para determinar o tempo de reversão.
Combinar a direção da entidade da linha K para confirmar os sinais de negociação e evitar regiões agitadas sem tendência.
Poucos parâmetros que só precisam ajustar o período fractal n, fácil de testar e otimizar.
Regras flexíveis de configuração para a abertura de posições, tais como dimensionamento de posições, condições de encerramento, etc., fáceis de aplicar na negociação em tempo real.
Após as formas fractais, o mercado pode não se inverter completamente, precisa combinar com o julgamento da tendência.
A configuração da posição stop loss precisa ser cuidadosa para evitar ser eliminado por movimentos ruidosos de volatilidade.
O parâmetro n deve ser ajustado para diferentes produtos.
Soluções:
Pode adicionar indicadores como média móvel para julgar a tendência principal, evitar a negociação contra as tendências.
O método de classificação deve ser utilizado para determinar se o valor de uma posição em risco é igual ou inferior a 0,01%.
Utilize a Análise Walk Forward para otimizar parâmetros e encontrar os valores ideais.
As estratégias de reversão fractal tendem a formar lucros múltiplos e, em seguida, reverter novamente para formar perdas.
O método de stop loss simples atual não pode rastrear efetivamente os movimentos do mercado. Pode tentar técnicas de stop loss mais avançadas como stop loss em movimento, stop loss baseado no tempo, stop loss dinâmico etc.
Se considerar mais informações de linha K como mechas e localização próxima, pode projetar sinais comerciais ainda mais precisos.
Esta é uma estratégia de reversão baseada em indicadores técnicos. utiliza os fractals do indicador Williams para capturar mudanças na tendência do subjacente em pontos pivô-chave, combinados com a direção da entidade da linha K para formar sinais comerciais, com o objetivo de alcançar retornos excessivos.
Em comparação com outras estratégias de reversão, esta estratégia apresenta um design parametrizado para lógica clara e fácil compreensão.
/*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 )