Mirando a una idea de comercio no tan confiable
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 á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
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.
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.
Aunque la estrategia de la zona de la línea K tiene ciertas ventajas, también conlleva algunos riesgos, entre los que se incluyen:
Para optimizar la estrategia del área de la línea K, considere las siguientes direcciones:
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:
Parámetros de la estrategia
Variables globales
Función de cálculo
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
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
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.
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.
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.
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.