En este artículo, exploramos esta idea y tratamos de implementar este script.
La estrategia de área de la línea K es una estrategia de negociación basada en la relación de área entre la línea K y la línea media. Su idea principal es predecir el posible movimiento del precio de las acciones mediante el análisis de la amplitud y el cambio de la tendencia de los precios, así como la conversión del sentimiento de compra, lo que determina el momento de apertura y salida. La estrategia depende de la área entre la línea K y la línea media, así como el valor del indicador KDJ, para generar señales de negociación multi-cabezas y blancas.
El área de la línea K es el área del espacio entre la línea K y la línea uniforme del precio, que se calcula reduciendo el precio de cierre de cada barra a la línea media, y luego se suma. Cuando la tendencia al alza del precio es grande, la superficie de la línea K aumenta con el tiempo, mientras que la superficie de la línea K es pequeña cuando el mercado está en agitación o se invierte después de la agitación. Según el principio de la reacción inevitable de los animales domésticos, cuanto mayor es la tendencia al alza, cuanto más tiempo, mayor es la superficie de la línea K correspondiente, mayor es la probabilidad de reversión.
Para confirmar aún más que la tendencia está a punto de invertirse, se introduce el indicador KDJ, que se utiliza para determinar la conversión del sentimiento de compra y venta. El umbral de esta estrategia y la configuración del valor del indicador KDJ se pueden ajustar en función de las circunstancias y las necesidades específicas para aumentar la precisión de la estrategia.
La ventaja de la estrategia de área de la línea K es que combina la amplitud y el cambio de la tendencia de los precios, así como la conversión del sentimiento de compra y venta, para proporcionar una estrategia de negociación cuantitativa relativamente completa. Sus ventajas incluyen:
A pesar de que la estrategia de la línea K tiene algunas ventajas, también tiene algunos riesgos, incluyendo:
Para optimizar las estrategias de área de línea K, se pueden considerar las siguientes direcciones:
Calcula el área de la línea K
La mayoría de las posiciones están abiertas.
(1) La línea de área de K de la tendencia decreciente alcanza el umbral y se establece antes.
(2) El valor del indicador KDJ es mayor a 80
La señal de apertura de la posición vacía:
(1) La línea de área de K de la línea de K de la tendencia ascendente alcanza el umbral, y antes de que se forme
(2) El valor del indicador KDJ es inferior a 20
Participación de múltiples/vacíos: ATR sigue el parón de pérdidas y paradas
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 estratégica es muy simple:
Primero, se definen algunas variables y parámetros globales, incluyendo:
Parámetros de la estrategia
Variables globales
Función de cálculo
Función de ciclo principal
Función onTick: Esta es la función principal de ejecución de la política, y las siguientes son las operaciones dentro de la función:
a. Obtener los datos más recientes de las líneas K y asegurarse de que el número de líneas K no sea menor que maPeriod, de lo contrario, registrar el estado y regresar.
b. Calcular las medias móviles ma y ATR atr, así como KDJ.
c. Obtener información de área de areaInfo, el último índice de K-string cruzado y el último índice de K-string cruzado.
d. Trazar la línea K y la línea de indicadores con el objeto c del gráfico de K-línea, mientras se rellena de diferentes colores según la relación entre el precio y la media móvil.
e. Tiempo de compra y venta en función de las condiciones:
Si el tradeState es el cuadro NULL, y el área es menor que el -threshold y el valor de la línea K de KDJ es mayor que 70, se realiza la operación de compra. Si el tradeState es el cuadro NULL, y el área es mayor que el umbral y el valor de la línea K de KDJ es menor que 30, ejecute la operación de venta. f. Establecer condiciones de suspensión de pérdidas y de suspensión de pérdidas, si se cumplen las condiciones, el equilibrio:
Si está en estado de compra, se estabiliza cuando el precio está por debajo del precio de cierre del último día de negociación menos el ATR del día anterior. Si se vende, se estabiliza cuando el precio es superior al precio de cierre del día anterior más el ATR del día anterior. Función principal: es la principal entrada de ejecución, que verifica si el nombre de la bolsa contiene el tick_Futures, si lo contiene, lanza una anomalía, si no, entra en un ciclo infinito, ejecuta la función onTick en cada ciclo y duerme 1 segundo.
En general, la estrategia se basa principalmente en los gráficos de la línea K y los indicadores técnicos para tomar decisiones de compra y venta, mientras que las estrategias de stop loss y stop loss se usan para gestionar el riesgo. Tenga en cuenta que esta es solo una estrategia de ejemplo y que en el uso real se debe ajustar y optimizar según las condiciones del mercado y las necesidades específicas.
在FMZ.COM上使用JavaScript语言没有用多少行代码,很简单的就实现了这个模型。并且使用KLineChart函数很容易实现了K线面积的图形表示。策略设计用于加密货币现货市场,使用了「数字货币现货交易类库」模板,使用模板封装的函数下单,也是非常简单易用、易懂。
Si se selecciona un período de retrospección aleatorio, aunque no haya pérdidas, pero tampoco haya acumulado ganancias continuas, el problema de retroceder es relativamente grande.
A través de esta estrategia, además de aprender una idea de negociación más alternativa, aprendimos a dibujar gráficos; representar el área de las líneas K y las líneas horizontales; dibujar indicadores KDJ, etc.
La estrategia de área de la línea K es una estrategia de negociación basada en la amplitud de la tendencia de los precios y el indicador KDJ, que ayuda a los operadores a predecir la tendencia del mercado mediante el análisis de la superficie y la conversión del sentimiento de compra y venta entre la línea K y la línea media. A pesar de que existen ciertos riesgos, la estrategia puede ofrecer una herramienta de negociación poderosa para ayudar a los operadores a responder mejor a las fluctuaciones del mercado.