A estratégia de negociação de média móvel dupla de momento é uma estratégia de negociação de curto prazo que utiliza indicadores de momento e tendência de preços. A estratégia usa o preço de fechamento, preço de abertura, canal de preço, RSI rápido e outros indicadores para gerar sinais de negociação. Estabelecerá posições longas ou curtas quando surgirem breakouts de preço ou sinais de indicador.
A estratégia toma decisões de negociação baseadas principalmente nos seguintes indicadores de julgamento:
Canal de preços: Calcule os preços mais altos e mais baixos dos últimos 30 candelabros para determinar o intervalo do canal. O preço de fechamento acima do ponto médio do canal é considerado de alta. O preço de fechamento abaixo do ponto médio do canal é considerado de baixa.
RSI rápido: Calcule o valor do RSI dos últimos 2 velas. RSI abaixo de 25 é considerado sobrevendido e RSI acima de 75 é considerado sobrecomprado.
Linha Yin Yang: Calcule o tamanho da entidade dos dois últimos velares. Duas velas vermelhas sugerem um sinal de baixa, enquanto duas velas verdes sugerem um sinal de alta.
Condição de suspensão de perdas: Forçar a liquidação quando as perdas atingirem uma certa percentagem para limitar as perdas.
Com os sinais combinados dos indicadores de tendência, dinâmica e sobrecompra/supervenda, esta estratégia de curto prazo pode identificar eficazmente reversões e gerar sinais de negociação oportunos.
As vantagens desta estratégia incluem:
Melhora da precisão do sinal através da combinação de múltiplos indicadores, o que ajuda a filtrar os falsos sinais.
Respostas mais rápidas aos pontos de virada devido ao uso do RSI rápido, que é mais sensível que o RSI regular.
Alta confiabilidade em diferentes produtos e prazos, graças à rigorosa otimização de parâmetros durante backtests.
Mecanismo automático de stop loss para controlar perdas potenciais além das expectativas.
Alguns riscos desta estratégia:
A configuração incorreta dos parâmetros do canal de preços pode causar choques.
O tempo de retenção de posição unilateral pode ser demasiado longo durante tendências fortes, excedendo as projecções.
O ajuste incorreto do ponto de stop loss pode aumentar as perdas.
Podemos mitigar e reduzir estes riscos ajustando os parâmetros do canal, otimizando o tempo de entrada, ajustando dinamicamente os pontos de stop loss, etc.
Algumas direcções que a estratégia pode ser melhorada:
Incorporar algoritmos de aprendizagem de máquina para obter otimização automática de parâmetros, aumentando a adaptabilidade.
Combine mais fontes de dados como notícias para melhorar as decisões de negociação e a precisão do sinal.
Desenvolver mecanismos dinâmicos de dimensionamento das posições com base nas condições de mercado para melhor controlar os riscos.
Ampliar a aplicabilidade à negociação de arbitragem de futuros para aumentar ainda mais os retornos absolutos.
Esta estratégia combina várias técnicas, incluindo a quebra de preço, sinal de indicador, stop loss, etc. Demonstrou boa estabilidade e desempenho em backtests e negociação ao vivo.
/*backtest start: 2023-11-23 00:00:00 end: 2023-11-30 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") usersi = input(true, defval = true, title = "Use RSI strategy") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period") showcl = input(true, defval = true, title = "Price Channel") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") src = close //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] col = showcl ? blue : na col2 = showcl ? black : na plot(lasthigh, color = col2, linewidth = 2) plot(lastlow, color = col2, linewidth = 2) plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Fast RSI fastup = rma(max(change(src), 0), 2) fastdown = rma(-min(change(src), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Signals body = abs(close - open) abody = sma(body, 10) up1 = rbars and close > center and uset dn1 = gbars and close < center and uset up2 = close <= lastlow and close < open and usect dn2 = close >= lasthigh and close > open and usect up3 = fastrsi < 25 and close > center and usersi dn3 = fastrsi > 75 and close < center and usersi exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2) lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] //Trading if up1 or up2 or up3 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 or dn3 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()