[TOC]

Como o nome sugere, a média móvel adaptativa (KAMA) pertence à categoria de média móvel, mas, diferentemente da média móvel tradicional, ela é muito “inteligente”. Sabemos que as médias móveis comuns têm muitas deficiências. Por exemplo, a média móvel de curto prazo está próxima da tendência de preço e é muito sensível, mas é fácil gerar sinais falsos; a média móvel de longo prazo é muito precisa em julgar tendências, mas muitas vezes demora um pouco para o mercado reagir.
A “inteligência” do KAMA reside na sua capacidade de ajustar autonomamente a sua sensibilidade com base nas condições atuais do mercado, ou seja, a volatilidade. Sua manifestação é: em um mercado volátil, as mudanças no KAMA desaceleram significativamente; quando surge uma tendência, ele reage rapidamente. Na negociação real, sua vantagem é que pode reduzir os custos de transação causados pela “desordem diária” e permitir que você embarque a tempo quando o mercado decolar.

Entre eles, n, n1 e n2 são todos parâmetros de período. Por padrão, n é 10 períodos, n1 é 2 períodos de curto prazo e n2 é 30 períodos de longo prazo. Este também é um conjunto de parâmetros reconhecidos por Perry Kaufman, o autor de KAMA. n é usado para direção e eficiência de cálculo de volatilidade. n1 e n2 são os períodos da média móvel rápida e da média móvel lenta. Em teoria, quanto maior o parâmetro n1, mais suave será o KAMA.
O método de cálculo do KAMA é: primeiro calcular a direção (DIR) e a volatilidade (VIR) e, em seguida, calcular a eficiência com base na razão das duas. Eficiência (ER) é uma medida do grau de mudança de preço e é calculada simplesmente: Direção / Volatilidade. O resultado do cálculo está entre 0 e 1. Quando o valor ER está mais próximo de 0, indica que o mercado está em um estado volátil. Quando o valor ER está mais próximo de 1, indica que o mercado está em um estado de tendência.
Uma vez calculada a eficiência (ER), a constante de suavização (CS) pode ser derivada combinando a média móvel rápida e a média móvel lenta: eficiência * (rápido - lento) + lento. CS representa a velocidade do movimento da tendência. De acordo com a fórmula de cálculo de CS, podemos descobrir que a mudança de CS é sempre proporcional à mudança de ER.
O coeficiente (CQ) é então calculado com base no poder de suavização, com o objetivo de fazer com que os parâmetros de ciclo lento desempenhem um papel mais importante no cálculo, o que também é uma abordagem mais conservadora. A suavização final do KAMA é determinada pelo coeficiente (CQ). No cálculo do KAMA, o coeficiente (CQ) determina os parâmetros do período das duas últimas suavizações de média móvel, a saber: média ponderada exponencial (média móvel dinâmica (preço de fechamento, coeficiente), 2).
Embora o método de cálculo do KAMA seja muito complicado, seu uso é semelhante ao das médias móveis comuns. Em aplicações práticas, ele pode não apenas determinar tendências de mercado, mas também ser usado para pontos de compra e venda precisos. Por ser muito “inteligente”, ele pode ser usado em muitas estratégias de negociação e vale até a pena tentar em moedas digitais.
Etapa 1: Calcular KAMA
Perceber! No canto superior esquerdo, selecione a linguagem de programação:My语言. Já existe um KAMA pronto na biblioteca talib, mas ele tem apenas um parâmetro externo (n) período, e n1 e n2 têm como padrão 2 e 30. As estratégias neste artigo são apenas para referência. Amigos com boas habilidades práticas também podem escrever as suas próprias. Então a linguagem My também pode ser misturada diretamente com a linguagem JavaScript. Preste atenção ao código a seguir:
%% // My语言内JavaScript的标准格式
scope.KAMA = function() {
var r = _C(exchange.GetRecords); // 获取K线数组
if (r.length > 140) { // 过滤K线长度
var kama = talib.KAMA(r, 140); // 调用talib库计算KAMA
return kama[kama.length - 2]; // 返回KAMA的具体数值
}
return;
}
%% // My语言内JavaScript的标准格式
Etapa 2: Calcule as condições de negociação e faça uma ordem
%%
scope.KAMA = function() {
var r = _C(exchange.GetRecords);
if (r.length > 140) {
var kama = talib.KAMA(r, 140);
return kama[kama.length - 2];
}
return;
}
%%
K^^KAMA; // 把KAMA打印到图表上
A:CLOSE; // 把收盘价打印到图表上
K > REF(K, 1) && CLOSE > K,BK; // 开多
K < REF(K, 1) && CLOSE < K,SK; // 开空
K < REF(K, 1) || CLOSE < K,SP; // 平多
K > REF(K, 1) || CLOSE > K,BP; // 平空
Etapa 3: Defina o método de filtragem do sinal de estratégia
%%
scope.KAMA = function() {
var r = _C(exchange.GetRecords);
if (r.length > 140) {
var kama = talib.KAMA(r, 140);
return kama[kama.length - 2];
}
return;
}
%%
K^^KAMA;
A:CLOSE;
K > REF(K, 1) && CLOSE > K,BK;
K < REF(K, 1) && CLOSE < K,SK;
K < REF(K, 1) || CLOSE < K,SP;
K > REF(K, 1) || CLOSE > K,BP;
AUTOFILTER; // 启用一开一平信号过滤机制
Para ficar mais próximo do ambiente de negociação real, usamos um slippage de 2 saltos para abertura e fechamento de posições para executar testes de estresse durante o backtesting. O ambiente de teste é o seguinte:
Ambiente de teste
Detalhes da receita
Curva de financiamento

A julgar pelos resultados do backtest acima, essa estratégia simples de KAMA realmente correspondeu às expectativas. Mesmo no super bear market da moeda digital em 2018, a curva de capital não mostrou um grande retrocesso, e o mercado estava em um período volátil de longo prazo . Abrir e fechar posições para frente e para trás causará perdas desnecessárias. Ao mesmo tempo, também teve um bom desempenho no mercado de alta em 2019.
Uma estratégia excelente que pode ser colocada em prática deve ter sido refinada e aprimorada repetidamente. As estratégias neste artigo ainda têm muito espaço para otimização e atualização, como adicionar certas condições de filtragem, realização de lucro ativa e stop- condições de perda, etc. Como um tipo de média móvel, o KAMA herda as vantagens e desvantagens das médias móveis comuns e as melhora ao mesmo tempo. Em um mercado imprevisível, mesmo que um “melhor parâmetro” seja fixo, é difícil se adaptar às condições futuras do mercado. Portanto, esse método de seguir a tendência e mudar com as condições do mercado pode ser uma escolha melhor.