Dans cet article, nous allons explorer cette idée et essayer de mettre en œuvre ce script.
La stratégie de l'aire de la ligne K est une stratégie de trading basée sur la relation de l'aire entre la ligne K du prix et la ligne moyenne. Son idée principale est de prédire l'évolution possible des prix des actions en analysant l'ampleur et la variation des tendances des prix et les changements de sentiment d'achat, ce qui détermine le moment d'ouverture et de sortie.
L'aire de la ligne K est l'espace entre la ligne K et la ligne de l'équilibre des prix, calculé en soustrayant la valeur de la ligne moyenne de clôture de chaque Bar, puis en demandant une somme. Lorsque la tendance à la hausse des prix est importante, l'aire de la ligne K devient plus grande au fil du temps, tandis que l'aire de la ligne K est plus petite lors d'un marché turbulent ou d'un retournement après un retournement. Selon le principe de la rétroaction obligatoire, plus la tendance à la hausse est grande, plus le temps est long, plus la zone de la ligne K correspondante est grande, plus la probabilité d'un retournement est grande, comme pour une soupape de rebond, plus elle est longue, plus elle est résiliente.
Pour confirmer davantage l'imminence d'un renversement de tendance, l'indicateur KDJ est introduit pour déterminer la conversion de l'attitude d'achat. Le seuil de cette stratégie et le paramètre de l'indicateur KDJ peuvent être ajustés en fonction des circonstances et des besoins spécifiques afin d'améliorer l'exactitude de la stratégie.
L'avantage de la stratégie de l'espace K est qu'elle combine l'ampleur et la variation de la tendance des prix, ainsi que la conversion de l'humeur d'achat et de vente, pour fournir une stratégie de trading quantitative relativement complète.
Bien que la stratégie de la ligne K ait certains avantages, elle comporte également des risques, notamment:
Pour optimiser les stratégies de la K-Line, on peut considérer les points suivants:
Calculer la surface de la ligne K
Le signe de l'ouverture de plusieurs positions:
(1) La couche de surface de la ligne K de la tendance à la baisse atteint le seuil, avant même d'être établie
(2) Le KDJ est supérieur à 80
Le signal d'ouverture de l'opération:
(1) L'axe de surface de la ligne K de la tendance haussière atteint le seuil, avant même de se former.
(2) La valeur de l'indicateur KDJ est inférieure à 20
Multi-tête / entrées vides: ATR suit le stop-loss stop-stop
Mise en œuvre du code
// 参数
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 logique stratégique est simple:
Tout d'abord, nous définissons quelques variables et paramètres globaux, notamment:
Paramètres stratégiques
Variables mondiales
Fonction de calcul
Fonction de cycle principal
Fonction onTick: Il s'agit d'une fonction d'exécution de stratégie principale, avec les opérations suivantes:
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 retourner;
b. Calcul des moyennes mobiles ma et ATR pour l'indicateur atr, ainsi que pour l'indicateur KDJ.
c. Obtenir de l'information sur l'espace, l'index de la K-string la dernière fois traversée et l'index de la K-string la dernière fois traversée à partir de l'information de l'aire.
d. Utiliser l'objet c du graphique K pour tracer la ligne K et la ligne indicateur, en remplissant les différentes couleurs en fonction de la relation entre le prix et la moyenne mobile.
e. Pour déterminer le moment de l'achat et de la vente selon les conditions:
Si le tradeState est en mode NULL, et que l'aire est inférieure au -threshold et que la valeur de la ligne K de KDJ est supérieure à 70, exécutez l'opération d'achat. Si le tradeState est en mode NULL, et que l'aire est supérieure au seuil et que la valeur de la ligne K de KDJ est inférieure à 30, exécutez l'opération de vente. f. Définir les conditions de cessation des pertes et de cessation des pertes, et, si les conditions sont remplies, le solde:
Si c'est l'état d'achat, le solde est établi lorsque le prix est inférieur au prix de clôture de la dernière journée de négociation moins l'ATR de la journée précédente. S'il s'agit d'un état de vente, le prix est fixé lorsque celui-ci est supérieur au prix de clôture de la dernière journée de négociation plus l'ATR de la journée précédente. main: c'est la principale entrée d'exécution, qui vérifie si le nom de l'échange contient une balise on_Futures, si elle le contient, lance une anomalie, sinon entre dans une boucle infinie, exécute la fonction onTick dans chaque boucle et repose 1 seconde.
Dans l'ensemble, cette stratégie repose principalement sur les graphiques K et les indicateurs techniques pour prendre des décisions d'achat et de vente, tout en utilisant des stratégies de stop-loss et de stop-loss pour gérer les risques. Veuillez noter que ce n'est qu'un exemple de stratégie qui, lorsqu'elle est utilisée dans la pratique, doit être ajustée et optimisée en fonction des conditions du marché et des besoins spécifiques.
在FMZ.COM上使用JavaScript语言没有用多少行代码,很简单的就实现了这个模型。并且使用KLineChart函数很容易实现了K线面积的图形表示。策略设计用于加密货币现货市场,使用了「数字货币现货交易类库」模板,使用模板封装的函数下单,也是非常简单易用、易懂。
Choisissez un laps de temps de réévaluation aléatoire, sans perdre de l'argent, mais sans continuer à accumuler des bénéfices, et le problème de rétractation est relativement grand. Il devrait y avoir d'autres directions et espaces pour optimiser cette stratégie.
Grâce à cette stratégie, en plus d'apprendre une approche de négociation plus alternative, nous avons appris à dessiner des graphiques; à représenter la surface entourée par les lignes K et les lignes de l'équateur; à dessiner des indicateurs KDJ, etc.
La stratégie de l'aire de la ligne K est une stratégie de trading basée sur l'amplitude de la tendance des prix et l'indicateur KDJ, qui aide les traders à prédire la tendance du marché en analysant l'aire et la conversion de l'humeur d'achat entre la ligne K et la ligne moyenne. Malgré certains risques, l'optimisation et l'ajustement constants de cette stratégie peuvent fournir un outil de trading puissant pour aider les traders à mieux faire face aux fluctuations du marché.