avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

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

Criado em: 2023-11-03 17:12:42, atualizado em: 2024-11-08 09:08:54
comments   0
hits   1617

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

Analisando uma ideia de negociação não muito confiável - estratégia de negociação de área de linha K, neste artigo discutiremos essa ideia e tentaremos implementar esse script.

A ideia principal da estratégia da área da linha K

A estratégia de área da linha K é uma estratégia de negociação baseada na relação de área entre a linha K do preço e a média móvel. Sua ideia principal é prever a possível tendência dos preços das ações analisando a amplitude e as mudanças nas tendências de preços, bem como a conversão dos sentimentos de compra e venda, para determinar o momento de abertura e saída de posições. Essa estratégia se baseia na área entre o candle e a média móvel, bem como no valor 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 do candlestick se refere ao espaço entre o candlestick de preço e a média móvel, que é calculada subtraindo o valor da média móvel do preço de fechamento de cada barra e depois somando-os. Quando o preço sobe por muito tempo e em grande amplitude, a área da linha K se tornará maior, enquanto em um mercado volátil ou uma reversão após a volatilidade, a área da linha K será menor . De acordo com o princípio de “tudo vai para o extremo oposto”, quanto maior a tendência de alta e quanto maior o tempo, maior a área da linha K correspondente e maior a probabilidade de reversão, assim como uma mola, quanto maior for o tempo for esticado, maior será a força de rebote. Portanto, um limite para a área da linha K é definido. Quando esse limite é atingido, a tendência de preço pode ser concluída e a possibilidade de uma reversão é maior.

Para confirmar ainda mais que a tendência está prestes a se reverter, o indicador KDJ é introduzido para avaliar a conversão do sentimento de compra e venda. As configurações de limite e valor do indicador KDJ desta estratégia podem ser ajustadas de acordo com circunstâncias e necessidades específicas para aumentar a precisão da estratégia.

Vantagens da estratégia de área da linha K

A vantagem da estratégia de área da linha K é que ela combina a amplitude e as mudanças das tendências de preços, bem como a conversão do sentimento de compra e venda, fornecendo uma estratégia de negociação quantitativa relativamente completa. Suas vantagens incluem:

  • Ele fornece uma maneira simples e intuitiva de identificar a possibilidade de reversão de tendência, ajudando os traders a entender melhor as tendências do mercado.
  • A combinação dos indicadores de área K-line e KDJ aumenta a confiabilidade e a precisão da estratégia.
  • É altamente flexível e pode ajustar parâmetros de acordo com as condições de mercado para atender a diferentes necessidades de negociação.

Riscos da estratégia da área da linha K

Embora a estratégia de área de velas tenha certas vantagens, ela também apresenta alguns riscos, incluindo:

  • Definir o limite pode exigir alguma experiência e ajuste e, se não for definido corretamente, pode levar a erros de julgamento das tendências de mercado.
  • A precisão do indicador KDJ é afetada pelas flutuações e ruídos do mercado, e sinais falsos podem ocorrer.
  • O desempenho de uma estratégia pode variar sob diferentes condições de mercado e requer otimização e ajuste constantes.

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

Para otimizar a estratégia da área da linha K, as seguintes direções podem ser consideradas:

  • Otimização de parâmetros: ajuste e otimize continuamente os parâmetros do limite e do indicador KDJ para se adaptar a diferentes condições de mercado e necessidades de negociação.
  • Gestão de Riscos: Implemente estratégias eficazes de gestão de riscos, incluindo regras de stop-loss e take-profit, para reduzir o risco de perdas.
  • Combinação multiestratégia: combine a estratégia de área da linha K com outras estratégias para melhorar o desempenho da estratégia de negociação abrangente.
  • Monitoramento e ajustes em tempo real: monitore regularmente o desempenho da estratégia e faça ajustes e melhorias com base nas condições reais.

Implemente esta estratégia usando JavaScript

  • Calcular a área do castiçal

  • Sinal para abrir uma posição longa:

(1) A “área da linha K” da tendência descendente atinge o limite, que pode ser estabelecido antes

(2) O valor do indicador KDJ é maior que 80

  • Sinal para abrir uma posição curta:

(1) A “área da linha K” da tendência ascendente atinge o limite, que pode ser estabelecido antes

(2) O valor do indicador KDJ é menor que 20

  • Saída longa/curta: ATR rastreando stop loss e take profit

Implementação de código

// 参数
var maPeriod = 30
var threshold = 50000
var amount = 0.1

// 全局变量
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(), "K线数量不足")
        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. Primeiro, algumas variáveis ​​e parâmetros globais são definidos, incluindo:

Parâmetros de estratégia

  • maPeriod: O período da média móvel.
  • limite: O limite usado para determinar quando comprar ou vender.
  • montante: O valor de cada transação.

Variáveis ​​globais

  • c: Objeto de gráfico K-line, usado para desenhar gráficos.
  • openPrice: registra o preço de abertura.
  • tradeState: registra o status da transação, que pode ser “NULL” (posição vazia), “BUY” (comprar) ou “SELL” (vender).

Função de Cálculo

  • Função calculateKLineArea: Esta função é usada para calcular a área entre o preço e a média móvel ao longo de um período de tempo no gráfico de velas e retorna o valor da área, o índice de velas do último cruzamento ascendente e o índice de velas de a última travessia para baixo. Esses valores são usados ​​em decisões subsequentes para determinar quando comprar e vender.

Função do loop principal

  • Função onTick: Esta é a principal função de execução da estratégia. A seguir estão as operações dentro da função:

a. Obtenha os dados mais recentes da linha K e certifique-se de que o número de linhas K não seja menor que maPeriod, caso contrário, registre o status e retorne.

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

c. Obtenha as informações da área, o último índice de K-line cruzado para cima e o último índice de K-line cruzado para baixo de areaInfo.

d. Use o objeto c do gráfico de velas para desenhar as linhas de velas e indicadores e preenchê-las com cores diferentes de acordo com a relação entre o preço e a média móvel.

e. Determine o momento de compra e venda com base nas condições:

Se tradeState for “NULL”, a área for menor que -threshold e o valor do candlestick KDJ for maior que 70, uma operação de compra será realizada. Se tradeState for “NULL”, a área for maior que o limite e o valor do candle KDJ for menor que 30, execute uma operação de venda. f. Defina as condições de stop loss e take profit e feche a posição se as condições forem atendidas:

Se estiver em estado de compra, a posição será fechada quando o preço for menor que o preço de fechamento do dia de negociação anterior menos o ATR do dia anterior. Se estiver em estado de venda, a posição será fechada quando o preço for maior que o preço de fechamento do dia de negociação anterior mais o ATR do dia anterior. função principal: Este é o principal ponto de entrada de execução, verificando se o nome da troca contém “_“Futures”, se incluído, lança uma exceção, caso contrário, entra em um loop infinito, executa a função onTick em cada loop e dorme por 1 segundo.

Em geral, essa estratégia se baseia principalmente em gráficos K-line e indicadores técnicos para tomar decisões de compra e venda, enquanto usa estratégias de stop-loss e take-profit para gerenciar riscos. Observe que esta é apenas uma estratégia de exemplo e o uso real precisa ser ajustado e otimizado com base nas condições de mercado e necessidades específicas.

Este modelo foi facilmente implementado usando JavaScript no FMZ.COM sem usar muitas linhas de código. E a representação gráfica da área da linha K é facilmente obtida usando a função KLineChart. A estratégia é projetada para o mercado spot de criptomoedas e usa o modelo “Digital Currency Spot Trading Library”. Colocar ordens usando funções encapsuladas no modelo também é muito simples, fácil de usar e entender.

Backtesting de estratégia

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

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

Selecionei aleatoriamente um período de backtesting. Embora eu não tenha perdido dinheiro, não acumulei lucros continuamente, então o problema de drawdown ainda era bem grande. Deve haver outras direções de otimização e espaço para essa estratégia. Os interessados ​​podem tentar melhorar essa estratégia.

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

Por meio dessa estratégia, além de aprender uma ideia de negociação mais alternativa, também aprendemos a desenhar gráficos; representar a área delimitada pela linha K e pela média móvel; desenhar o indicador KDJ, etc.

Resumir

A estratégia de área K-line é uma estratégia de negociação baseada na amplitude da tendência de preço e no indicador KDJ. Ela ajuda os traders a prever tendências de mercado analisando a área entre a K-line e a média móvel e a conversão do sentimento de compra e venda. Embora existam certos riscos, por meio de otimização e ajuste contínuos, essa estratégia pode fornecer uma ferramenta de negociação poderosa para ajudar os traders a lidar melhor com as flutuações do mercado. É importante que os traders ajustem com flexibilidade os parâmetros e regras de suas estratégias de acordo com a situação específica e as condições de mercado para obter melhor desempenho de negociação.