A ideia principal desta estratégia consiste em detectar uma consolidação óbvia a curto prazo nos movimentos dos preços das acções e, em seguida, julgar a próxima direcção provável com base no padrão de consolidação formado durante a fase de
A estratégia usa o indicador do oscilador estocástico para determinar se o preço das ações entrou em consolidação.
Quando o oscilador estocástico oscila, as mudanças direcionais do candelabro são usadas para detectar pontos de reversão da tendência.
Os objetivos de lucro e o stop loss após a entrada são definidos dinamicamente com base no preço de entrada usando trailing stops.
A estratégia suporta tanto a negociação de posição total como parcial.
As horas de negociação também são configuradas na estratégia.
O oscilador estocástico identifica com precisão a consolidação de preços a curto prazo.
A negociação em pontos de reversão após a consolidação melhora a precisão.
As paradas de atraso bloqueiam os lucros à medida que o preço se move favoravelmente.
Apoia a negociação total e parcial de posições com base na preferência de risco.
Horários de negociação evitar trocas erradas durante períodos voláteis.
Oscilador estocástico propenso a sinais falsos, entradas em falta ou entradas prematuras.
As inversões de candelabro podem não ser precisas para detectar mudanças de tendência.
Paradas de atraso sujeitas a ser atingidas por flutuações de preços.
Risco mais elevado com negociação de posição parcial, perdas poderiam aumentar em reversões.
Os parâmetros de stop loss e trailing stop precisam de ser ajustados para diferentes instrumentos.
Eventos importantes podem afetar o desempenho da estratégia.
Otimizar os parâmetros do oscilador estocástico para uma melhor detecção da consolidação.
Adicionar filtros para confirmar os sinais do candelabro, melhorando a precisão.
Melhorar os algoritmos de tracking stop para melhor rastreamento.
Adicionar regras de dimensionamento das posições para limitar as perdas em unidades individuais.
Evitar a volatilidade decorrente de eventos importantes através da incorporação de um calendário de eventos.
Melhorar o modelo de posição parcial para melhor captar as tendências.
A estratégia de reversão após a consolidação identifica a consolidação de curto prazo usando o oscilador estocástico e negocia em pontos de reversão da tendência após a fase de consolidação. Tem uma taxa de ganho decente e permite bloquear os lucros do segmento nas tendências. No entanto, o estocástico é propenso a sinais falsos. A precisão pode ser melhorada por otimização de parâmetros, adição de filtros etc. Além disso, a otimização dos trailing stops, o controle do tamanho da posição e a evitação de riscos de evento são áreas que exigem foco.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Cross', overlay=true, initial_capital=1000 ) // Creditos : Cleber.martinelli //////////////////////////////////////////////////////// // // // // // CALENDARIO // // // // // //////////////////////////////////////////////////////// //052) // trading view solicita que se ja informado data para gerar backtest a partir de tal data //começa backtest do trading sistem em qual data ? ano = input.int(2022, minval=1, title="Ano") mes = input.int(1, minval=1, maxval=12, title="Mes") dia = input.int(1, minval=1, maxval=31, title="Dia") hora = input.int(1, minval=1, maxval=23, title="hora") minuto = input.int(0, minval=0, maxval=59, title="minuto") horaabertura = input.int(10, minval=1, maxval=23, title="hora Inicio Operacao Robo") minutoabertura = input.int(40, minval=1, maxval=59, title="Minuto Encerra Tudo") horaencerra = input.int(17, minval=1, maxval=23, title="hora Fechamento") minutoencerra = input.int(50, minval=1, maxval=59, title="Minuto Encerra Novas Operacoes") minutofinaliza = input.int(50, minval=1, maxval=59, title="Minuto Encerra Tudo") //valida se o dia de hoje é posterior ao dia informado acima Validadia = year >= ano and month >= mes and dayofmonth >= dia //cria horario de abertura de negociaçao, considerar default 10 hs, pois os indicadores ja estarão corrigidos abreloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaabertura //and minute >= minutoabertura) //cria horario de fechamento de todas as negociaçoes, considerar default 17:00 hs //nenhuma ordem pode ser aberta depois dessa data e as abertas devem ser fechadas fechaloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra //and minute >= minutoencerra) fechaloja2 = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra //and minute >= minutofinaliza) //valida horario de negociação, pra liberar as operacoes. lojaaberta = abreloja == true and fechaloja == false and fechaloja2 == false //////////////////////////////////////////////////////// // // // // // Codigo Operacional // // // // // //////////////////////////////////////////////////////// // Inputs da Estratégia pmax = input.int(90, minval=0, maxval=100, title="Estocastico Alvo - Para Short") pmin = input.int(10, minval=0, maxval=100, title="Estocastico Alvo - Para Buy ") parcial = input(title="Parcial ? ", defval=true) p_gain = input.int(150, minval=0, maxval=1000, title="Pontos para Gain ") p_loss = input.int(150, minval=0, maxval=1000, title="Pontos para Loss") p_parcial = input.int(50, minval=0, maxval=100, title="Pontos para Parcial ") // puxando os indicadores que usaremos estoc = ta.stoch(close,high,low,5) if (estoc >=pmax and close < open) strategy.entry("Vende", strategy.short ,qty = 2) if (estoc <=pmax and close > open) strategy.entry("Compra", strategy.long ,qty = 2 ) pm_ativo = strategy.opentrades.entry_price(0) if strategy.position_size > 0 and parcial// Posicionado na compra if strategy.position_size == 2 // Mão cheia if close < pm_ativo - 100 strategy.exit("Fecha Compra", "Compra", loss=p_loss , qty = 2 ) if close > pm_ativo + 50 strategy.exit("Fecha Compra", "Compra", profit=p_gain , qty = 1 ) if strategy.position_size == 1// Mão cheia if close < pm_ativo strategy.exit("Fecha Compra", "Compra", loss=0 , qty = 1 ) if close > pm_ativo + 100 strategy.exit("Fecha Compra", "Compra", profit= p_gain * 1.5 , qty = 1 ) if strategy.position_size < 0 and parcial // Posicionado na Venda if strategy.position_size == -2 // Mão cheia if close > pm_ativo - 100 strategy.exit("Fecha Venda", "Vende", loss=p_loss , qty = 2 ) if close < pm_ativo + 50 strategy.exit("Fecha Venda", "Vende", profit=p_gain , qty = 1 ) if strategy.position_size == -1// Mão cheia if close > pm_ativo strategy.exit("Fecha Venda", "Vende", loss=0 , qty = 1 ) if close < pm_ativo + 100 strategy.exit("Fecha Venda", "Vende", profit=p_gain*1.5 , qty = 1 ) if strategy.position_size > 0 and parcial == false // Sem Parcial strategy.exit("Fecha Compra", "Compra", loss=p_loss , profit = p_gain , qty = 2 ) if strategy.position_size < 0 and parcial == false // Sem Parcial strategy.exit("Fecha Venda", "Vende", loss=p_loss , profit = p_gain , qty = 2 )