
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 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 á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.
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:
Si bien la estrategia del área de velas tiene ciertas ventajas, también tiene algunos riesgos, entre ellos:
Para optimizar la estrategia del área de la línea K, se pueden considerar las siguientes direcciones:
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
(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
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:
Parámetros de la estrategia
Variables globales
Función de cálculo
Función de bucle principal
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.


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.

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.
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.