En examinant une idée de trading pas si fiable
La stratégie de zone de la ligne K est une stratégie de trading basée sur la relation de zone entre les lignes de prix K et les moyennes mobiles. Son idée principale est de prédire les tendances possibles des prix des actions en analysant l'ampleur et les changements des tendances des prix, ainsi que les changements dans le sentiment d'achat et de vente, déterminant ainsi le moment d'ouvrir des positions et de sortir. Cette stratégie repose sur la zone entre la ligne K et les moyennes mobiles, ainsi que sur les valeurs de l'indicateur KDJ, pour générer des signaux de trading longs et courts.
L'aire de la ligne K fait référence à l'aire spatiale entre la ligne K du prix et la moyenne mobile, calculée en soustrayant la valeur moyenne mobile du prix de clôture de chaque barre et en la sommant. Lorsqu'il y a une forte augmentation du prix sur une longue période, l'aire de la ligne K devient plus grande, tandis que pendant les marchés volatils ou après des inversions de volatilité, l'aire de la ligne K est plus petite. Selon le principe de
Pour confirmer davantage un renversement de tendance imminent, nous introduisons l'utilisation d'indicateurs KDJ qui aident à déterminer les changements de sentiment d'achat ou de vente.
L'avantage de la stratégie de la zone K-line réside dans sa combinaison de l'ampleur et des changements des tendances des prix, ainsi que de l'évolution du sentiment d'achat et de vente, fournissant une stratégie commerciale quantitative relativement complète.
Bien que la stratégie de la zone K-line présente certains avantages, elle comporte également certains risques, notamment:
Pour optimiser la stratégie de la zone de la ligne K, considérez les directions suivantes:
Calculer la surface de la ligne K
Signal d'ouverture de position longue:
(1) La zone de la ligne K de la tendance à la baisse atteint le seuil, elle peut être établie à l'avance.
(2) La valeur de l'indicateur KDJ est supérieure à 80.
Signal d'ouverture de position courte:
(1) La zone de la ligne K de la tendance à la hausse atteint le seuil, elle peut être établie à l'avance.
(2) La valeur de l'indicateur KDJ est inférieure à 20.
Exit pour les positions longues/courtes: ATR, arrêt des pertes et prise de bénéfices.
Mise en œuvre du code
// 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 logique de la stratégie est simple:
Paramètres stratégiques
Variables globales
Calculer la fonction
Fonction de boucle principale
fonction onTick: Il s'agit de la principale fonction d'exécution de stratégie, et voici les opérations au sein de la fonction:
a. Obtenir les données les plus récentes sur les lignes K et s'assurer que le nombre de lignes K n'est pas inférieur à maPeriod, sinon enregistrer l'état et le retour.
b. Calculer l'indicateur de moyenne mobile ma et l'indicateur ATR atr, ainsi que l'indicateur KDJ.
c. Obtenir les informations sur la zone à partir de l'information sur la zone, le dernier indice de ligne K croisé et le dernier indice de ligne K croisé.
d. Utilisez l'objet c du graphique K-line pour dessiner des K-lines et des lignes d'indicateurs tout en remplissant différentes couleurs basées sur la relation entre le prix et la ligne de moyenne mobile.
e. Déterminer le calendrier d'achat ou de vente selon les conditions suivantes:
Si tradeState est
S'il est en état d'achat, lorsque le prix tombe en dessous du prix de clôture du dernier jour de négociation moins l'ATR (Average True Range) des jours précédents, position close. S'il est en état de vente, lorsque le prix dépasse le prix de clôture du dernier jour de négociation plus l'ATR (Average True Range) des jours précédents, position close.
main function: Il sert de point d'entrée d'exécution principal. Il vérifie si le nom d'échange contient
En un mot, cette stratégie repose principalement sur des graphiques K-line et des indicateurs techniques pour prendre des décisions d'achat ou de vente tout en utilisant des stratégies de stop-loss et de take-profit pour gérer le risque.
ÀFMZ.COM, en utilisant le langage JavaScript n'a pas nécessité de nombreuses lignes de code, au lieu de cela, il a mis en œuvre ce modèle facilement. Et avec l'aide de la fonction KLineChart, la représentation graphique de la zone du graphique en ligne K a également été facilement réalisée.
J'ai sélectionné une période de backtesting au hasard. Bien que je n'ai pas perdu d'argent, je n'ai pas accumulé de bénéfices en continu, ni, et le problème de retrait est assez important. Il devrait y avoir d'autres directions et de la place pour l'optimisation de la stratégie. Ceux qui sont intéressés peuvent essayer de mettre à niveau la stratégie.
Grâce à la stratégie, nous avons non seulement appris une idée de trading plutôt non conventionnelle, mais aussi appris à tracer des diagrammes; représentant la zone entourée par la ligne K et la ligne moyenne mobile; tracer des indicateurs KDJ, etc.
La stratégie de zone de la ligne K est une stratégie de trading basée sur la magnitude de la tendance des prix et l'indicateur KDJ. Elle aide les traders à prédire les tendances du marché en analysant la zone entre la ligne K et les moyennes mobiles, ainsi que les changements de sentiment d'achat et de vente.