En la carga de los recursos... Cargando...

Ideas de negociación alternativas - Estrategia de negociación en el área de la línea K

El autor:FMZ~Lydia, Creado: 2023-11-06 13:33:17, Actualizado: 2024-11-08 09:10:08

img

Mirando a una idea de comercio no tan confiable la estrategia de comercio del área de la línea K, en este artículo, exploraremos el concepto e intentaremos implementar el guión.

Idea principal de la estrategia de la zona de la línea K

La estrategia de área de la línea K es una estrategia de negociación basada en la relación de área entre las líneas K de precios y los promedios móviles. Su idea principal es predecir las posibles tendencias en los precios de las acciones mediante el análisis de la magnitud y los cambios de las tendencias de precios, así como los cambios en el sentimiento de compra y venta, determinando así cuándo abrir posiciones y salir. Esta estrategia se basa en el área entre la línea K y los promedios móviles, así como en los valores del indicador KDJ, para generar señales comerciales largas y cortas.

El principio de la estrategia de la zona de la línea K

El área de la línea K se refiere al área espacial entre la línea K del precio y el promedio móvil, calculada restando el valor promedio móvil del precio de cierre de cada barra y luego sumándolo. Cuando hay un gran aumento en el precio durante un largo período de tiempo, el área de la línea K se hará más grande, mientras que durante los mercados volátiles o después de las reversiones de volatilidad, el área de la línea K es más pequeña. De acuerdo con el principio de lo que sube debe bajar, a medida que una tendencia al alza se hace más grande y dura más, su área de la línea K correspondiente también aumenta; por lo tanto, su probabilidad de reversión aumenta, al igual que un resorte que rebota con mayor fuerza cuando se extiende más. Por lo tanto, establecer un umbral para este área de la línea K puede indicar cuándo los precios pueden haber alcanzado su pico y es probable que se revierzan.

Para confirmar aún más una inminente inversión de tendencia, introducimos el uso de indicadores KDJ que ayudan a determinar los cambios en el sentimiento de compra o venta.

Las ventajas de la estrategia de la zona K-Line

La ventaja de la estrategia de la zona de la línea K radica en su combinación de la magnitud y los cambios de las tendencias de los precios, así como el cambio en el sentimiento de compra y venta, proporcionando una estrategia comercial cuantitativa relativamente completa.

  • Proporciona un método simple e intuitivo para identificar la posibilidad de una inversión de tendencia, ayudando a los operadores a comprender mejor las tendencias del mercado.
  • Al combinar el área de la línea K y el indicador KDJ, aumenta la fiabilidad y precisión de la estrategia.
  • La alta flexibilidad permite ajustes de parámetros según las condiciones del mercado para satisfacer las diferentes necesidades comerciales.

Riesgo de la estrategia de la zona de la línea K

Aunque la estrategia de la zona de la línea K tiene ciertas ventajas, también conlleva algunos riesgos, entre los que se incluyen:

  • El establecimiento de umbrales puede requerir cierta experiencia y ajuste, y si no se fija correctamente, puede conducir a una evaluación errónea de las tendencias del mercado.
  • La precisión del indicador KDJ se ve afectada por las fluctuaciones del mercado y el ruido, lo que puede dar lugar a señales falsas.
  • El rendimiento de la estrategia puede variar en diferentes condiciones de mercado y necesita una optimización y un ajuste constantes.

Dirección de optimización de la estrategia de la zona de la línea K

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

  • Optimización de parámetros: ajustar y optimizar continuamente los valores de umbral y los parámetros del indicador KDJ para adaptarse a las diferentes condiciones del mercado y las necesidades comerciales.
  • Gestión de riesgos: aplicar estrategias eficaces de gestión de riesgos, incluidas las normas de stop-loss y take-profit, para reducir los riesgos de pérdidas.
  • Combinación de estrategias múltiples: Combinar la estrategia de la zona de la línea K con otras estrategias para mejorar el rendimiento de las estrategias comerciales integrales.
  • Monitoreo y ajuste en tiempo real: supervisar regularmente el desempeño de las estrategias, ajustándolas y mejorándolas en función de las situaciones reales.

Implementar la estrategia con JavaScript

  • Calcular el área de la línea K

  • Señal de apertura de posición larga:

    (1) El área de la línea K de la tendencia descendente alcanza el umbral, puede establecerse con antelación.

    (2) El valor del indicador KDJ es superior a 80.

  • Señales de apertura de posiciones cortas:

    (1) El área de la línea K de la tendencia al alza alcanza el umbral, puede establecerse con antelación.

    (2) El valor del indicador KDJ es inferior a 20.

  • Salida para posiciones largas/cortas: ATR para dejar de perder y obtener beneficios.

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

La lógica de la estrategia es muy simple:

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

Parámetros de la estrategia

  • MaPeriodo: el período de la media móvil.
  • En el caso de las entidades financieras, el valor de las operaciones de compra o venta se calcula en función de la situación de la entidad.
  • cantidad: la cantidad correspondiente a cada operación.

Variables globales

  • c: Un objeto de gráfico de línea K, utilizado para dibujar gráficos.
  • OpenPrice: registra el precio de apertura.
  • tradeState: registra el estado de negociación, que puede ser NULL (posición vacía), BUY o SELL.

Función de cálculo

  • CalculateKLineArea Función: Se utiliza para calcular el área entre el precio y la línea media móvil en un gráfico de K-Line durante un cierto período de tiempo, y devuelve el valor del área, el índice de la última línea de cruce ascendente K-Line, y el índice de la última línea de cruce descendente K-Line. Estos valores se utilizan en decisiones posteriores para determinar cuándo comprar y vender.

Función del bucle principal

  • Función onTick: Es la función de ejecución de la estrategia principal, y aquí están las operaciones dentro de la función:

    a. Obtener los últimos datos de las líneas K y asegurarse de que el número de líneas K no sea inferior a maPeriod, de lo contrario, registrar el estado y devolver.

    b. Calcular el indicador de la línea media móvil ma y el indicador ATR atr, así como el indicador KDJ.

    c. Obtener información sobre el área de areaInfo, el último índice de línea K cruzada y el último índice de línea K cruzada.

    d. Utilice el objeto de gráfico de línea K c para dibujar líneas K y líneas de indicadores mientras rellena diferentes colores basados en la relación del precio con la línea de media móvil.

    e. Determinar el momento de compra o venta de acuerdo con las condiciones:

    Si el tradeState es NULL y el área es inferior al umbral -y el valor K de KDJ es superior a 70, ejecutar una operación de compra. Si el tradeState es NULL, el área es mayor que el umbral y el valor K de KDJ es inferior a 30, ejecutar una operación de venta. f. Establecer las condiciones de stop loss y take profit. Si se cumplen estas condiciones, cerrar posiciones:

    Si está en estado de compra, cuando el precio cae por debajo del precio de cierre del último día de negociación menos el ATR (Rango Verdadero Medio) de los días anteriores, cierre la posición. Si está en estado de venta, cuando el precio se eleve por encima del precio de cierre del último día de negociación más el ATR (Rango Verdadero Medio) de los días anteriores, se cierra la posición.

    función principal: sirve como punto de entrada de ejecución principal. Comprueba si el nombre de intercambio contiene _Futures. Si es así, se lanzará una excepción; de lo contrario, entra en un bucle infinito donde la función onTick se ejecuta cada segundo.

En una palabra, esta estrategia se basa principalmente en gráficos de línea K e indicadores técnicos para tomar decisiones de compra o venta, mientras que también emplea estrategias de stop-loss y take-profit para gestionar el riesgo.

En elFMZ.COM, utilizando el lenguaje JavaScript no requirió muchas líneas de código, en cambio, implementó este modelo fácilmente. Y con la ayuda de la función KLineChart, la representación gráfica del área del gráfico de línea K también se logró fácilmente.

Estrategia de prueba de retroceso

img

img

Seleccioné un período de backtesting al azar. Aunque no perdí dinero, tampoco acumulé ganancias continuamente, y el problema de la retirada es bastante significativo. Debe haber otras direcciones y espacio para la optimización de la estrategia. Los interesados pueden intentar actualizar la estrategia.

img img

A través de la estrategia, no sólo aprendimos una idea comercial bastante poco convencional, sino que también aprendimos a trazar diagramas; representando el área encerrada por la línea K y la línea media móvil; trazando indicadores KDJ, etc.

Resumen de las actividades

La estrategia de área de la línea K es una estrategia de negociación basada en la magnitud 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 los promedios móviles, así como los cambios en el sentimiento de compra y venta. A pesar de ciertos riesgos, esta estrategia puede proporcionar poderosas herramientas de negociación a través de la optimización y el ajuste continuo, ayudando a los operadores a hacer frente mejor a las fluctuaciones del mercado. Además, los operadores deben ajustar los parámetros y las reglas de la estrategia de manera flexible de acuerdo con situaciones específicas y condiciones del mercado para lograr un mejor rendimiento comercial.


Más.