Ideias de negociação alternativas - Estratégia de negociação da área de linha K

Autora:Lydia., Criado: 2023-11-06 13:33:17, Atualizado: 2024-01-01 12:20:19

img

Olhando para uma ideia de negociação não tão confiável a estratégia de negociação da área da linha K, neste artigo, vamos explorar o conceito e tentar implementar o roteiro.

Ideia principal da estratégia da zona da linha K

A estratégia de área de linha K é uma estratégia de negociação baseada na relação de área entre as linhas de preço K e as médias móveis. Sua ideia principal é prever possíveis tendências nos preços das ações analisando a magnitude e as mudanças nas tendências de preços, bem como mudanças no sentimento de compra e venda, determinando assim quando abrir posições e sair. Esta estratégia depende da área entre a linha K e as médias móveis, bem como dos valores do indicador KDJ, para gerar sinais de negociação longos e curtos.

O princípio da estratégia da área da linha K

A área da linha K refere-se à área espacial entre a linha K do preço e a média móvel, calculada subtraindo o valor médio móvel do preço de fechamento de cada barra e depois somando-a. Quando há um grande aumento no preço durante um longo período de tempo, a área da linha K ficará maior, enquanto durante mercados voláteis ou após inversões de volatilidade, a área da linha K é menor. De acordo com o princípio de o que sobe deve cair, à medida que uma tendência ascendente se torna maior e dura mais, sua área da linha K correspondente também aumenta; assim, sua probabilidade crescente de reversão - muito parecida com uma mola que se recupera com maior força quando esticada ainda mais. Portanto, definir um limiar para essa área da linha K pode indicar quando os preços podem ter atingido seu pico e são susceptíveis de reverter.

Para confirmar ainda mais uma reversão iminente da tendência, introduzimos o uso de indicadores KDJ que ajudam a determinar mudanças no sentimento de compra ou venda.

As vantagens da estratégia da zona K-Line

A vantagem da estratégia da área da linha K reside na sua combinação da magnitude e das alterações das tendências de preços, bem como da mudança no sentimento de compra e venda, proporcionando uma estratégia comercial quantitativa relativamente completa.

  • Fornece um método simples e intuitivo para identificar a possibilidade de reversão da tendência, ajudando os traders a compreender melhor as tendências do mercado.
  • Ao combinar a área da linha K e o indicador KDJ, aumenta a fiabilidade e a precisão da estratégia.
  • A elevada flexibilidade permite ajustes dos parâmetros de acordo com as condições do mercado para satisfazer as diferentes necessidades comerciais.

Risco da estratégia da área da linha K

Embora a estratégia da zona da linha K apresente certas vantagens, comporta também alguns riscos, nomeadamente:

  • A fixação dos limiares pode exigir alguma experiência e ajuste, o que, se for improcedente, pode conduzir a uma avaliação errada das tendências do mercado.
  • A precisão do indicador KDJ é afectada pelas flutuações do mercado e pelo ruído, o que pode resultar em sinais falsos.
  • O desempenho da estratégia pode variar em diferentes condições de mercado e necessita de uma otimização e ajustamento constantes.

Orientação de otimização da estratégia da área da linha K

Para otimizar a estratégia da área da linha K, considere as seguintes orientações:

  • Optimização dos parâmetros: ajustar e otimizar continuamente os valores limiares e os parâmetros do indicador KDJ para se adaptarem às diferentes condições do mercado e às necessidades de negociação.
  • Gestão de riscos: aplicar estratégias eficazes de gestão de riscos, incluindo regras de stop-loss e take-profit, para reduzir os riscos de perdas.
  • Combinação de estratégias múltiplas: Combinar a estratégia da área da linha K com outras estratégias para melhorar o desempenho das estratégias comerciais abrangentes.
  • Monitorização e ajustamento em tempo real: monitorizar regularmente o desempenho das estratégias, ajustando e melhorando com base nas situações reais.

Implementar a estratégia usando JavaScript

  • Calcular a área da linha K

  • sinal de abertura de posição longa:

    (1) A área da linha K da tendência descendente atinge o limiar, que pode ser estabelecida previamente.

    (2) O valor do indicador KDJ é superior a 80.

  • Sinalização de abertura de posição curta:

    (1) A área da linha K da tendência ascendente atinge o limiar, que pode ser estabelecida previamente.

    (2) O valor do indicador KDJ é inferior a 20.

  • Exit para posições Long/Short: ATR trailing stop loss e take profit.

Implementação do código

// Parameter
var maPeriod = 30
var threshold = 50000
var amount = 0.1

// Global variable
let c = KLineChart({})
let openPrice = 0
let tradeState = "NULL"  // NULL BUY SELL

function calculateKLineArea(r, ma) {
    var lastCrossUpIndex = null
    var lastCrossDownIndex = null
    for (var i = r.length - 1 ; i >= 0 ; i--) {
        if (ma[i] !== null && r[i].Open < ma[i] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (ma[i] !== null && r[i].Open > ma[i] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }

        if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close < ma[i - 1] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close > ma[i - 1] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }
    }

    var area = 0
    if (lastCrossDownIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossDownIndex ; i--) {
            area -= Math.abs(r[i].Close - ma[i])
        }
    } else if (lastCrossUpIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossUpIndex ; i--) {
            area += Math.abs(r[i].Close - ma[i])
        }
    }

    return [area, lastCrossUpIndex, lastCrossDownIndex]
}

function onTick() {
    var r = _C(exchange.GetRecords)
    if (r.length < maPeriod) {
        LogStatus(_D(), "Insufficient number of K-line")
        return 
    }
    var ma = TA.MA(r, maPeriod)
    var atr = TA.ATR(r)
    var kdj = TA.KDJ(r)
    var lineK = kdj[0]
    var lineD = kdj[1]
    var lineJ = kdj[2]
    var areaInfo = calculateKLineArea(r, ma)
    var area = _N(areaInfo[0], 0)
    var lastCrossUpIndex = areaInfo[1]
    var lastCrossDownIndex = areaInfo[2]
    
    r.forEach(function(bar, index) {
        c.begin(bar)
        c.plotcandle(bar.Open, bar.High, bar.Low, bar.Close, {overlay: true})
        let maLine = c.plot(ma[index], "ma", {overlay: true})
        let close = c.plot(bar.Close, 'close', {overlay: true})
        c.fill(maLine, close, {color: bar.Close > ma[index] ? 'rgba(255, 0, 0, 0.1)' : 'rgba(0, 255, 0, 0.1)'})
        if (lastCrossUpIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        } else if (lastCrossDownIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        }
        c.plot(lineK[index], "K")
        c.plot(lineD[index], "D")
        c.plot(lineJ[index], "J")

        c.close()
    })
    
    if (tradeState == "NULL" && area < -threshold && lineK[lineK.length - 1] > 70) {
        // long
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "BUY"
        }
    } else if (tradeState == "NULL" && area > threshold && lineK[lineK.length - 1] < 30) {
        // short
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "SELL"
        }
    }
    
    let stopBase = tradeState == "BUY" ? Math.max(openPrice, r[r.length - 2].Close) : Math.min(openPrice, r[r.length - 2].Close)
    if (tradeState == "BUY" && r[r.length - 1].Close < stopBase - atr[atr.length - 2]) {
        // cover long
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    } else if (tradeState == "SELL" && r[r.length - 1].Close > stopBase + atr[atr.length - 2]) {
        // cover short 
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    }

    LogStatus(_D(), "area:", area, ", lineK[lineK.length - 2]:", lineK[lineK.length - 2])
}


function main() {    
    if (exchange.GetName().includes("_Futures")) {
        throw "not support Futures"
    }
    while (true) {
        onTick()
        Sleep(1000)
    }
}

A lógica da estratégia é muito simples:

  1. Em primeiro lugar, são definidas algumas variáveis e parâmetros globais, incluindo:

Parâmetros da estratégia

  • MaPeriod: O período da média móvel.
  • O valor da posição em risco deve ser calculado em função do valor da posição em risco.
  • Montante: a quantidade de cada operação.

Variaveis globais

  • c: Um objeto de gráfico de linha K, utilizado para desenhar gráficos.
  • OpenPrice: Regista o preço de abertura.
  • tradeState: Regista o estado de negociação, que pode ser NULL (posição vazia), BUY ou SELL.

Função de cálculo

  • CalculateKLineArea Função: É usada para calcular a área entre o preço e a linha média móvel em um gráfico de linha K durante um determinado período de tempo, e retorna o valor da área, o índice da última linha de cruzamento ascendente K e o índice da última linha de cruzamento descendente K. Estes valores são usados em decisões subsequentes para determinar quando comprar e vender.

Função do circuito principal

  • Função onTick: É a principal função de execução de estratégia, e aqui estão as operações dentro da função:

    a. Obter os dados mais recentes das linhas K e assegurar que o número de linhas K não seja inferior a maPeriod, caso contrário registar o estado e o retorno.

    b. Calcular a linha média móvel ma e o indicador ATR atr, bem como o indicador KDJ.

    c. Obter informações sobre a área a partir do areaInfo, último índice de linha K cruzada e último índice de linha K cruzada.

    d. Use o objeto do gráfico de linha K c para desenhar linhas K e linhas de indicador enquanto preenche cores diferentes com base na relação do preços com a linha média móvel.

    e. Determinar o calendário de compra ou venda de acordo com as condições:

    Se o tradeState for NULL e a área for inferior ao limiar - e o valor K do KDJ for superior a 70, executar uma operação de compra. Se o tradeState for NULL e a área for superior ao limiar e o valor K do KDJ for inferior a 30, executar uma operação de venda. f. Definir condições de stop loss e take profit. Se estas condições estiverem preenchidas, fechar posições:

    Se estiver em estado de compra, quando o preço cair abaixo do preço de fechamento do último dia de negociação menos o ATR (Average True Range) dos dias anteriores, posição fechada. Se estiver em estado de venda, quando o preço subir acima do preço de fechamento do último dia de negociação mais o ATR (Average True Range) dos dias anteriores, posição fechada.

    função principal: serve como ponto de entrada de execução principal. Verifica se o nome de troca contém _Futures. Se assim for, uma exceção será lançada; caso contrário, entra em um loop infinito onde a função onTick é executada a cada segundo.

Em suma, esta estratégia baseia-se principalmente em gráficos de linha K e indicadores técnicos para tomar decisões de compra ou venda, ao mesmo tempo em que emprega estratégias de stop-loss e take-profit para gerenciar o risco.

EmFMZ.COMO projeto de estratégia atende aos mercados spot de criptomoedas utilizando o modelo Digital Currency Spot Trading Library para colocar ordens através de funções encapsuladas dentro do modelo, o que o torna muito simples e fácil de entender e usar.

Estratégia de backtesting

img

img

Eu selecionei um período de backtesting aleatoriamente. Embora eu não tenha perdido dinheiro, eu não acumulei lucros continuamente, nem, e a questão de retirada é bastante significativa. Deve haver outras direções e espaço para otimização para a estratégia. Aqueles que estão interessados podem tentar atualizar a estratégia.

img img

Através da estratégia, não só aprendemos uma ideia de negociação bastante não convencional, mas também aprendemos a traçar diagramas; representando a área cercada pela linha K e linha média móvel; traçando indicadores KDJ etc.

Resumo

A estratégia de área de linha K é uma estratégia de negociação baseada na magnitude da tendência de preços e no indicador KDJ. Ela ajuda os traders a prever as tendências do mercado analisando a área entre a linha K e as médias móveis, bem como as mudanças no sentimento de compra e venda. Apesar de certos riscos, esta estratégia pode fornecer ferramentas de negociação poderosas por meio de otimização e ajuste contínuos, ajudando os traders a lidar melhor com as flutuações do mercado. Além disso, os traders devem ajustar os parâmetros e regras da estratégia de forma flexível de acordo com situações específicas e condições de mercado para alcançar um melhor desempenho comercial.


Mais.