
A ideia principal da estratégia é usar a inversão de preços para testar a resistência ponderada perto da média móvel para criar posições. Quando os preços sobem ou caem, é provável que se forme suporte ou pressão, criando oportunidades de reversão.
A estratégia baseia-se em um indicador de média móvel ponderada, que calcula a média móvel ponderada de um determinado comprimento e, em seguida, monitora se o preço tem uma ruptura de uma certa amplitude. Quando o preço ultrapassa a média de uma certa distância, traça uma indicação de flecha e abra uma posição.
A estratégia pode escolher entre usar o tracking stop ou o stop-loss fixed distance através do parâmetro trail. O risco pode ser controlado ajustando a amplitude do stop-loss. O lucro parcial pode ser bloqueado com o parâmetro de limite de preço único.
A maior vantagem da estratégia é usar a combinação de inversão com a linha média para identificar os pontos-chave do mercado para abrir posições. A taxa de ganho e perda da estratégia de reversão geralmente é melhor e o risco é fácil de controlar.
Como é baseado em uma média móvel, o espaço para otimização de parâmetros é grande, e você pode testar a adaptabilidade de diferentes mercados ajustando parâmetros como comprimento da média e amplitude de ruptura.
O maior risco dessa estratégia é o fracasso da reversão. Quando o preço forma um sinal de reversão, se não for bem sucedido no acionamento de um stop loss ou paralisação, e continuar a operar na direção original, haverá um grande fluxo de perdas.
Além disso, a alta dependência da otimização de parâmetros, se a configuração de parâmetros é inadequada, é fácil perder o momento de reversão de preços ou gerar falsos sinais. É necessário entender e testar o comportamento do mercado e avaliar cuidadosamente a configuração de parâmetros.
Pode-se considerar a adição de mais indicadores para melhorar a qualidade e a precisão do sinal. Por exemplo, antes de um sinal de inversão de preços, pode-se detectar o aumento de um determinado período, especialmente dados de aumento de curto período, para determinar a característica de oscilação de preços.
Também é possível experimentar métodos de aprendizagem de máquina para treinar modelos para determinar o próximo passo possível do preço, registrando sinais de negociação históricos e dados de preços. Isso pode ajudar a filtrar sinais falsos e melhorar a qualidade do sinal.
Além disso, é possível introduzir um certo mecanismo de otimização de auto-adaptação. De acordo com os resultados reais da negociação, ajuste dinâmico de parâmetros ou pesos de regras, para realizar a auto-otimização da estratégia e ENO.
A estratégia opera de forma estável, com um bom retorno em um espaço de parâmetros razoáveis e em um ambiente de mercado. A maior vantagem é que o risco é controlado e tem um certo potencial de otimização. O próximo passo será focado na melhoria da qualidade do sinal e na capacidade de otimização de adaptação.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-22 08:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="WMA Breakout",overlay=true, initial_capital=25000, default_qty_value=1, commission_type=strategy.commission.cash_per_contract, commission_value=3.02)
len = input(20, minval=1, title="Length")
src = input(close, title="Source")
out = wma(src, len)
price_drop = input(.003, "When price drops (In Ticks) Enter Long", step=.001)
price_climb = input(.003, "When price climbs (In Ticks) Enter Short", step=.001)
trail = input(true, "Trailing Stop(checked), Market stop(unchecked)")
stop = input(10, "Stop (in ticks)", step=1)
limit = input(5, "Limit Out", step=1)
//size = input(1, "Limit Position Size (pyramiding)", minval=1)
timec = input(true, "Limit Time of Day (Buying Side)")
//Time Session
sess = input("1600-0500", "Start/Stop trades (Est time)")
t = time(timeframe.period, sess)
//plots
plot(wma(src,len))
z = if low+price_drop<out
(out-low)
plotarrow(z, colorup=red)
a = if high-price_climb>out
(high-out)
plotarrow(a, colorup=lime)
av=wma(src,len)
//Orders
if(timec)
strategy.entry("Enterlong", long=true, when=z and t>1)
else
strategy.entry("Enterlong", long=true, when=z)
if(trail)
strategy.exit("Exit","Enterlong", profit=limit, trail_points = 0, trail_offset = stop )
else
strategy.exit("Exit","Enterlong", profit=limit, loss = stop )
if(timec)
strategy.entry("Entershort", long=false, when=a and t>1)
else
strategy.entry("Entershort", long=false, when=a)
if(trail)
strategy.exit("Exit","Entershort", profit=limit, trail_points = 0, trail_offset = stop )
else
strategy.exit("Exit","Entershort", profit=limit, loss = stop )