Esta estratégia usa a média móvel adaptativa de Kaufman (KAMA) para determinar a direção da tendência para capturar tendências de médio a longo prazo.
O indicador central desta estratégia é a média móvel adaptativa de Kaufman (KAMA). A KAMA ajusta dinamicamente seu fator de ponderação com base na magnitude da volatilidade do mercado, melhorando assim a sensibilidade da curva. Especificamente, quando a volatilidade do mercado aumenta, a curva KAMA se torna mais suave; quando a volatilidade do mercado diminui, a curva KAMA se torna mais sensível. Isso filtra algum ruído enquanto ainda captura novas inversões de tendência em tempo hábil.
A estratégia primeiro calcula o valor da KAMA. Em seguida, determina o estado longo/curto da linha KAMA: um sinal de compra é gerado quando o preço de fechamento cruza acima da linha KAMA e um sinal de venda é gerado quando o preço de fechamento cruza abaixo da linha KAMA. As posições são abertas com base nesses sinais de negociação.
A maior vantagem desta estratégia é o uso do indicador KAMA para determinação de tendências. O próprio indicador KAMA tem uma capacidade de rastreamento de tendências muito forte. Pode ajustar dinamicamente os parâmetros para se adaptar às condições do mercado, produzindo assim sinais de negociação mais confiáveis em comparação com médias móveis simples e médias móveis exponenciais.
Além disso, a estratégia utiliza apenas o estado longo/curto da KAMA para determinar a direção da tendência. Não existem filtros adicionais, o que simplifica a lógica da estratégia e reduz o número de parâmetros, reduzindo o risco de sobreajuste e melhorando a estabilidade e a adaptabilidade entre os mercados.
O principal risco desta estratégia é que o KAMA é um indicador atrasado, de modo que a tendência do mercado pode já ter se invertido no momento em que os sinais de negociação são gerados, levando a riscos de stop loss.
Para mitigar os riscos, podem ser combinados outros indicadores para confirmar os sinais de negociação, tais como indicadores de volatilidade, indicadores de volume, etc. Os parâmetros também podem ser ajustados para tornar a curva KAMA mais suave.
Ainda há muito espaço para otimizar esta estratégia, principalmente nos seguintes aspectos:
Combinar outros indicadores de filtragem de sinais, tais como MACD, osciladores, etc., para melhorar a qualidade do sinal.
Adicione estratégias de stop loss como movimentação de stop loss ou paradas baseadas na curva de ações para controlar a perda de uma única negociação.
Otimizar os parâmetros para tornar o KAMA mais eficaz na detecção de tendências.
Adicionar análise de vários prazos para determinar a direção da tendência principal usando prazos mais longos.
Usar métodos de aprendizagem de máquina para otimizar automaticamente parâmetros para adaptação entre instrumentos.
A lógica geral desta estratégia é clara, usando o indicador KAMA para determinar a direção da tendência. Ele tem vantagens como forte capacidade de rastreamento de tendência, lógica simples e menos parâmetros. Mas também tem o risco de ficar atrasado na identificação de inversões de tendência. A estratégia pode ser melhorada de muitas maneiras para torná-la mais eficaz e adaptável.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's KAMA Strategy", shorttitle="KAMA str", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") length = input(3, minval = 1) fast = input(2, minval = 1) slow = input(30, minval = 1) src = input(title = "Source", defval = close) type = input(defval = "Trend", options = ["Trend", "Crossing"], title = "Type") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //KAMA volatility = sum(abs(src-src[1]), length) change = abs(src[1]-src[length]) er = iff(volatility != 0, change/volatility, 0) fastSC = 2/(fast+1) slowSC = 2/(slow+1) sc = pow((er*(fastSC-slowSC))+slowSC, 2) bid = hl2 kama = 0.0 kama := nz(kama[1])+(sc*(bid-nz(kama[1]))) plot(kama, color = black, title = "KAMA", trackprice = false, style = line, linewidth = 3) //Signals up = false dn = false up := (type == "Crossing" and kama > kama[1]) or (type == "Trend" and close > kama) dn := (type == "Crossing" and kama < kama[1]) or (type == "Trend" and close < kama) //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))