In diesem Artikel werden wir das Konzept erforschen und versuchen, das Skript umzusetzen.
Die K-Linien-Bereichsstrategie ist eine Handelsstrategie, die auf der Flächenbeziehung zwischen Preis-K-Linien und gleitenden Durchschnitten basiert. Ihre Hauptidee besteht darin, mögliche Trends in den Aktienkursen vorherzusagen, indem die Größe und Veränderungen der Preistrends sowie die Veränderungen der Kauf- und Verkaufsstimmung analysiert werden, um so zu bestimmen, wann Positionen geöffnet und ausgesetzt werden sollen. Diese Strategie stützt sich auf den Bereich zwischen der K-Linie und den gleitenden Durchschnitten sowie Werte aus dem KDJ-Indikator, um lange und kurze Handelssignale zu generieren.
Die Fläche der K-Linie bezieht sich auf die räumliche Fläche zwischen der Preis-K-Linie und dem gleitenden Durchschnitt, die berechnet wird, indem der gleitende Durchschnittswert vom Schlusskurs jedes Balkens abgezogen und dann zusammengefasst wird. Wenn der Preis über einen langen Zeitraum stark ansteigt, wird die K-Linie größer, während während volatiler Märkte oder nach Volatilitätsumkehrungen die K-Linie kleiner wird. Gemäß dem Prinzip
Um eine bevorstehende Trendwende weiter zu bestätigen, führen wir die Verwendung von KDJ-Indikatoren ein, die bei der Bestimmung von Veränderungen der Kauf- oder Verkaufsgefühle helfen.
Der Vorteil der K-Linien-Bereichsstrategie liegt in der Kombination von Größe und Veränderungen der Preisentwicklung sowie der Verschiebung der Kauf- und Verkaufsstimmung, die eine relativ vollständige quantitative Handelsstrategie bietet.
Obwohl die K-Linien-Bereichsstrategie gewisse Vorteile hat, birgt sie auch einige Risiken, darunter:
Um die K-Linien-Bereichsstrategie zu optimieren, sollten folgende Richtungen berücksichtigt werden:
Berechnung der K-Linienfläche
Signal zur Eröffnung einer langen Position:
(1) Die
(2) Der KDJ-Indikatorwert ist größer als 80.
Kurzschlussöffnungssignal
(1) Die
(2) Der Wert des KDJ-Indikators liegt unter 20.
Ausgang für Long/Short-Positionen: ATR-nachfolgende Stop-Loss- und Take-Profit-Positionen.
Umsetzung des Codes
// 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)
}
}
Die Strategie ist sehr einfach:
Strategieparameter
Gesamtvariablen
Berechnung der Funktion
Hauptschleife
onTick-Funktion: Es ist die wichtigste Strategie-Ausführungsfunktion, und hier sind die Operationen innerhalb der Funktion:
a. Die neuesten K-Liniendaten erhalten und sicherstellen, dass die Anzahl der K-Linien nicht kleiner als maPeriod ist, ansonsten den Status und die Rückgabe aufzeichnen.
b. Berechnung der gleitenden Durchschnittslinie ma und des ATR-Indikators atr sowie des KDJ-Indikators.
c. Erhalten Sie Flächeninformationen von areaInfo, letzten Crossover-K-Line-Index und letzten Cross-Under-K-Line-Index.
d. Verwenden Sie das K-Liniendiagrammobjekt c, um K-Linien und Indikatorlinien zu zeichnen und gleichzeitig verschiedene Farben zu füllen, die auf der Beziehung zwischen Preis
e. Zeitplan für den Kauf oder Verkauf gemäß folgenden Bedingungen festlegen:
Wenn tradeState
Wenn es sich im Kaufzustand befindet, wenn der Kurs unter den Schlusskurs des letzten Handelstages minus den ATR (Average True Range) der vorherigen Tage fällt, schließt die Position. Wenn es sich um einen Verkaufszustand handelt, wenn der Kurs über den Schlusskurs des letzten Handelstages plus den ATR (Average True Range) der vorherigen Tage steigt, schließt die Position.
main function: Dies dient als Hauptexekutionseingangspunkt. Es überprüft, ob der Austauschname
In einem Wort, diese Strategie stützt sich hauptsächlich auf K-Liniendiagramme und technische Indikatoren, um Kauf- oder Verkaufsentscheidungen zu treffen, während sie auch Stop-Loss- und Take-Profit-Strategien zur Risikomanagement nutzt.
AufFMZ.COMDie Strategie-Design richtet sich an Kryptowährungs-Spotmärkte, indem sie die
Ich wählte eine Backtesting-Periode zufällig aus. Obwohl ich kein Geld verloren habe, habe ich auch keinen Gewinn kontinuierlich angesammelt, und das Drawdown-Problem ist ziemlich bedeutend. Es sollte andere Richtungen und Raum für die Optimierung der Strategie geben. Wer interessiert ist, kann versuchen, die Strategie zu aktualisieren.
Durch die Strategie haben wir nicht nur eine eher unkonventionelle Handelsidee gelernt, sondern auch gelernt, Diagramme zu zeichnen; die Fläche darzustellen, die von K-Linie und gleitender Durchschnittslinie umschlossen ist; KDJ-Indikatoren zu zeichnen usw.
Die K-Linien-Bereichsstrategie ist eine Handelsstrategie, die auf der Größenordnung des Preistrends und dem KDJ-Indikator basiert. Sie hilft den Händlern, Markttrends vorherzusagen, indem sie den Bereich zwischen der K-Linie und den gleitenden Durchschnitten sowie die Veränderungen der Kauf- und Verkaufsstimmung analysiert. Trotz bestimmter Risiken kann diese Strategie durch kontinuierliche Optimierung und Anpassung leistungsstarke Handelswerkzeuge bieten, die den Händlern helfen, besser mit Marktschwankungen umzugehen. Darüber hinaus sollten Händler die Parameter und Regeln der Strategie flexibel entsprechend spezifischen Situationen und Marktbedingungen anpassen, um eine bessere Handelsleistung zu erzielen.