avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Ideas de trading alternativas: estrategia de trading en el área de la línea K

Creado el: 2023-11-03 17:12:42, Actualizado el: 2024-11-08 09:08:54
comments   0
hits   1617

Ideas de trading alternativas: estrategia de trading en el área de la línea K

En este artículo analizamos una idea comercial no muy confiable: la estrategia comercial del área de la línea K. Analizaremos esta idea e intentaremos implementar este guión.

La idea principal de la estrategia del área de la línea K

La estrategia del área de la línea K es una estrategia comercial basada en la relación de área entre la línea K del precio y la media móvil. Su idea principal es predecir la posible tendencia de los precios de las acciones mediante el análisis de la amplitud y los cambios de las tendencias de los precios, así como la conversión de los sentimientos de compra y venta, a fin de determinar el momento de apertura y salida de posiciones. Esta estrategia se basa en el área entre la vela y la media móvil, así como en el valor del indicador KDJ, para generar señales comerciales largas y cortas.

El principio de la estrategia del área de la línea K

El área de la vela se refiere al espacio entre el precio de la vela y el promedio móvil, que se calcula restando el valor del promedio móvil del precio de cierre de cada barra y luego sumándolos. Cuando el precio sube durante mucho tiempo y en una gran amplitud, el área de la línea K será más grande, mientras que en un mercado volátil o una reversión después de la volatilidad, el área de la línea K será más pequeña. . De acuerdo con el principio de “todo va al extremo opuesto”, cuanto mayor sea la tendencia alcista y más larga sea el tiempo, mayor será el área de la línea K correspondiente y mayor será la probabilidad de reversión, al igual que un resorte, cuanto más largo sea. Cuanto más se estira, mayor es la fuerza de rebote. Por lo tanto, se establece un umbral para el área de la línea K. Cuando se alcanza este umbral, la tendencia de precios puede completarse y la posibilidad de una reversión es mayor.

Para confirmar aún más que la tendencia está a punto de revertirse, se introduce el indicador KDJ para juzgar la conversión del sentimiento de compra y venta. Los valores de umbral e indicador KDJ de esta estrategia se pueden ajustar según circunstancias y necesidades específicas para mejorar la precisión de la estrategia.

Ventajas de la estrategia del área de la línea K

La ventaja de la estrategia del área de la línea K es que combina la amplitud y los cambios de las tendencias de precios, así como la conversión del sentimiento de compra y venta, proporcionando una estrategia comercial cuantitativa relativamente completa. Entre sus ventajas destacan:

  • Proporciona una forma sencilla e intuitiva de identificar la posibilidad de una reversión de tendencia, ayudando a los operadores a comprender mejor las tendencias del mercado.
  • La combinación del área de la línea K y los indicadores KDJ aumenta la confiabilidad y precisión de la estrategia.
  • Es altamente flexible y puede ajustar los parámetros según las condiciones del mercado para satisfacer diferentes necesidades comerciales.

Riesgos de la estrategia del área de la línea K

Si bien la estrategia del área de velas tiene ciertas ventajas, también tiene algunos riesgos, entre ellos:

  • Establecer el umbral puede requerir cierta experiencia y ajustes, y si no se establece correctamente, puede llevar a una evaluación errónea de las tendencias del mercado.
  • La precisión del indicador KDJ se ve afectada por las fluctuaciones y el ruido del mercado, y pueden aparecer señales falsas.
  • El rendimiento de una estrategia puede variar en diferentes condiciones del mercado y requiere optimización y ajuste constantes.

Dirección de optimización de la estrategia del área de la línea K

Para optimizar la estrategia del área de la línea K, se pueden considerar las siguientes direcciones:

  • Optimización de parámetros: ajuste y optimice continuamente el umbral y los parámetros del indicador KDJ para adaptarse a las diferentes condiciones del mercado y las necesidades comerciales.
  • Gestión de riesgos: implementar estrategias efectivas de gestión de riesgos, incluidas reglas de stop-loss y take-profit, para reducir el riesgo de pérdidas.
  • Combinación de múltiples estrategias: combine la estrategia del área de la línea K con otras estrategias para mejorar el rendimiento de la estrategia comercial integral.
  • Monitoreo y ajuste en tiempo real: Monitorear periódicamente el desempeño de la estrategia y realizar ajustes y mejoras en función de las condiciones reales.

Implementa esta estrategia usando JavaScript

  • Calcular el área de la vela

  • Señal para abrir una posición larga:

(1) El “área de la línea K” de la tendencia descendente alcanza el umbral, que se puede establecer antes

(2) El valor del indicador KDJ es mayor que 80

  • Señal para abrir una posición corta:

(1) El “área de la línea K” de la tendencia ascendente alcanza el umbral, que se puede establecer antes

(2) El valor del indicador KDJ es menor a 20

  • Salida larga/corta: seguimiento de ATR stop loss y take profit

Implementación 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)
    }
}

La lógica de la estrategia es muy simple:

  1. En primer lugar, se definen algunas variables y parámetros globales, entre ellos:

Parámetros de la estrategia

  • maPeriod: El período de la media móvil.
  • umbral: El umbral utilizado para determinar cuándo comprar o vender.
  • importe: El importe de cada transacción.

Variables globales

  • c: Objeto de gráfico de línea K, utilizado para dibujar gráficos.
  • openPrice: registra el precio de apertura.
  • tradeState: registra el estado de la transacción, que puede ser “NULL” (posición vacía), “BUY” (compra) o “SELL” (venta).

Función de cálculo

  • Función calculateKLineArea: esta función se utiliza para calcular el área entre el precio y el promedio móvil durante un período de tiempo en el gráfico de velas, y devuelve el valor del área, el índice de vela del último cruce ascendente y el índice de vela del último cruce ascendente. el último cruce transversal hacia abajo. Estos valores se utilizan en decisiones posteriores para determinar cuándo comprar y vender.

Función de bucle principal

  • Función onTick: Esta es la función principal de ejecución de la estrategia. Las siguientes son las operaciones dentro de la función:

a. Obtenga los últimos datos de la línea K y asegúrese de que la cantidad de líneas K no sea menor que maPeriod; de lo contrario, registre el estado y devuélvalo.

b. Calcule la media móvil ma y el indicador ATR atr, así como el indicador KDJ.

c. Obtenga la información del área, el último índice de línea K cruzada hacia arriba y el último índice de línea K cruzada hacia abajo de areaInfo.

d. Utilice el objeto de gráfico de velas c para dibujar las líneas de velas e indicadores, y rellénelas con diferentes colores según la relación entre el precio y el promedio móvil.

e. Determinar el momento de compra y venta en función de las condiciones:

Si tradeState es “NULL”, y el área es menor que el umbral y el valor de la vela KDJ es mayor que 70, se realiza una operación de compra. Si tradeState es “NULL”, y el área es mayor que el umbral y el valor de la vela KDJ es menor que 30, ejecute una operación de venta. f. Establecer condiciones de stop loss y take profit y cerrar la posición si se cumplen las condiciones:

Si está en estado de compra, la posición se cierra cuando el precio es inferior al precio de cierre del día de negociación anterior menos el ATR del día anterior. Si está en estado de venta, la posición se cierra cuando el precio es mayor que el precio de cierre del día de negociación anterior más el ATR del día anterior. Función principal: Este es el punto de entrada de ejecución principal, que verifica si el nombre del intercambio contiene “_“Futuros”, si se incluye, genera una excepción; de lo contrario, ingresa en un bucle infinito, ejecuta la función onTick en cada bucle y permanece inactivo durante 1 segundo.

En general, esta estrategia se basa principalmente en gráficos de líneas K e indicadores técnicos para tomar decisiones de compra y venta, al tiempo que utiliza estrategias de stop-loss y take-profit para gestionar los riesgos. Tenga en cuenta que esta es solo una estrategia de ejemplo y que el uso real debe ajustarse y optimizarse según las condiciones del mercado y las necesidades específicas.

Este modelo se implementó fácilmente usando JavaScript en FMZ.COM sin utilizar muchas líneas de código. Y la representación gráfica del área de la línea K se logra fácilmente utilizando la función KLineChart. La estrategia está diseñada para el mercado al contado de criptomonedas y utiliza la plantilla “Biblioteca de operaciones al contado de divisas digitales”. Realizar pedidos utilizando funciones incluidas en la plantilla también es muy simple, fácil de usar y comprender.

Backtesting de estrategia

Ideas de trading alternativas: estrategia de trading en el área de la línea K

Ideas de trading alternativas: estrategia de trading en el área de la línea K

Seleccioné al azar un período de prueba retrospectiva. Aunque no perdí dinero, no acumulé ganancias de manera continua, por lo que el problema de la caída fue bastante grande. Debería haber otras direcciones de optimización y espacio para esta estrategia. Los que estén interesados ​​pueden intentar mejorar esta estrategia.

Ideas de trading alternativas: estrategia de trading en el área de la línea K

A través de esta estrategia, además de aprender una idea de trading más alternativa, también aprendimos a dibujar gráficos; representar el área encerrada por la línea K y la media móvil; dibujar el indicador KDJ, etc.

Resumir

La estrategia de área de la línea K es una estrategia comercial basada en la amplitud de la tendencia de precios y el indicador KDJ. Ayuda a los operadores a predecir las tendencias del mercado mediante el análisis del área entre la línea K y la media móvil y la conversión del sentimiento de compra y venta. Si bien existen ciertos riesgos, a través de la optimización y el ajuste continuos, esta estrategia puede proporcionar una poderosa herramienta comercial para ayudar a los operadores a afrontar mejor las fluctuaciones del mercado. Es importante que los traders ajusten de manera flexible los parámetros y reglas de sus estrategias según la situación específica y las condiciones del mercado para lograr un mejor desempeño comercial.