A estratégia Choppiness K-line Breakthrough é uma estratégia quantitativa de negociação que utiliza padrões de K-line e indicadores de momento para determinar entradas e saídas para negociação de ações.
Os conceitos fundamentais da estratégia Choppiness K-line Breakthrough são:
Usando o Índice do Canal de Commodities (CCI) para determinar se os preços estão em zonas de sobrecompra ou sobrevenda.
Identificação de padrões de linha K para detectar sinais de ruptura. Uma linha K vermelha com um fechamento superior ao aberto indica uma tendência de alta, enquanto uma linha K verde fechando abaixo do aberto mostra uma tendência de queda.
Incorporar o volume de negociação para considerar apenas os sinais de compra e venda quando o volume está aumentando.
Tomar posições longas quando se identifica uma tendência ascendente e o CCI mostra uma sobrevenda. Tomar posições curtas quando se identifica uma tendência descendente e o CCI mostra uma sobrecompra.
Configurar pontos de stop loss e take profit para controlar riscos e bloquear lucros.
Especificamente, a estratégia usa o CCI para análise de sobrecompra / sobrevenda, padrões de linha K para direção da tendência e volume para impulso.
A estratégia Choppiness K-line Breakthrough tem as seguintes vantagens:
A combinação de múltiplos indicadores melhora a confiabilidade dos sinais de negociação.
A utilização de padrões de linha K ajuda a identificar com precisão as inversões de tendência.
Stop loss and take profit controla de forma eficaz os riscos e bloqueia os lucros.
Considerando apenas os sinais de aumento de volume evita-se sinais falsos.
A lógica da estratégia é clara e os parâmetros são flexíveis para otimização entre ações e ambientes de mercado.
A estratégia pode ser melhorada através de mais fatores, aprendizagem de máquina, etc., aumentando a estabilidade e a rentabilidade.
Os riscos potenciais da estratégia incluem:
Os parâmetros CCI podem ser ajustados para uma maior sensibilidade.
Os falsos breakouts nos padrões da linha K podem causar perdas desnecessárias.
Os aumentos de volume também podem ser manipulados, pelo que é importante vigiar as divergências volume-preço.
O stop loss/take profit estático pode sair mais cedo ou perder tendências adicionais.
Os parâmetros aplicados a um material podem não ser adequados a outros, sendo necessária uma regulação específica.
Os resultados dos testes podem não representar o desempenho ao vivo.
A estratégia pode ser reforçada através de:
Otimizar os parâmetros CCI para uma geração de sinal mais rápida.
Adicionando mais indicadores como MACD, Bandas de Bollinger para melhorar a precisão do sinal.
Usando modelos de aprendizagem de máquina treinados em dados históricos para prever pontos de entrada/saída.
Empregar stop loss dinâmicos e tirar lucro com base na volatilidade do mercado.
Melhorar a lógica de aumento de volume para detectar a divergência de volume-preço.
Ajuste de parâmetros para diferentes unidades populacionais e regimes de mercado para melhorar a estabilidade.
Incorporar mecanismos de acompanhamento da tendência para um melhor desempenho em todas as fases do mercado.
Modularizar a estratégia para uma maior flexibilidade e extensibilidade.
A estratégia de avanço da linha K de Choppiness é uma estratégia de negociação de curto prazo relativamente direta. Combina indicadores técnicos comuns para uma lógica clara e controle de risco por meio de stop loss e take profit. A estratégia pode ser otimizada de forma flexível com base nas necessidades para capturar reversões de curto prazo e tendências de médio prazo.
/*backtest start: 2023-09-06 00:00:00 end: 2023-10-06 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © vikris //@version=4 strategy("[VJ]War Machine PAT Intra", overlay=true, calc_on_every_tick = false) // ********** Strategy inputs - Start ********** // Used for intraday handling // Session value should be from market start to the time you want to square-off // your intraday strategy // Important: The end time should be at least 2 minutes before the intraday // square-off time set by your broker var i_marketSession = input(title="Market session", type=input.session, defval="0915-1455", confirm=true) // Make inputs that set the take profit % (optional) longProfitPerc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 shortProfitPerc = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 // Set stop loss level with input options (optional) longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 trendFactor = input(title="Trend Factor(Lower means trending)", type=input.integer, minval=1, step=1, defval=50) oversold = input(title="Oversold", type=input.integer, minval=1, step=1, defval=25) overbought = input(title="Overbought", type=input.integer, minval=1, step=1, defval=75) // ********** Strategy inputs - End ********** // ********** Supporting functions - Start ********** // A function to check whether the bar or period is in intraday session barInSession(sess) => time(timeframe.period, sess) != 0 // Figure out take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // Determine stop loss price longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) // ********** Supporting functions - End ********** // ********** Strategy - Start ********** // See if intraday session is active bool intradaySession = barInSession(i_marketSession) // Trade only if intraday session is active //=================Strategy logic goes in here=========================== //Vol Confirmation vol = volume > volume[1] //Engulfing candle confirm bullishEC = close > open[1] and close[1] < open[1] bearishEC = close < open[1] and close[1] > open[1] //Candles colors greenCandle = (close > open) redCandle = (close < open) length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000) src = hlc3 upper = sum(volume * (change(src) <= 0 ? 0 : src), length) lower = sum(volume * (change(src) >= 0 ? 0 : src), length) _rsi(upper, lower) => 100.0 - (100.0 / (1.0 + upper / lower)) mf = _rsi(upper, lower) ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length) //tradeSignal = ((rsiOS or rsiOS[1]) and bullishEC) or ((rsiOB or rsiOB[1]) and bearishEC) //Final Long/Short Condition longCondition = redCandle and mf < oversold and ci <trendFactor and vol shortCondition = greenCandle and mf >overbought and ci <trendFactor and vol //Long Strategy - buy condition and exits with Take profit and SL if (longCondition and intradaySession) stop_level = longStopPrice profit_level = longExitPrice strategy.entry("My Long Entry Id", strategy.long) strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level) //Short Strategy - sell condition and exits with Take profit and SL if (shortCondition and intradaySession) stop_level = shortStopPrice profit_level = shortExitPrice strategy.entry("My Short Entry Id", strategy.short) strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level) // Square-off position (when session is over and position is open) squareOff = (not intradaySession) and (strategy.position_size != 0) strategy.close_all(when = squareOff, comment = "Square-off") // ********** Strategy - End **********