
A estratégia usa o KAMA para determinar a direção da tendência, para capturar a tendência da linha média-longa. Faça mais quando a linha KAMA está alta e faça menos quando a linha KAMA está baixa. A estratégia combina a função de rastreamento de tendências da média móvel com a característica de ajuste dinâmico da média KAMA, com o objetivo de melhorar a qualidade do sinal de negociação.
O indicador central da estratégia é o KAMA (Kama Adaptation Moving Average). O KAMA ajusta dinamicamente o seu próprio fator de ponderação de acordo com o tamanho da flutuação do mercado, aumentando assim a sensibilidade da curva. Concretamente, a curva do KAMA torna-se mais suave quando a flutuação do mercado aumenta; a curva do KAMA torna-se mais sensível quando a flutuação do mercado diminui.
A estratégia primeiro calcula o valor de KAMA. Em seguida, julga o estado de vazio da linha KAMA: quando o preço de fechamento atravessa a linha KAMA acima, gera um sinal de compra; quando o preço de fechamento atravessa a linha KAMA abaixo, gera um sinal de venda.
A maior vantagem desta estratégia é a utilização do indicador KAMA para o julgamento de tendências. O indicador KAMA em si tem uma forte capacidade de acompanhamento de tendências, que pode ajustar dinamicamente os parâmetros para se adaptar às condições do mercado, resultando em um sinal de negociação mais confiável. O indicador KAMA pode identificar melhor as tendências e reduzir os falsos sinais, em comparação com a média móvel simples e a média móvel do índice.
Além disso, a estratégia usa apenas o estado de vazio do KAMA para julgar a direção da tendência. Não há condições de filtragem adicionais definidas, o que simplifica a lógica da estratégia e reduz o risco de otimização excessiva, favorecendo a estabilidade dos parâmetros e a adaptabilidade entre os mercados.
O principal risco desta estratégia é que o KAMA em si é um indicador de atraso, e a tendência do mercado pode ter se invertido quando o sinal de negociação é produzido. Isso pode levar ao risco de parada. Além disso, a curva KAMA também pode apresentar um estado de agitação de curto prazo, o que pode produzir alguns sinais errados frequentes.
Para reduzir o risco, pode-se considerar a combinação de outros indicadores para confirmar os sinais de negociação, como os indicadores de taxa de flutuação, volume de transação, etc. Os parâmetros também podem ser ajustados adequadamente, Identification torna a curva KAMA mais lisa.
A estratégia ainda tem muito espaço para otimização, principalmente a partir dos seguintes pontos:
Filtração de sinais em combinação com outros indicadores, como MACD, indicador de vibração, etc., para melhorar a qualidade do sinal
Aumentar a estratégia de stop loss, usando o stop loss móvel ou o stop loss de curva de saldo para controlar a perda individual
Parâmetros de otimização para que a KAMA possa capturar tendências de forma mais eficiente
Adicionar análise de múltiplos períodos de tempo para determinar a direção das grandes tendências usando períodos de tempo mais altos
Otimização automática de parâmetros usando métodos de aprendizagem de máquina para adaptá-los a diferentes variedades
A estratégia tem uma visão geral clara, determina a direção da tendência com o indicador KAMA, possui vantagens como a capacidade de acompanhamento de tendências, lógica simples e menos parâmetros. Mas também existe o risco de identificação tardia de uma reversão de tendência. A estratégia pode ser otimizada de várias maneiras, tornando-a mais eficaz e mais 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)))