O recurso está a ser carregado... Carregamento...

Reversão após a estratégia de consolidação

Autora:ChaoZhang, Data: 2023-11-03 17:26:53
Tags:

img

Resumo

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 consolidação, de modo a tomar posições longas ou curtas correspondentes.

Estratégia lógica

  1. A estratégia usa o indicador do oscilador estocástico para determinar se o preço das ações entrou em consolidação.

  2. Quando o oscilador estocástico oscila, as mudanças direcionais do candelabro são usadas para detectar pontos de reversão da tendência.

  3. 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.

  4. A estratégia suporta tanto a negociação de posição total como parcial.

  5. As horas de negociação também são configuradas na estratégia.

Análise das vantagens

  1. O oscilador estocástico identifica com precisão a consolidação de preços a curto prazo.

  2. A negociação em pontos de reversão após a consolidação melhora a precisão.

  3. As paradas de atraso bloqueiam os lucros à medida que o preço se move favoravelmente.

  4. Apoia a negociação total e parcial de posições com base na preferência de risco.

  5. Horários de negociação evitar trocas erradas durante períodos voláteis.

Análise de riscos

  1. Oscilador estocástico propenso a sinais falsos, entradas em falta ou entradas prematuras.

  2. As inversões de candelabro podem não ser precisas para detectar mudanças de tendência.

  3. Paradas de atraso sujeitas a ser atingidas por flutuações de preços.

  4. Risco mais elevado com negociação de posição parcial, perdas poderiam aumentar em reversões.

  5. Os parâmetros de stop loss e trailing stop precisam de ser ajustados para diferentes instrumentos.

  6. Eventos importantes podem afetar o desempenho da estratégia.

Oportunidades de melhoria

  1. Otimizar os parâmetros do oscilador estocástico para uma melhor detecção da consolidação.

  2. Adicionar filtros para confirmar os sinais do candelabro, melhorando a precisão.

  3. Melhorar os algoritmos de tracking stop para melhor rastreamento.

  4. Adicionar regras de dimensionamento das posições para limitar as perdas em unidades individuais.

  5. Evitar a volatilidade decorrente de eventos importantes através da incorporação de um calendário de eventos.

  6. Melhorar o modelo de posição parcial para melhor captar as tendências.

Conclusão

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 )





















Mais.