A estratégia de rastreamento de tendências do oscilador de momento é uma abordagem composta que utiliza indicadores de momento, osciladores e médias móveis simultaneamente. O objetivo é identificar as tendências ascendentes do estágio 2 e as tendências descendentes do estágio 4 para gerar sinais longos e curtos precisos. Esta estratégia aproveita substancialmente a teoria do ciclo de mercado, tomando posições apenas durante os estágios de mercado mais lucrativos. Enquanto isso, também combina várias ferramentas técnicas como análise de momento, julgamento de tendências e avaliação de volatilidade para formar uma estrutura de decisão abrangente e eficiente adaptada aos rápidos ambientes de negociação modernos.
Os sinais desta estratégia vêm de um conjunto de três principais indicadores técnicos, incluindo o Momentum RSI aprimorado, EMA Crossover e ATR. Especificamente, a estratégia considera uma tendência de alta quando a EMA mais rápida cruza acima da EMA mais lenta, gerando sinais longos; uma tendência de baixa é identificada quando a EMA mais rápida cruza abaixo da EMA mais lenta, provocando sinais curtos. Além disso, áreas altas do Momentum RSI representam forte intenção de alta, enquanto áreas baixas indicam forças de baixa abundantes para confirmar a validade das tendências em curso. O ATR ajuda a avaliar a volatilidade do mercado para posicionar o stop loss.
A singularidade desta estratégia reside no fato de que ela só produz sinais durante a Fase 2 de um mercado de alta e a Fase 4 de um mercado de baixa. Em outras palavras, ela abre posições exclusivamente quando as tendências de alta demonstram o momento mais forte e as tendências de baixa mostram a maior clareza. Esta abordagem minimiza os riscos decorrentes das fases incertas de consolidação e distribuição, resultando em probabilidades de ganho muito altas.
Em resumo, a lógica de decisão desta estratégia pode ser descrita como: confirmar a tendência baseada em estágios (estágio 2 ou estágio 4) > determinar o viés de alta / baixa por Momentum RSI > julgar a direcionalidade por cruzamento EMA > incorporar ATR para a configuração de stop loss > abrir posições quando todos os critérios forem atendidos.
A maior vantagem da estratégia provém da profunda compreensão dos padrões periódicos do mercado.
A filtragem multi-indicador que utiliza métricas de dinâmica, força da tendência e volatilidade elimina sinais enganosos de quaisquer indicadores individuais e, assim, melhora substancialmente a estabilidade e a fiabilidade globais.
Os abundantes parâmetros ajustáveis expostos permitem que os usuários adaptem a estratégia ao estilo de negociação pessoal e aos regimes de mercado em mudança, facilitando a otimização adicional para se destacar em situações específicas.
Nenhuma estratégia quantitativa pode evitar completamente os riscos inerentes ao mercado, como eventos imprevisíveis de cisne negro. Mas esses riscos existem objetivamente em vez de derivar da própria estratégia.
A liberdade de ajustar parâmetros também pode levar a problemas de sobreajuste se não for feito com prudência.
A atual abordagem de quantidade fixa pode resultar em exposições insuficientes durante as mega tendências. Uma melhoria é introduzir módulos de dimensionamento de posição e gradualmente montar posições maiores quando as tendências se tornam fortemente evidentes, melhor capitalizando essas grandes oscilações.
Esta estratégia pode interagir com técnicas de aprendizado de máquina, construindo um modelo treinado para avaliar a qualidade do sinal e filtrar sinais inferiores, levando assim o desempenho geral para o próximo nível.
A estratégia de rastreamento de tendências do oscilador de momento é uma abordagem altamente inteligente e parametrizada. Ela se destaca em elevar a qualidade do sinal explorando padrões periódicos de mercado e produz entradas confiáveis através de validações cruzadas de múltiplos indicadores. Enquanto isso, os abundantes botões ajustáveis fornecem grande flexibilidade aos usuários. Em conclusão, é uma estratégia composta avançada credível e recomendável que demonstra vantagem prática para prosperar nos mercados modernos ultraeficientes e fornecer alfa consistente.
/*backtest start: 2023-01-15 00:00:00 end: 2024-01-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JS_TechTrading //@version=5 strategy('The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', shorttitle='The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', overlay=true,initial_capital = 1000) //// author - JS-TechTrading // MOM Rsi indicator group_mom_rsi = "Rsi Of Momentum " len = input.int(10, minval=1, title="Length Mom-Rsi", group =group_mom_rsi ,tooltip = 'This ind calculate Rsi value of Momentum we use this ind to determine power of trend') src2 = close mom = src2 - src2[len] rsi_mom = ta.rsi(mom, len) mom_rsi_val = input.int(60, minval=1, title="Mom-Rsi Limit Val", group =group_mom_rsi, tooltip = "When our Mom-Rsi value more then this we open LONG or Short, with help of this indicator we we determine the status of the trend") // Super Trend Ind group_supertrend = "SuperTrend indicator" atrPeriod = input(10, "ATR Length SuperTrend", group = group_supertrend) factor = input.float(3.0, "Factor SuperTrend", step = 0.01, group = group_supertrend) [supertrend, direction] = ta.supertrend(factor, atrPeriod) // Ema Indicator group_most = "Ema indicator" src = input(close, 'Source Ema Ind',group = group_most) AP2 = input.int(defval=12, title='Length Ema Ind', minval=1,group = group_most) Trail1 = ta.ema(src, AP2) //Ema func AF2 = input.float(defval=1, title='Percent Ema Ind', minval=0.1,group = group_most) / 100 SL2 = Trail1 * AF2 // Stoploss Ema Trail2 = 0.0 iff_1 = Trail1 > nz(Trail2[1], 0) ? Trail1 - SL2 : Trail1 + SL2 iff_2 = Trail1 < nz(Trail2[1], 0) and Trail1[1] < nz(Trail2[1], 0) ? math.min(nz(Trail2[1], 0), Trail1 + SL2) : iff_1 Trail2 := Trail1 > nz(Trail2[1], 0) and Trail1[1] > nz(Trail2[1], 0) ? math.max(nz(Trail2[1], 0), Trail1 - SL2) : iff_2 //EMA50/150/200 group_50_150_200="EMA50/150/200" show_emas=input.bool(defval = true, title = "SHOW EMAS", group = group_50_150_200) ema50= ta.ema(src, 50) ema150 = ta.ema(src, 150) ema200 = ta.ema(src, 200) ema50_color=input.color(defval = color.purple, title = "EMA50 COLOR",group = group_50_150_200) ema50_linewidth=input.int(defval = 2, title = "EMA50 LINEWIDTH", group = group_50_150_200) ema150_color=input.color(defval = color.blue, title = "EMA150 COLOR", group = group_50_150_200) ema150_linewidth=input.int(defval = 2, title = "EMA150 LINEWIDTH", group = group_50_150_200) ema200_color=input.color(defval = color.black, title = "EMA200 COLOR", group = group_50_150_200) ema200_linewidth=input.int(defval = 2, title = "EMA200 LINEWIDTH", group = group_50_150_200) plot(show_emas ? ema50 : na, color = ema50_color, linewidth = ema50_linewidth) plot(show_emas ? ema150 : na, color=ema150_color, linewidth = ema150_linewidth) plot(show_emas ? ema200 : na, color = ema200_color, linewidth = ema200_linewidth) //Bull = ta.barssince(Trail1 > Trail2 and close > Trail2 and low > Trail2) < ta.barssince(Trail2 > Trail1 and close < Trail2 and high < Trail2) //TS1 = plot(Trail1, 'ExMov', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(33, 149, 243, 100) : color.rgb(255, 235, 59, 100), linewidth=2) //TS2 = plot(Trail2, 'ema', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(76, 175, 79, 30) : color.rgb(255, 82, 82, 30), linewidth=2) //fill(TS1, TS2, Bull ? color.green : color.red, transp=90) // Strategy Sett group_strategy = "Settings of Strategy" Start_Time = input(defval=timestamp('01 January 2000 13:30 +0000'), title='Start Time of BackTest', group =group_strategy) End_Time = input(defval=timestamp('30 April 2030 19:30 +0000'), title='End Time of BackTest', group =group_strategy) dollar = input.float(title='Dollar Cost Per Position* ', defval=50000, group =group_strategy) trade_direction = input.string(title='Trade_direction', group =group_strategy, options=['LONG', 'SHORT', 'BOTH'], defval='BOTH') v1 = input(true, title="Version 1 - Uses SL/TP Dynamically ", group =group_strategy ,tooltip = 'With this settings our stoploss price increase or decrease with price to get better PNL score') v2 = input(false, title="Version 2 - Uses SL/TP Statically", group =group_strategy) v2stoploss_input = input.float(5, title='Static Stop.Loss % Val', minval=0.01, group =group_strategy)/100 v2takeprofit_input = input.float(10, title='Static Take.Prof % Val', minval=0.01, group =group_strategy)/100 v2stoploss_level_long = strategy.position_avg_price * (1 - v2stoploss_input) v2takeprofit_level_long = strategy.position_avg_price * (1 + v2takeprofit_input) v2stoploss_level_short = strategy.position_avg_price * (1 + v2stoploss_input) v2takeprofit_level_short = strategy.position_avg_price * (1 - v2takeprofit_input) group_line = "Line Settings" show_sl_tp = input.bool(title=' Show StopLoss - TakeProf Lines',inline = "1", defval=true, group =group_line) show_trend_line = input.bool(title=' Show Trend Line',inline = '3' ,defval=true, group =group_line) stoploss_colour = input.color(title='StopLoss Line Colour',inline = '2' ,defval=color.rgb(255, 255, 0), group =group_line) up_trend_line_colour = input.color(title='Up Trend line Colour',inline = '4' ,defval=color.rgb(0, 255, 0, 30), group =group_line) down_trend_line_colour = input.color(title='Down Trend line Colour',inline = '4' ,defval=color.rgb(255, 0, 0, 30), group =group_line) //plot(supertrend ,color = strategy.position_size > 0 and show_sl_tp ? color.rgb(255, 0, 0) :show_sl_tp ? color.rgb(0, 255, 0) : na , style = plot.style_steplinebr,linewidth = 2) // plot(supertrend ,color = show_sl_tp and v1 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2) // plot(v2stoploss_level_long ,color = strategy.position_size > 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2) // plot(v2stoploss_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2) // plot(v2takeprofit_level_long ,color = strategy.position_size > 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2) // plot(v2takeprofit_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2) TS2 = plot(Trail2, 'Ema Strategy', style=plot.style_line, color=show_trend_line and Trail1 < Trail2 ? down_trend_line_colour : show_trend_line ? up_trend_line_colour : na, linewidth=2) // bgcolor(buy_signal ? color.rgb(0, 230, 119, 80) : na) // bgcolor(sell_signal ? color.rgb(255, 82, 82, 80) : na) Time_interval = true buy_signal = Trail1 > Trail2 and direction < 0 and rsi_mom > mom_rsi_val and Time_interval sell_signal =Trail1 < Trail2 and direction > 0 and rsi_mom > mom_rsi_val and Time_interval // Strategy entries stop_long = (close < supertrend and v1) or (v2 and strategy.position_size > 0) stop_short = (close > supertrend and v1) or (v2 and strategy.position_size < 0) long_cond = ((close > ema150 ) and (ema50 > ema150) and (ema150 > ema200)) short_cond = ((close < ema150) and (ema50 < ema150) and (ema150 < ema200)) if (not stop_long) and (not short_cond) and long_cond and strategy.opentrades == 0 and (trade_direction == 'LONG' or trade_direction == 'BOTH') and buy_signal strategy.entry('Long_0', strategy.long, qty=dollar / close) if (not stop_short) and (not long_cond) and short_cond and strategy.opentrades == 0 and (trade_direction == 'SHORT' or trade_direction == 'BOTH') and sell_signal strategy.entry('Short_0', strategy.short, qty=dollar / close) if close < supertrend and v1 strategy.exit('Long_Close',from_entry = "Long_0", stop=supertrend, qty_percent=100) if v2 and strategy.position_size > 0 strategy.exit('Long_Close',from_entry = "Long_0", stop=v2stoploss_level_long,limit= v2takeprofit_level_long , qty_percent=100) if close > supertrend and v1 strategy.exit('Short_Close',from_entry = "Short_0", stop=supertrend, qty_percent=100) if v2 and strategy.position_size < 0 strategy.exit('Short_Close',from_entry = "Short_0", stop=v2stoploss_level_short,limit= v2takeprofit_level_short ,qty_percent=100)