
A estratégia de negociação de dinâmica CCI auto-adaptável é um sistema de negociação quantitativa baseado em indicadores técnicos, cujo núcleo se baseia no indicador IFTCCI, desenvolvido por Kıvanc Özbilgiç. A estratégia gera sinais de compra e venda quando o indicador oscila entre -1 e +1 através da definição de níveis precisos de depressão. A estratégia gera um sinal de compra quando o indicador atravessa uma determinada barreira de baixa (<-0,95) para cima; e um sinal de venda quando o indicador atravessa uma determinada barreira de alta (<-0,95) para baixo.
O núcleo da estratégia é o indicador IFTCCI, que é calculado através dos seguintes passos:
A fórmula de cálculo é:
v1 = 0.1 * (CCI(close, period) / 4)
v2 = WMA(v1, wma_period)
IFTCCI = (e^(2*v2) - 1) / (e^(2*v2) + 1)
A lógica de execução da estratégia é dividida nas seguintes partes-chave:
Condições de compra:
Condições de venda:
Acompanhamento de status:
Toda a estratégia usa o gerenciamento de fundos em porcentagem, com 100% de fundos disponíveis em cada transação e proíbe a adição de posições. A estratégia calcula os sinais em tempo real quando cada linha K se forma, garantindo a captura oportuna da dinâmica do mercado.
Regras claras de entrada e saídaA estratégia baseia-se em valores precisos para fornecer sinais claros de negociação, evitando julgamentos subjetivos e tornando as decisões de negociação mais objetivas e disciplinadas.
Mecanismo de gestão de risco dinâmicoO mecanismo de parada de prejuízos incorporado pode limitar efetivamente os prejuízos de uma única transação, e pode ser automaticamente retirado quando a inversão do mercado excede a amplitude predefinida, protegendo a segurança dos fundos.
A capacidade de adaptação do mercadoO indicador IFTCCI oscila entre -1 e +1 por meio de uma transformação de corte reversível de curva dupla, com características de unificação natural e adaptadas a diferentes ambientes de mercado de volatilidade.
Simulação de sinais, redução de falhasA utilização de médias móveis ponderadas para o processamento suave do CCI original, reduz efetivamente o ruído e os falsos sinais, aumentando a confiabilidade dos sinais de negociação.
Mecanismo de reentrada inteligenteQuando o mercado retoma a tendência original após a saída, o mecanismo de reentrada permite que o sistema recupere a oportunidade e melhore a lucratividade da estratégia.
Boa visualização.A estratégia é mostrar uma mudança clara de cor de fundo no gráfico, ajudando os traders a entender intuitivamente o estado do mercado e os sinais de negociação.
Ajustabilidade dos parâmetrosTodos os parâmetros-chave podem ser ajustados através da interface de entrada, permitindo que a estratégia se adapte a diferentes condições de mercado e preferências de risco pessoais.
Transações frequentes em mercados turbulentosEm mercados de volatilidade intermitente, os indicadores podem flutuar frequentemente perto da baixa, gerando múltiplos sinais de compra e venda, resultando em excesso de negociação e erosão de comissões. *O que fazer?*O filtro de tempo ou o filtro de tendência podem ser adicionados para reduzir a frequência de negociação em mercados de baixa volatilidade.
A questão do stop loss fixoA estratégia atual usa um valor fixo (de 0,1 unidades) como um limite de perda, que pode ser muito grande ou muito pequeno em diferentes ambientes de mercado de volatilidade. O que fazer?: pode ser projetado a amplitude de parada de perda adaptável, de acordo com a dinâmica recente de volatilidade do mercado ajustar a distância de parada de perda.
Falta de confirmação de tendências de longo prazoA estratégia baseia-se principalmente na dinâmica de curto prazo e não combina com a análise de tendências de longo prazo, podendo gerar transações desnecessárias quando a tendência principal se inverte. *O que fazer?*Introdução de indicadores de tendência de longo prazo como filtros, para negociar apenas na direção da tendência.
Risco de reinserção temporáriaO mecanismo de reentrada atual baseia-se em uma amplitude de rebote fixa, que pode ser reinstalada prematuramente em caso de uma falsa ruptura no mercado. O que fazer?: Adicionar condições de confirmação adicionais, como confirmação de volume ou sinais de combinação de outros indicadores técnicos.
Dependência de um único indicadorA estratégia baseia-se apenas em um indicador do IFTCCI para tomar decisões e não tem uma análise de mercado multidimensional. *O que fazer?*Introdução de pacotes de indicadores complementares, como RSI, MACD ou indicadores de volatilidade, para fornecer uma confirmação de mercado de vários ângulos.
Integração de análise de multi-quadros temporais: A estratégia atual funciona apenas em um único período de tempo e pode integrar a análise de vários períodos de tempo, por exemplo, usando o indicador IFTCCI de períodos de tempo mais elevados como um filtro de direção de negociação e negociando apenas na direção da maior tendência. Isso reduz a negociação de contra-ação e aumenta a taxa de ganho.
Ajuste de limiar dinâmico: Alterar o limiar fixo (-0.95⁄0.95) para um limiar ajustado com base na dinâmica de volatilidade do mercado. Usar um limiar mais estreito em ambientes de baixa volatilidade e um limiar mais amplo em ambientes de alta volatilidade, para se adaptar às necessidades de geração de sinais em diferentes condições de mercado.
Mecanismo de confirmação de entrega: A adição de um componente de análise de volume de transação, que exige que o sinal seja gerado com um suporte significativo de volume de transação, pode filtrar os sinais de ruptura de baixa qualidade e reduzir os prejuízos causados por falsas rupturas.
Otimização da gestão de fundos: A estratégia atual usa uma porcentagem fixa para gerenciar as posições, podendo ser melhorada para um sistema de gerenciamento de fundos adaptável baseado na volatilidade do mercado e na probabilidade de vitórias, aumentando as posições em sinais de alta confiança e reduzindo as posições em sinais de baixa confiança.
Aprendizagem de máquina: Otimização de auto-adaptação dos parâmetros do indicador IFTCCI (ciclo CCI e ciclo WMA) usando algoritmos de aprendizado de máquina, ajustando automaticamente o melhor conjunto de parâmetros de acordo com diferentes condições de mercado, aumentando a adaptabilidade da estratégia.
Filtro de tempo de transação: Adicione filtros de tempo de negociação para evitar os períodos de alta volatilidade antes do início e fim do mercado, ou para evitar o lançamento de dados econômicos importantes, reduzindo a volatilidade imprevisível causada por eventos inesperados.
Análise de correlação: A introdução de análises de correlação com outros mercados ou ativos aumenta a credibilidade dos sinais de negociação e aumenta a estabilidade da estratégia quando vários mercados relacionados apresentam sinais semelhantes ao mesmo tempo.
A estratégia de negociação de impulso CCI auto-adaptável é um sistema de negociação quantitativa, bem estruturado e com lógica clara, que gera sinais de negociação através da ruptura do limiar do indicador IFTCCI e é equipado com mecanismos de parada e reentrada para gerenciar riscos e aproveitar oportunidades. As principais vantagens da estratégia são a clareza do sinal, a dinâmica do controle de risco e a ajustabilidade dos parâmetros.
No entanto, a estratégia também enfrenta riscos como a frequência de negociação em mercados turbulentos, a falta de flexibilidade de stop loss fixos e a falta de confirmação de tendências de longo prazo. A robustez e a lucratividade da estratégia podem ser significativamente aumentadas pela integração de análise de múltiplos períodos de tempo, ajuste dinâmico de queda, adição de confirmação de volume de transação, otimização de gerenciamento de fundos, introdução de aprimoramentos de aprendizagem de máquina e adição de filtragem de tempo de negociação.
Para os traders que desejam aplicar esta estratégia, é recomendável testar primeiro diferentes combinações de parâmetros em ambientes simulados, para encontrar as melhores configurações adequadas à sua variedade de negociação e preferências de risco, e gradualmente integrar as orientações de otimização propostas neste artigo, para construir um sistema de negociação mais abrangente e robusto.
/*backtest
start: 2024-05-27 00:00:00
end: 2025-01-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © erkankuskonmaz
//@version=5
strategy("IFTCCI Buy Sell Signal Strategy",
overlay=false,
pyramiding=0,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
calc_on_every_tick=true) // NEW LINE: Enables real-time signal generation.
// --- Indicator Settings and Calculations (IFTCCIv2) ---
group_indicator_params = "Indicator Parameters (IFTCCIv2)"
ccilength_param = input.int(5, "CCI Period", group=group_indicator_params)
wmalength_param = input.int(9, title="Smoothing Period (WMA)", group=group_indicator_params)
// IFTCCIv2 Calculation
v1_calc = 0.1 * (ta.cci(close, ccilength_param) / 4)
v2_calc = ta.wma(v1_calc, wmalength_param)
indicator_value_ift = (math.exp(2 * v2_calc) - 1) / (math.exp(2 * v2_calc) + 1)
// --- Strategy Rule Inputs ---
group_entry_rules = "Buy Signal Conditions"
entry_low_prev_max = input.float(-0.95, title="Primary Buy: Previous Bar Max Value", group=group_entry_rules)
entry_low_curr_min = input.float(-0.94, title="Primary Buy: Current Bar Min Value", group=group_entry_rules)
reentry_trigger_units = input.float(0.10, title="Re-entry: Rise from Lowest Value", group=group_entry_rules)
group_exit_rules = "Sell Signal Conditions (Exit Position)"
exit_high_prev_min = input.float(0.95, title="Target Sell: Previous Bar Min Value", group=group_exit_rules)
exit_high_curr_max = input.float(0.94, title="Target Sell: Current Bar Max Value", group=group_exit_rules)
stop_loss_units = input.float(0.10, title="Stop Loss: Drop from Peak Value", group=group_exit_rules)
// --- Indicator Values for Strategy ---
float ind_val = indicator_value_ift
float ind_val_prev = indicator_value_ift[1]
// --- State Tracking Variables ---
var float highest_indicator_since_long_entry = na
var bool track_for_reentry_after_close = false
var float lowest_indicator_since_reentry_tracking_started = na
// --- Update State Logic ---
// 1. Update the highest indicator value since entering long position
if strategy.position_size > 0
if strategy.position_size[1] <= 0
highest_indicator_since_long_entry := ind_val
else
highest_indicator_since_long_entry := math.max(highest_indicator_since_long_entry, ind_val)
else
if strategy.position_size[1] > 0
highest_indicator_since_long_entry := na
// 2. Update re-entry tracking mechanism
if strategy.position_size[1] > 0 and strategy.position_size == 0
track_for_reentry_after_close := true
lowest_indicator_since_reentry_tracking_started := ind_val
else if strategy.position_size > 0
track_for_reentry_after_close := false
lowest_indicator_since_reentry_tracking_started := na
else if track_for_reentry_after_close and strategy.position_size == 0
if not na(lowest_indicator_since_reentry_tracking_started)
lowest_indicator_since_reentry_tracking_started := math.min(lowest_indicator_since_reentry_tracking_started, ind_val)
else
lowest_indicator_since_reentry_tracking_started := ind_val
// --- Buy Conditions (Long Entry) ---
bool can_enter_new_position = strategy.opentrades == 0
// Condition 1: Main Buy Condition
bool condition_main_buy_cross = ind_val_prev <= entry_low_prev_max and ind_val >= entry_low_curr_min
bool main_long_entry_trigger = condition_main_buy_cross and can_enter_new_position
// Condition 2: Re-entry Buy Condition
bool condition_re_entry_trigger = false
if track_for_reentry_after_close and not na(lowest_indicator_since_reentry_tracking_started) and can_enter_new_position
if ind_val >= lowest_indicator_since_reentry_tracking_started + reentry_trigger_units
condition_re_entry_trigger := true
// Combined Buy Condition
bool final_long_entry_condition = main_long_entry_trigger or condition_re_entry_trigger
// --- Sell Conditions (Long Exit) ---
bool currently_in_long_position = strategy.position_size > 0
// Sell Condition 1: Target Sell
bool condition_sell_target = ind_val_prev >= exit_high_prev_min and ind_val <= exit_high_curr_max
// Sell Condition 2: Stop Loss
bool condition_sell_stop_loss = false
if currently_in_long_position and not na(highest_indicator_since_long_entry)
if ind_val <= highest_indicator_since_long_entry - stop_loss_units
condition_sell_stop_loss := true
// Combined Sell Condition
bool final_long_exit_condition = currently_in_long_position and (condition_sell_target or condition_sell_stop_loss)
// --- Strategy Orders ---
if (final_long_entry_condition)
entry_comment = main_long_entry_trigger ? "Buy (Primary)" : "Buy (Re-entry)"
strategy.entry("Buy ID", strategy.long, comment=entry_comment)
if (final_long_exit_condition)
exit_comment = condition_sell_target ? "Sell (Target)" : "Sell (Stop)"
strategy.close("Buy ID", comment=exit_comment)
// --- Plot Indicator and Strategy Markers ---
plot(indicator_value_ift, title="IFTCCI Value", color=color.rgb(0, 0, 0), linewidth=2)
hline(0, "Mid Level", color=color.new(#787b86, 50), linestyle=hline.style_dotted)
hline(0.95, "Upper Reference (+0.95)", color=color.new(#002fff, 10), linestyle=hline.style_dashed)
hline(-0.95, "Lower Reference (-0.95)", color=color.new(#002fff, 10), linestyle=hline.style_dashed)
// Background Coloring on Entry and Exit Signals
color background_color = final_long_entry_condition ? color.new(color.green, 81) : final_long_exit_condition ? color.new(color.red, 81) : na
bgcolor(background_color, title="Signal Background")