Esta é uma estratégia de consultor especialista de curto prazo de apenas 3 minutos para futuros (ES) E-mini S&P500. Ela gera sinais de negociação calculadores de uma série de médias móveis exponenciais e combinando condições específicas de padrão.
O indicador central desta estratégia é a linha média T3. O T3 primeiro calcula um conjunto de médias móveis exponenciais xe1 ~ x6 com base no parâmetro T3 definido pelo usuário. Em seguida, calcula a média ponderada dessas EMAs usando coeficientes específicos como a linha média final T3.
Quando o preço de fechamento está abaixo da linha média T3, um sinal de compra é gerado. Quando o preço de fechamento está acima da linha média T3, um sinal de venda é gerado. Além disso, a estratégia também julga padrões específicos de velas como condições de entrada suplementares. As ordens de negociação só serão enviadas quando as condições do padrão e os sinais T3 surgirem ao mesmo tempo.
A maior força desta estratégia reside no design de múltiplos filtros e otimização de parâmetros. Por um lado, a combinação de filtros de ação de preços e padrões de gráficos pode reduzir as negociações de ruído. Por outro lado, parâmetros-chave como T3 e regras de julgamento de padrões podem ser otimizados para se adaptar a diferentes mercados e melhorar a precisão de entrada.
Em comparação com as médias móveis simples, o mecanismo de suavização tripla do indicador T3 é eficaz na filtragem do ruído do mercado e na identificação de pontos de reversão da tendência.
Os principais riscos desta estratégia vêm de ajuste inadequado de parâmetros e período de retenção de tamanho excessivo. Se o parâmetro T3 for definido muito grande, os indicadores ficarão para trás do mercado; se for definido muito pequeno, ele aumenta a probabilidade de negociações de ruído. Além disso, as operações de 3 minutos podem enfrentar grandes perdas sem stop loss oportuno.
Para controlar os riscos, a primeira coisa é fazer repetidos backtests para determinar a faixa de parâmetros ideal para diferentes produtos.
Existem várias direcções para melhorar a estratégia:
Otimizar o parâmetro T3 para encontrar o intervalo ideal para diferentes instrumentos de negociação
Melhorar a lógica de julgamento de padrões para aumentar a precisão do reconhecimento de padrões
Adicionar mecanismos de stop loss mais avançados como trailing stop loss
Adicionar módulo de gestão de dinheiro baseado no fator de lucro ou extração máxima
Adicionar módulo de entrada assistida por aprendizagem de máquina
Através destas melhorias, a estabilidade e a rentabilidade da estratégia podem ser aumentadas gradualmente.
Como uma estratégia de negociação intradiária de curto prazo, esta estratégia tem vantagens como enorme espaço de otimização, múltiplos filtros e execução rápida de ordens.
/*backtest start: 2023-11-16 00:00:00 end: 2023-11-23 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("ES 3m Short Only (Triple RED)", overlay=true) // Alert Message '{{strategy.order.alert_message}}' //3min T3 = input(150)//to 600 xPrice3 = close xe1 = ta.ema(xPrice3, T3) xe2 = ta.ema(xe1, T3) xe3 = ta.ema(xe2, T3) xe4 = ta.ema(xe3, T3) xe5 = ta.ema(xe4, T3) xe6 = ta.ema(xe5, T3) b3 = 0.7 c1 = -b3*b3*b3 c2 = 3*b3*b3+3*b3*b3*b3 c3 = -6*b3*b3-3*b3-3*b3*b3*b3 c4 = 1+3*b3+b3*b3*b3+3*b3*b3 nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3 // Buy Signal - Price is below T3 Average buySignal3 = xPrice3 < nT3Average sellSignal3 = xPrice3 > nT3Average //NinjaTrader Settings. acct = "Sim101" ticker = "ES 12-23" qty = 1 takeProfitTicks = 4 stopLossTicks = 16 tickSize = 0.25 takeProfitShort = close - takeProfitTicks * tickSize stopLossShort = close + stopLossTicks * tickSize OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }' CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }' IsUp = close > open IsDown = close < open PatternPlot = IsDown[2] and IsDown[1] and IsDown and close[1] <= high[0] and close[1] > close[0] and low[1] > low[0] and high[2] > high[1] and low[2] <= low[1] if (PatternPlot and sellSignal3) strategy.entry('Short', strategy.short, alert_message=OCOMarketShort) strategy.exit('Close Short', 'Short', profit=takeProfitTicks, loss=stopLossTicks, alert_message=CloseAll) //plotshape(PatternPlot, title="Custom Pattern", style=shape.circle, location=location.abovebar, color=color.red, size=size.small)