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

Choppiness estratégia de avanço da linha K.

Autora:ChaoZhang, Data: 2023-10-07 15:59:26
Tags:

Resumo

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.

Estratégia lógica

Os conceitos fundamentais da estratégia Choppiness K-line Breakthrough são:

  1. Usando o Índice do Canal de Commodities (CCI) para determinar se os preços estão em zonas de sobrecompra ou sobrevenda.

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

  3. Incorporar o volume de negociação para considerar apenas os sinais de compra e venda quando o volume está aumentando.

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

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

Análise das vantagens

A estratégia Choppiness K-line Breakthrough tem as seguintes vantagens:

  1. A combinação de múltiplos indicadores melhora a confiabilidade dos sinais de negociação.

  2. A utilização de padrões de linha K ajuda a identificar com precisão as inversões de tendência.

  3. Stop loss and take profit controla de forma eficaz os riscos e bloqueia os lucros.

  4. Considerando apenas os sinais de aumento de volume evita-se sinais falsos.

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

  6. A estratégia pode ser melhorada através de mais fatores, aprendizagem de máquina, etc., aumentando a estabilidade e a rentabilidade.

Análise de riscos

Os riscos potenciais da estratégia incluem:

  1. Os parâmetros CCI podem ser ajustados para uma maior sensibilidade.

  2. Os falsos breakouts nos padrões da linha K podem causar perdas desnecessárias.

  3. Os aumentos de volume também podem ser manipulados, pelo que é importante vigiar as divergências volume-preço.

  4. O stop loss/take profit estático pode sair mais cedo ou perder tendências adicionais.

  5. Os parâmetros aplicados a um material podem não ser adequados a outros, sendo necessária uma regulação específica.

  6. Os resultados dos testes podem não representar o desempenho ao vivo.

Orientações de otimização

A estratégia pode ser reforçada através de:

  1. Otimizar os parâmetros CCI para uma geração de sinal mais rápida.

  2. Adicionando mais indicadores como MACD, Bandas de Bollinger para melhorar a precisão do sinal.

  3. Usando modelos de aprendizagem de máquina treinados em dados históricos para prever pontos de entrada/saída.

  4. Empregar stop loss dinâmicos e tirar lucro com base na volatilidade do mercado.

  5. Melhorar a lógica de aumento de volume para detectar a divergência de volume-preço.

  6. Ajuste de parâmetros para diferentes unidades populacionais e regimes de mercado para melhorar a estabilidade.

  7. Incorporar mecanismos de acompanhamento da tendência para um melhor desempenho em todas as fases do mercado.

  8. Modularizar a estratégia para uma maior flexibilidade e extensibilidade.

Conclusão

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 **********

Mais.