Wie man strategischen Handel in JavaScript-Sprache implementiert
In dem vorherigen Artikel haben wir die grundlegenden Kenntnisse, die bei der Verwendung von JavaScript, um ein Programm zu schreiben, einschließlich der grundlegenden Grammatik und Materialien.
Der Bollinger Band ist einer der am häufigsten verwendeten technischen Indikatoren, erfunden von John Bollinger in den 1980er Jahren. Theoretisch schwanken die Preise immer um einen bestimmten Wertbereich.
Die Berechnungsmethode besteht darin, das statistische Prinzip zu verwenden, zuerst die
Aufgrund des Konzepts der Standardabweichung wird die Breite des Bollinger Bands dynamisch anhand der jüngsten Preisschwankungen angepasst. Wenn die Schwankungen gering sind, werden die Bollinger Bands enger sein; andernfalls werden die Schwankungen größer sein und die Bollinger Bands breiter. Wenn der BOLL-Kanal von schmal zu breit wechselt, kehrt der Preis allmählich zum Durchschnitt zurück. Wenn der BOLL-Kanal von breit zu schmal wechselt, bedeutet dies, dass sich der Marktpreis zu ändern beginnt. Wenn der Preis den oberen Schienen überquert, bedeutet dies, dass die Kaufkraft gesteigert wird. Wenn der Preis den unteren Schienen überquert, zeigt dies an, dass die Verkaufskraft gesteigert wird.
Unter allen technischen Indikatoren ist die Bollinger-Band-Berechnungsmethode eine der kompliziertesten, die das Konzept der Standardabweichung in die Statistik einführt und die Berechnung der mittleren Flugbahn (MB ), der oberen Flugbahn (UP) und der unteren Flugbahn (DN) umfasst.
Mittlere Schiene = einfacher gleitender Durchschnitt von N Zeiträumen
Oberbahn = Mittelschiene + Standardabweichung des Zeitraums K × N
Unterbahn = Mittelschiene − Standardabweichung des Zeitraums K × N
function main( ) { // program entry
while (true) { // enter the loop
exchange.SetContactType('this_week'); // set contact type
var records = exchange.GetRecods(); // get the k line array
var boll = TA.B0LL(records, 50); // get the 50-cycle BOLL indicator array
var top = boll[0]; // get the upper-rail BOLL indicator array
var ma = boll[l]; // get the middle-rail BOLL indicator array
var bottom = boll[2]; // get the lower-rail BOLL indicator array
Log(top); // print the upper-rail BOLL indicator array to the log
Log(ma); // print the middle-rail BOLL indicator array to the log
Log(bottom);// print the lower-rail BOLL indicator array to the log
}
}
Die Bollinger Bands werden auf verschiedene Arten verwendet und können allein oder in Kombination mit anderen Indikatoren verwendet werden. In diesem Abschnitt des Tutorials werden wir es am einfachsten verwenden, nämlich: Wenn der Preis durch die obere Schiene bricht, öffnen Sie eine Long-Position; wenn der Preis durch die untere Schiene bricht, öffnen Sie eine Short-Position.
Wenn der Preis nach dem Öffnen der Long-Position wieder auf die mittlere Schiene des Bollinger Bands zurückkehrt, glauben wir, dass die Stärke der Kaufkraft schwächer wird oder die Stärke der Verkaufskraft stärker wird.
Offene Long-Position: Wenn es keine Position gibt und der Schlusskurs größer ist als die oberen Schienen.
Short-Position: Wenn keine Position besteht und der Schlusskurs niedriger ist als die unteren Schienen.
Schließen einer Long-Position: Wenn eine Long-Position gehalten wird und der Schlusskurs unterhalb der mittleren Schiene liegt,
Schließung einer Short-Position: Wenn eine Short-Position gehalten wird und der Schlusskurs größer ist als der mittlere Kurs,
Um die Strategie zu erreichen, müssen wir zunächst prüfen, welche Daten wir benötigen? durch welche API zu erhalten? dann, wie die Handelslogik zu berechnen? schließlich, welche Art und Weise, um den Auftrag zu platzieren? lassen Sie es Schritt für Schritt umsetzen:
Das sogenannte CTA Strategy Framework ist eine Reihe von Standard-Frameworks, die von der FMZ Quant offiziell entwickelt wurden. Mit diesem Framework können Sie das triviale Programmierproblem ignorieren und sich direkt auf die Logik der Programmierung konzentrieren.
function main() {
$.CTA("this_week", function(st) {
// write your strategy here
})
}
Das obige ist das CTA-Strategie-Framework mit dem FMZ Quant-Tool. Es handelt sich um ein festes Code-Format, und alle Handelslogik-Code beginnen mit Zeile 3. Zusätzlich zur Notwendigkeit, den verwendeten Sortencode zu ändern, sind an anderer Stelle keine anderen Änderungen erforderlich.
Beachten Sie, dass der oben genannte Handelsvariantencode
Wenn wir uns die Daten ansehen, die wir benötigen, dann müssen wir zunächst den aktuellen Positionsstatus ermitteln und dann den Schlusskurs mit den oberen, mittleren und unteren Schienen des Bollinger-Band-Indikators vergleichen.
Die erste ist, um die K-Line Daten-Array und die vorherige K-Line Schlusskurs, mit der K-Line-Array zu bekommen, können wir den Bollinger Band-Indikator berechnen. es kann so geschrieben werden:
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
})
}
Wie oben gezeigt:
Zeile 4: Holen Sie sich das K-Zeil-Array, das ein festes Format ist.
Linie 5: Filtern Sie die Länge der K-Linie, weil der Parameter für die Berechnung des Bollinger-Band-Indikators 20 ist, wenn die K-Linie kleiner als 20 ist, ist es unmöglich, den Bollinger-Band-Indikator zu berechnen.
Zeile 6 : Aus dem erhaltenen K-Linien-Array erhalten Sie zuerst das Objekt der vorherigen K-Line und erhalten dann den Schlusskurs aus diesem Objekt.
Die K-Line-Array-Elemente sind alle Objekte, das Objekt enthält den Eröffnungs-, Höchst-, Tiefst- und Schlusskurs; auch das Handelsvolumen und die Zeit.
Zum Beispiel, um den Schlusskurs zu erhalten, fügen Sie einfach ". " mit dem Attributnamen (r[r.length - 2].Close).
Da es sich um eine Intraday-Strategie handelt, müssen wir alle Positionen vor einer bestimmten Zeit schließen ((die meisten Krypto-Handelsbörsen sind in der Regel rund um die Uhr geöffnet), also müssen wir beurteilen, ob die aktuelle K-Linie nahe an dieser bestimmten Zeit ist, wenn wir was zu stoppen oder eine Pause zu machen.
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
})
}
Wie oben gezeigt:
Zeile 8: Holen Sie sich die Zeitrahmenattributobjekte der Zeile K und erstellen Sie dann ein Zeitobjekt ((neues Datum (Zeitstempel)).
Zeile 9: Berechnen Sie die Stunden und Minuten nach dem Zeitobjekt und bestimmen Sie, ob die Zeit der aktuellen K-Zeile 14:45 ist.
Die Positionsinformationen sind eine sehr wichtige Bedingung in der quantitativen Handelsstrategie. Wenn die Handelsbedingungen festgelegt werden, ist es notwendig, zu beurteilen, ob eine Bestellung nach dem Status der Position und der Anzahl der Positionen platziert wird. Zum Beispiel, wenn die Bedingungen für die Eröffnung von Long-Positionen festgelegt werden, wenn es Holding-Positionen gibt, platzieren Sie die Bestellung nicht; wenn es keine Holding-Position gibt, platzieren Sie die Bestellung. wie folgt:
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
})
}
Wie oben gezeigt:
Zeile 11: Erhalten Sie den Status der aktuellen Position. Wenn es eine lange Position gibt, ist der Wert 1; wenn es eine kurze Position gibt, ist der Wert -1; wenn es keine Position gibt, ist der Wert 0.
Als nächstes müssen wir die Werte der oberen, mittleren und unteren Schienen des Bollinger Band-Indikators berechnen. Wir müssen zuerst das Boolean-Array erhalten und dann die Werte der oberen, mittleren und unteren Schienen aus diesem Array erhalten. Im FMZ-Quantenwerkzeug ist es sehr einfach, das Boolean-Array zu erhalten, rufen Sie einfach die Bollinger Band API direkt an, es ist ein zweidimensionales Array.
Es ist einfach, das zweidimensionale Array zu verstehen, das das Array in einem Array ist. Die Reihenfolge, um den Wert zu erhalten, lautet: erst das angegebene Array im Array erhalten und dann das angegebene Element aus dem angegebenen Array erhalten, wie unten gezeigt:
var arr = [[100, 200, 300],[10,20,30],[1,2,3]]; // this is a two-dimensional array
var test = arr[0]; //first obtain the specified array in the array and assign the value to variable "test"
var demo1 = test[0]; //then get a value from the test array
demo1; // the result is : 100
var demo2 = arr[0][0]; // you also can write like this
demo2; // the result is the same : 100
Unten, von der 13. bis 19. Zeile erhalten Sie die Bollinger Band oberen, mittleren und unteren Schienen-Codierung Teil, wo die Zeile 13 verwendet wird, die FMZ Quant API-Tool, die den Zugriff auf die Bollinger-Band-Array direkt; Zeile 14 bis Zeile 16 erhalten die zweidimensionalen Array beziehungsweise für die oberen, mittleren und unteren Schienen-Array; Zeile 17 bis Zeile 19 erhalten die spezifizieren Wert aus der oberen, mittleren und unteren Schienen-Array.
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
var upLine = boll[0]; // get the up-rail array
var midLine = boll[1]; // get the middle-rail array
var downLine = boll[2]; // get the lower-rail array
var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value
})
}
Mit den oben genannten Daten können wir jetzt die Handelslogik und den Bestellteil schreiben. Es ist auch sehr einfach, die am häufigsten verwendete ist die
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
var upLine = boll[0]; // get the up-rail array
var midLine = boll[1]; // get the middle-rail array
var downLine = boll[2]; // get the lower-rail array
var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value
if (mp == 1 && (close < midPrice || isClose)) return -1; // if holding long position, and the closing price is less than the mid-rail, or the current time is 14:45, closing long position.
if (mp == -1 && (close > midPrice || isClose)) return 1; // if holding short position, and the closing price is greater than the mid-rail, or the current time is 14:45, closing short position.
if (mp == 0 && close > upPrice && !isClose) return 1; // if there are no holding position, and the closing price is greater than the upper-rail, or the current time is not 14:45, open long position.
if (mp == 0 && close < downPrice && !isClose) return -1;// if there are no holding position, and the closing price is less than the lower-rail, or the current time is not 14:45, open short position.
})
}
In der obigen Abbildung sind die Zeilen 21 bis 24 die Handelslogik und der Coding-Teil für die Auftragserteilung. Von oben nach unten sind sie: schließende Long-Position, schließende Short-Position, offene Long-Position und offene Short-Position.
Nehmen wir zum Beispiel die offene Long-Position. Dies ist eine
Sie können feststellen, dass diese Zeilen " return 1 " und " return -1 " haben, was ein festes Format ist, was bedeutet: wenn es sich um die Kaufrichtung handelt, schreiben Sie " return 1 "; wenn es sich um die Verkaufsrichtung handelt, schreiben Sie " return -1 ". Die Eröffnung einer Long- und Schließung einer Short-Position sind alle Kaufrichtung, also schreiben Sie
Wenn das Handelsrahmenwerk, die Handelsdaten, die Handelslogik und die Auftragserteilung separat geschrieben werden, ist es sehr einfach.
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
var upLine = boll[0]; // get the up-rail array
var midLine = boll[1]; // get the middle-rail array
var downLine = boll[2]; // get the lower-rail array
var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value
if (mp == 1 && (close < midPrice || isClose)) return -1; // if holding long position, and the closing price is less than the mid-rail, or the current time is 14:45, closing long position.
if (mp == -1 && (close > midPrice || isClose)) return 1; // if holding short position, and the closing price is greater than the mid-rail, or the current time is 14:45, closing short position.
if (mp == 0 && close > upPrice && !isClose) return 1; // if there are no holding position, and the closing price is greater than the upper-rail, or the current time is not 14:45, open long position.
if (mp == 0 && close < downPrice && !isClose) return -1;// if there are no holding position, and the closing price is less than the lower-rail, or the current time is not 14:45, open short position.
})
}
Es gibt zwei Dinge, die man beachten muss:
Versuchen Sie (aber nicht unbedingt), die Strategie-Logik zu schreiben, wenn die aktuelle K-Linie-Bedingung festgelegt wird, und dann die Bestellung auf die nächste K-Linie platzieren. Oder die vorherige K-Linie-Bedingung wird festgelegt, Bestellungen auf die aktuelle K-Linie platzieren, auf diese Weise unterscheiden sich das Ergebnis des Backtests und die tatsächliche Marktleistung nicht viel. Es ist in Ordnung, nicht so zu schreiben, aber achten Sie darauf, ob die Strategie-Logik korrekt ist.
Im Allgemeinen sollte die Logik der Schließposition vor der Öffnungsposition Logik schreiben. Der Zweck davon ist es, zu versuchen, die Strategie Logik Ihre Erwartungen zu erfüllen. Zum Beispiel, wenn die Strategie Logik nur die Situation zu erfüllen, wo es die entgegengesetzte Richtung des Handels nach nur schließen eine Position tun muss, die Regel dieser Art von Situation ist, die Position zuerst zu schließen und dann die neue Position zu öffnen. Wenn wir die Schließposition Logik vor der Öffnungsposition Logik schreiben, wird es perfekt diese Regel erfüllen.
Wir haben oben jeden Schritt der Entwicklung einer vollständigen intraday quantitativen Handelsstrategie gelernt, einschließlich: Strategieeinführung, Bollinger-Indikatorberechnungsmethode, Strategielogik, Handelsbedingungen, Strategiecode-Implementierung usw. Durch diesen Strategiefall sind wir nicht nur mit den Programmiermethoden der FMZ Quant-Tools vertraut, sondern können auch einige andere Strategien erstellen, die entsprechend dieser Vorlage angepasst werden.
Eine quantitative Handelsstrategie ist nichts anderes als eine Zusammenfassung subjektiver Handelserfahrung oder eines Systems. Wenn wir die Erfahrung oder das System, das beim subjektiven Handel verwendet wird, vor dem Schreiben der quantitativen Strategie aufschreiben und dann einzeln in Code übersetzen, werden Sie feststellen, dass das Schreiben einer quantitativen Strategie viel einfacher ist.
In der quantitativen Handelsstrategieentwicklung, wenn nur eine Programmiersprache wählen können, ohne zu zögern, muss es Python sein. Von der Erfassung von Daten bis hin zum Backtesting, sogar der Platzierung der Bestellung Teil, hat Python die gesamte Geschäftskette abgedeckt. Im Bereich der finanziellen quantitativen Investitionen, Python hat eine äußerst wichtige Position, der nächste Abschnitt des Kurses besetzt wir beginnen, die Python-Sprache zu lernen.
Versuchen Sie, die in diesem Abschnitt enthaltenen Kenntnisse zu nutzen, um eine Strategie für einen doppelten gleitenden Durchschnitt umzusetzen.
Versuchen Sie, die KDJ-Indikatorstrategie mit der JavaScript-Sprache auf der FMZ Quant-Plattform zu implementieren.