ragserteilung und den Handel verwendet? Lassen Sie es uns als Nächstes Schritt für Schritt implementieren:
Das sogenannte CTA-Strategie-Framework ist ein offiziell von Inventor Quantitative eingeführtes Standard-Framework. Mit diesem Framework müssen Sie sich nicht um die trivialen Probleme bei der Entwicklung quantitativer Handelsstrategien kümmern und können sich direkt auf die Programmierung der Handelslogik konzentrieren. Wenn Sie dieses Framework beispielsweise nicht verwenden, müssen Sie beim Aufgeben einer Bestellung die monatliche Übertragung, Kauf- und Verkaufspreise der Bestellung, die Stornierung der Bestellung oder die Nachverfolgung berücksichtigen, wenn die Bestellung nicht ausgeführt wird usw.
Abbildung 4-21
Das obige Bild zeigt den CTA-Strategierahmen unter Verwendung der quantitativen Tools des Erfinders. Dies ist ein festes Codeformat, und alle Transaktionslogikcodes werden ab Zeile 3 geschrieben. Während der Nutzung sind, bis auf die Sortenkennung (hellgelb), keine weiteren Änderungen erforderlich.
Es ist zu beachten, dass der Produktcode in der obigen Abbildung „rb000/rb888“ lautet, was bedeutet, dass die Signaldaten „rb000“ verwenden, die Transaktionsdaten „rb888“ verwenden und die Monatsverschiebung automatisch erfolgt. Natürlich können Sie auch einen bestimmten Produktcode angeben, beispielsweise den Produktcode „rb1910“, was bedeutet, dass sowohl Signaldaten als auch Transaktionsdaten „rb1910“ verwenden.
FMZ verfügt über eine integrierte JavaScript-Bibliothek für den Handel mit Rohstoff-Futures. Sie können diese in Ihrem Code verwenden, indem Sie einfach auf die Referenz in der Strategiebearbeitungsoberfläche klicken:
Überlegen Sie genau, welche Daten Sie benötigen? Aus unserer Strategiehandelslogik haben wir Folgendes herausgefunden: Zuerst müssen wir den aktuellen Positionsstatus ermitteln, dann die Beziehung zwischen dem Schlusskurs und den oberen, mittleren und unteren Spuren des Bollinger-Band-Indikators vergleichen und schließlich feststellen, ob der Markt kurz vor der Schließung steht. Holen wir uns also diese Daten.
Der erste Schritt besteht darin, das K-Linien-Array und den Schlusskurs der vorherigen K-Linie zu erhalten, da der Bollinger-Band-Indikator nur mit dem K-Linien-Array berechnet werden kann. So sieht es im Code aus:
Abbildung 4-22
Wie in der Abbildung oben gezeigt: Zeile 4: Holen Sie sich das K-Line-Array, das ein festes Format hat. Zeile 5: Filtern Sie die Länge der K-Linie, da der Parameter, den wir zur Berechnung des Bollinger-Band-Indikators verwenden, 20 ist. Wenn die K-Linie kleiner als 20 ist, kann der Bollinger-Band-Indikator nicht berechnet werden. Daher müssen wir hier die Länge der K-Linie filtern. Wenn es weniger als 20 K-Linien gibt, kehren wir direkt zurück und warten weiter auf die nächste K-Linie. Zeile 6: Holen Sie sich aus dem erhaltenen K-Linien-Array zuerst das Objekt der vorherigen K-Linie und dann den Schlusskurs aus dem Objekt. Holen Sie sich das vorletzte Element eines Arrays, das der Länge des Arrays minus 2 entspricht (r[r.length - 2]); Die Elemente im K-Line-Array sind alle Objekte, die den Eröffnungskurs, den Höchstkurs, den Tiefstkurs, den Schlusskurs, das Handelsvolumen und die Zeit enthalten. Um den Schlusskurs zu erhalten, fügen Sie einfach “.” und den Attributnamen am Ende hinzu (r[r.length - 2].Close)。
Da wir eine Intraday-Strategie verwenden, müssen wir die Position schließen, bevor der Markt schließt. Daher müssen wir feststellen, ob die aktuelle K-Linie nahe am Marktschluss liegt. Wenn dies der Fall ist, schließen wir die Position. Wenn nicht, können wir die Position eröffnen. Der Code lautet wie folgt:
Abbildung 4-23
Wie in der Abbildung oben gezeigt: Zeile 8: Holen Sie sich das Zeitstempelattribut der aktuellen K-Zeile und erstellen Sie dann ein Zeitobjekt (neues Datum (Zeitstempel)). Zeile 9: Berechnen Sie die Stunden und Minuten basierend auf dem Zeitobjekt und bestimmen Sie, ob die Zeit der K-Linie 14:45 Uhr ist.
Positionsinformationen sind eine sehr wichtige Voraussetzung für quantitative Handelsstrategien. Wenn die Handelsbedingungen erfüllt sind, muss auch anhand des Positionsstatus und der Anzahl der Positionen bestimmt werden, ob eine Bestellung aufgegeben werden soll. Beispiel: Wenn die Bedingungen zum Eröffnen einer Kaufposition erfüllt sind und Sie eine Position haben, müssen Sie keine erneute Bestellung aufgeben; wenn Sie keine Position haben, können Sie eine Bestellung aufgeben. So sieht es im Code aus:
Abbildung 4-24
Wie in der Abbildung oben gezeigt:
Zeile 11: Aktuellen Positionsstatus abrufen. Bei Mehrfachaufträgen beträgt der Wert 1, bei Leeraufträgen beträgt der Wert -1, bei keinen Positionen beträgt der Wert 0.
Als nächstes müssen Sie die Werte der oberen, mittleren und unteren Spur des Bollinger-Band-Indikators berechnen. Dann müssen Sie zuerst das Bollinger-Bänder-Array abrufen und dann die Werte der oberen, mittleren und unteren Bänder aus dem Array abrufen. Im Inventor Quantitative Tool ist es sehr einfach, das Bollinger-Band-Array abzurufen. Sie können die Bollinger-Band-API direkt aufrufen. Der schwierige Teil besteht darin, die Werte der oberen, mittleren und unteren Schiene abzurufen, da das Bollinger-Band-Array ein zweidimensionales Array ist.
Das zweidimensionale Array ist eigentlich sehr einfach zu verstehen. Es ist ein Array in einem Array. Die Reihenfolge der Erfassung lautet also: Holen Sie sich zuerst das angegebene Array im Array und dann das angegebene Element aus dem angegebenen Array, wie in der folgenden Abbildung dargestellt:
Abbildung 4-25
Wie in der folgenden Abbildung gezeigt, verwenden die Zeilen 13 bis 19 Code, um die Werte der oberen, mittleren und unteren Schiene der Bollinger-Bänder zu erhalten. Unter diesen verwendet Zeile 13 direkt die API des quantitativen Tools des Erfinders, um das Bollinger-Band-Array direkt zu erhalten; die Zeilen 14 bis 16 erhalten zuerst jeweils das obere Schienen-Array, das mittlere Schienen-Array und das untere Schienen-Array im zweidimensionalen Array; die Zeilen 17 bis 19 erhalten jeweils die oberen, mittleren und unteren Schienenwerte des Bollinger-Bands der vorherigen K-Linie aus dem oberen Schienen-Array, dem mittleren Schienen-Array und dem unteren Schienen-Array.
Abbildung 4-26
Mit den oben genannten Daten können Sie die Handelslogik und den Code zum Platzieren von Aufträgen schreiben. Das Format ist ebenfalls sehr einfach. Am häufigsten wird die „if-Anweisung“ verwendet, die in Worten wie folgt beschrieben werden kann: Wenn Bedingung 1 und Bedingung 2 erfüllt sind, geben Sie eine Bestellung auf; wenn Bedingung 3 oder Bedingung 4 erfüllt ist, geben Sie eine Bestellung auf. Wie in der folgenden Abbildung dargestellt:
Abbildung 4-27
In der obigen Abbildung stellen die Zeilen 21 bis 24 die Handelslogik- und Auftragserteilungscodes dar. Von oben nach unten sind dies: Schließen lang, Schließen kurz, Öffnen lang, Öffnen kurz.
Am Beispiel der Eröffnung einer Long-Position (Zeile 23) handelt es sich um eine „if-Anweisung“. Wenn in dieser Anweisung nur eine Codezeile ausgeführt wird, können die geschweiften Klammern „{}“ weggelassen werden. Diese Aussage wird wie folgt in den Text übersetzt: Wenn die aktuelle Position 0 ist und der Schlusskurs größer als die obere Spur ist und die K-Linienzeit nicht 14:45 ist, dann „1 zurückgeben“
Aufmerksame Leute werden vielleicht feststellen, dass in diesen Zeilen „Return 1“ und „Return -1“ vorkommen. Dies ist ein festes Format, das heißt: Wenn es sich um einen Kauf handelt, schreiben Sie „Return 1“, wenn es sich um einen Verkauf handelt, schreiben Sie „Return -1“. Das Eröffnen einer Long-Position und das Schließen einer Short-Position sind beides Kauftransaktionen, schreiben Sie also „Rendite 1“. Das Eröffnen einer Short-Position und das Schließen einer Long-Position sind beides Verkaufstransaktionen, schreiben Sie also „Rendite -1“.
An diesem Punkt wurde ein vollständiger Strategiecode geschrieben. Wäre es nicht sehr einfach, wenn der Handelsrahmen, die Handelsdaten, die Handelslogik, die Auftragserteilung usw. separat geschrieben würden? Im Folgenden finden Sie den vollständigen Code dieser Strategie:
Abbildung 4-28
Dabei sind zwei Punkte zu beachten: Versuchen Sie (aber nicht unbedingt), die Strategielogik so zu schreiben, dass die nächste K-Line-Bestellung platziert wird, wenn die Root-K-Line-Bedingung erfüllt ist, oder dass die Root-K-Line-Bestellung platziert wird, wenn die vorherige K-Line-Bedingung erfüllt ist. Auf diese Weise unterscheiden sich die Backtest-Ergebnisse nicht wesentlich von den tatsächlichen Ergebnissen. Man muss das nicht zwingend so schreiben, muss aber darauf achten, ob die Strategielogik stimmt. Generell sollte die Logik zum Schließen einer Position vor der Logik zum Öffnen einer Position geschrieben werden. Der Zweck besteht darin, die Strategielogik so konsistent wie möglich mit Ihren Erwartungen zu gestalten. Beispiel: Wenn die Strategielogik die umgekehrte Position einholt, besteht die Regel der umgekehrten Position darin, zuerst die Position zu schließen und dann eine neue Position zu eröffnen. Anstatt zuerst eine neue Position zu eröffnen und sie dann zu schließen. Wenn wir die Schließlogik direkt vor die Öffnungslogik schreiben, tritt dieses Problem nicht auf.
Oben haben wir jeden Schritt zur Entwicklung einer vollständigen quantitativen Intraday-Handelsstrategie kennengelernt, einschließlich: Strategieeinführung, Berechnungsmethode für den Bollinger-Band-Indikator, Strategielogik, Kauf- und Verkaufsbedingungen, Implementierung des Strategiecodes usw. Durch diesen Strategiefall können Sie sich nicht nur mit der Programmiermethode des quantitativen Tools des Erfinders vertraut machen, sondern es auch auf Grundlage dieser Vorlage in verschiedene Strategien integrieren.
Quantitative Handelsstrategien sind nichts anderes als Zusammenfassungen subjektiver Handelserfahrungen oder -systeme. Wenn wir die Erfahrungen oder Systeme, die beim subjektiven Handel verwendet werden, vor dem Schreiben der Strategien aufschreiben und sie dann nacheinander in Codes übersetzen, werden Sie feststellen, dass das Schreiben von Strategien viel einfacher ist. Probieren Sie es aus!
Wenn Sie bei der Entwicklung quantitativer Handelsstrategien nur eine Programmiersprache auswählen können, müssen Sie sich ohne zu zögern für Python entscheiden. Von der Datenerfassung über das Backtesting von Strategien bis hin zum Handel deckt Python die gesamte Geschäftskette ab. Es nimmt eine wichtige Position im Bereich der quantitativen Finanzinvestitionen ein. Im nächsten Kurs erlernen wir die Grundkenntnisse der Python-Sprache.
Wenn Sie bei der Entwicklung quantitativer Handelsstrategien nur eine Programmiersprache auswählen können, müssen Sie sich ohne zu zögern für Python entscheiden. Von der Datenerfassung über das Strategie-Backtesting bis hin zum Handel deckt Python die gesamte Geschäftskette ab. Es nimmt eine wichtige Position im Bereich der quantitativen Finanzinvestitionen ein. In diesem Kurs erlernen wir die Grundkenntnisse der Sprache Python.
Wenn wir auf die vorherigen Kurse zurückblicken, haben wir insgesamt Folgendes gelernt: Mai-Sprache, visuelle Sprache, JavaScript-Sprache, einschließlich der in diesem Abschnitt zu erlernenden Python-Sprache. Einige Freunde haben vielleicht Fragen. Ich bin hier, um quantitativen Handel zu lernen. Warum muss ich so viele Programmiersprachen lernen?
Tatsächlich hat jede Programmiersprache ihre eigenen Sprachmerkmale und es gibt keinen Unterschied zwischen guten und schlechten Sprachen. Es kommt eher darauf an, für welche Programmiersprache sich Ihre Strategie besser eignet und ob diese Programmiersprache zu Ihnen passt. Es gibt ein Sprichwort, das man nur kennen kann, wenn man es selbst probiert. Aus diesem Grund haben wir so viel Platz den Programmiersprachen gewidmet. Wenn Sie Ihre Arbeit gut machen möchten, müssen Sie zuerst Ihre Werkzeuge schärfen.
Gleichzeitig möchten wir die Tür zur quantitativen Forschung für jedermann öffnen und das Wissen über verschiedene Programmiersprachen popularisieren. Quantitative Forschung ist nicht so mysteriös und unerreichbar, wie wir uns das vorstellen. Ich glaube, dass quantitative Forschung in Zukunft populär und für die breite Öffentlichkeit zugänglich sein wird.
Der Prozess des quantitativen Handels besteht lediglich aus dem Erfassen, Analysieren und Berechnen von Daten, Verarbeiten von Daten usw. Im Hinblick auf die Datenanalyse kann keine andere Sprache so gute Berechnungen durchführen und dabei eine so hohe Leistung erbringen wie Python. Insbesondere bei der Verarbeitung von Zeitreihenanalysedaten (K-Linie sind Zeitreihendaten) hat Python den Vorteil, dass es einfacher und bequemer ist. Darüber hinaus ist Python im Vergleich zu anderen Programmiersprachen prägnanter und leichter zu erlernen. Das Lesen eines guten Python-Programms fühlt sich an wie das Lesen von Englisch.
Fünf Gründe, sich für Python zu entscheiden
1. Die quantitative Anwendung ist umfangreich:
Sowohl Quantopian in den USA als auch Inventor Quant in China können die Sprache Python verwenden.
2. Leicht zu erlernen:
Die Designphilosophie von Python ist benutzerzentriert und es ist eine interpretierte Sprache, die leicht zu debuggen ist.
3. Kostenlos und Open Source:
Keine Nutzungskosten, Open-Source-Code-Sharing und verbesserte Lern- und Nutzungseffizienz.
4. Umfangreiche Bibliothek:
Datenverarbeitung, Datenberechnung, Visualisierung, statistische Analyse, technische Analyse, maschinelles Lernen …
5. Anwendungsschnittstelle:
Schnittstellen zum Erfassen, Speichern, Aufrufen und Platzieren von Aufträgen auf Basis von Echtzeit-Marktinformationen der wichtigsten Plattformen.
Damit Sie die wichtigsten Kenntnisse dieses Abschnitts schnell erfassen können, sollten Sie sich vor der Einführung in die quantisierte JavaScript-Sprache des Erfinders zunächst ein grundlegendes Verständnis der Konzepte in diesem Abschnitt aneignen. Betrachten wir als Beispiel die einfachste Strategie mit doppeltem gleitendem Durchschnitt:
Eröffnung einer Long-Position: Wenn keine aktuelle Position vorhanden ist und der gleitende Durchschnitt der 5 Perioden größer ist als der gleitende Durchschnitt der 20 Perioden. Eröffnen Sie eine Short-Position: Wenn keine aktuelle Position vorhanden ist und der gleitende Durchschnitt der 5 Perioden kleiner ist als der gleitende Durchschnitt der 20 Perioden. Schließen einer Long-Position: Wenn Sie derzeit eine Long-Position halten und der gleitende Durchschnitt der 5-Perioden niedriger ist als der gleitende Durchschnitt der 20-Perioden. Schließen von Short-Positionen: Wenn Sie derzeit eine Short-Position halten und der gleitende Durchschnitt der 5-Perioden größer ist als der gleitende Durchschnitt der 20-Perioden.
In Python geschrieben würde es folgendermaßen aussehen:
Abbildung 4-29
Der Code in der obigen Abbildung ist eine vollständige quantitative Handelsstrategie, die in Python geschrieben wurde. Es kann in Echtzeit ausgeführt werden und automatisch Bestellungen aufgeben. In Bezug auf die Codemenge ist Python umfangreicher als JavaScript, da wir das CTA-Handelsframework nicht verwenden.
Der Entwurfsprozess der gesamten Strategie ist jedoch nahezu derselbe: Festlegen von Markttypen, Abrufen von K-Line-Daten, Abrufen von Positionsinformationen, Berechnen der Handelslogik und Platzieren von Kauf- und Verkaufsaufträgen. Mit anderen Worten: Auch wenn die Programmiersyntax unterschiedlich ist, ist die geschriebene Strategielogik dieselbe. Lernen wir also als Nächstes die grundlegende Syntax von Python!
Es gibt zwei Versionen von Python, nämlich Python2 und Python3. Es gab einmal einen Witz, der besagte, dass Python wie eine doppelläufige Waffe sei, aber man kann immer nur einen Lauf verwenden, um Kugeln auf einmal abzufeuern, und man wird nie wissen, welcher genauer ist. Wenn Sie Python noch nicht kennen, empfiehlt es sich, direkt Python 3 zu lernen, da es die neueste Version ist und von der Python-Community gepflegt wird. Unsere Kurse werden auch in Python 3 unterrichtet.
Der Bezeichner ist der Name der Variable, z.B. test, Test, test10,Demo usw. In Python muss bei allem (Variablen, Funktionsnamen und Operatoren) die Groß-/Kleinschreibung beachtet werden. Dies bedeutet, dass der Variablenname „Test“ und der Variablenname „Test“ zwei unterschiedliche Variablen sind. Das erste Zeichen eines Bezeichners (Name einer Variablen, Funktion, Eigenschaft, Funktionsparameter) muss ein Buchstabe, ein Unterstrich (), können die darauf folgenden Zeichen auch Zahlen sein, wie in der folgenden Abbildung gezeigt:
Abbildung 4-30
Ein Kommentar ist eine Übersetzung oder Erklärung einer Codezeile. Die Regeln sind sehr einfach und umfassen einzeilige Kommentare und Kommentare auf Blockebene. Ein einzeiliger Kommentar beginnt mit einem Rautezeichen (#), und ein Blockkommentar beginnt mit drei einfachen Anführungszeichen (“‘) oder drei doppelten Anführungszeichen (”“”) und endet mit drei einfachen Anführungszeichen (“’) oder drei doppelten Anführungszeichen (”“”), wie in der folgenden Abbildung dargestellt:
Abbildung 4-31
Das auffälligste Merkmal von Python ist die Verwendung von Einrückungen zur Kennzeichnung von Codeblöcken, ohne dass geschweifte Klammern {} erforderlich sind. Die Anzahl der Leerzeichen für die Einrückung ist variabel, aber Anweisungen im gleichen Codeblock müssen die gleiche Anzahl von Leerzeichen für die Einrückung enthalten. Wie unten gezeigt: In diesem Fall meldet das Programm einen Fehler. Auch wenn die if-Bedingung erfüllt ist, wird nicht „True“ ausgegeben, da Python vor der Ausführung des Codes automatisch erkennt, ob die Codesyntax korrekt ist. Wenn das Codeformat falsch ist, wird das Programm nicht ausgeführt. Der Grund dafür ist, dass die 5. Codezeile kein einheitliches Codeeinrückungsformat aufweist. Die Einrückung mit vier Leerzeichen ist ein festes Format für Python und jeder muss damit vertraut sein.
Abbildung 4-32
Variablen können beliebige Datentypen speichern. Durch einfaches Schreiben des Namens der Variablen wird die Variable erstellt. Beim Erstellen einer Variablen müssen Sie jedoch gleichzeitig den Wert der Variablen festlegen, da das Programm sonst einen Fehler meldet. Die linke Seite des Gleichheitszeichenoperators (=) ist ein Variablenname und die rechte Seite des Gleichheitszeichenoperators (=) ist der in der Variablen gespeicherte Wert. Wie in der folgenden Abbildung gezeigt: Name2 ist der Variablenname und „Erfinderquantifizierung“ ist der Wert der Variablen. Wenn Sie für name2 keinen neuen Wert festlegen, ist der Wert von name2 immer „Erfinderquantifizierung“.
Abbildung 4-33
Python hat sechs Datentypen, von denen drei unveränderlich und drei veränderbar sind. Wie der Name schon sagt, kann der Wert unveränderlicher Daten nach ihrer Erstellung nicht mehr geändert werden und ihre Adresse im Speicher ist eindeutig; veränderliche Daten sind ein Verweis auf eine Adresse im Speicher und wenn sich ihr Wert ändert, bleibt ihre Speicheradresse unverändert.
Unveränderliche Daten (3): Zahl, Zeichenfolge, Tupel;
Veränderbare Daten (3): Liste, Wörterbuch, Menge.
Abbildung 4-34
Die numerischen Typen von Python unterstützen int (Integer), float (Gleitkomma), bool (Boolescher Wert) und complex (komplexe Zahl). Mit der integrierten Funktion type() kann der Objekttyp abgefragt werden, auf den eine Variable verweist. Wie unten gezeigt:
Abbildung 4-35
Wie bei den meisten Sprachen ist die Mathematik in Python unkompliziert. Ob Rechenoperatoren, Vergleichsoperatoren oder logische Operatoren, es ist alles das Gleiche, was wir in der Schule gelernt haben. Darunter sind arithmetische Operatoren mathematische Operationen der Addition, Subtraktion, Multiplikation und Division. Vergleichsoperatoren können vergleichen, ob zwei Werte kleiner oder kleiner sind. Die wichtigsten logischen Operatoren sind: logisches UND, logisches ODER und logisches NICHT. [Können Sie kurz auf die in Handelsstrategien häufig verwendeten Zeichenfolgen eingehen?] In unseren Handelsstrategien ist beispielsweise die am häufigsten verwendete Zeichenfolge der Produktcode, z. B.: „rb1910“, „MA1910“.
Abbildung 4-36
Dabei ist zu beachten, dass es sich bei „and“ um ein logisches UND handelt, also „und“ bedeutet. „oder“ ist ein logisches ODER, was „entweder“ bedeutet. “!” ist eine logische Negation, die “nein” bedeutet: „und“ bedeutet, dass die letzte Bedingung „wahr“ ist, wenn alle Bedingungen „wahr“ sind; „oder“ bedeutet, dass die letzte Bedingung „wahr“ ist, sofern eine der Bedingungen „wahr“ ist.
Wenn es eine 100 gibt*Welchen Schritt berechnet das Programm zuerst für den Ausdruck (10-1)/(10+5)? Aus der Mittelschulmathematik wissen wir: ① Handelt es sich um eine Operation auf gleicher Ebene, wird grundsätzlich von links nach rechts gerechnet. ② Wenn sowohl Addition und Subtraktion als auch Multiplikation und Division vorliegen, berechnen Sie zuerst die Multiplikation und Division, dann die Addition und Subtraktion. ③Wenn Klammern vorhanden sind, berechnen Sie zuerst den Inhalt der Klammern. ④ Wenn es den Betriebsgesetzen entspricht, können die Betriebsgesetze zur Vereinfachung der Berechnung verwendet werden. Die Priorität der Mai-Sprache ist die gleiche wie unten gezeigt:
Abbildung 4-37
Boolean steht für „wahr“ oder „falsch“ und wird normalerweise in bedingten Urteilen und Schleifenanweisungen verwendet. Python definiert zwei Konstanten „True“ und „False“, um wahr und falsch darzustellen. Tatsächlich kann jedes Objekt in einen Booleschen Typ konvertiert und auch direkt zur bedingten Beurteilung verwendet werden, wie in der folgenden Abbildung dargestellt:
Abbildung 4-38
Zeichenfolgen sind Text. Zeichenfolgen wie „if1905“ werden häufig beim Festlegen von Produktcodes verwendet. Zeichenfolgen werden in Python in einfache Anführungszeichen ‘ oder doppelte Anführungszeichen “ eingeschlossen. Das Pluszeichen + ist der Zeichenfolgenverkettungsoperator. Sie können ein Zeichen in einer Zeichenfolge basierend auf dem Indexwert abrufen, wie unten gezeigt:
Abbildung 4-39
Listen sind der am häufigsten verwendete Datentyp in Python. Sie können sich eine Liste als Container vorstellen, mit dem Unterschied, dass die Elemente im Container von links nach rechts angeordnet sind. Das erste Element ist 0, das zweite Element ist 1 und so weiter. Darüber hinaus können Python-Listen beliebige Datentypen speichern, wie unten gezeigt:
Abbildung 4-40
Funktionen in Python sind im Wesentlichen dieselben wie die Funktionen, die wir in der Mittelschule gelernt haben. Sie können es sich so vorstellen, als ob die Funktion etwas übergibt und etwas ausgibt, wie in der folgenden Abbildung dargestellt:
Abbildung 4-41
Kommen in unserem Leben häufig Aussagen vor, zum Beispiel: Wenn es heute regnet, werde ich einen Regenschirm halten. Das heißt, die Anweisung führt den Code nur aus, wenn die angegebene Bedingung wahr ist. Hinweis: Achten Sie auf das Einrückungsformat des Codes, da sonst ein Python-Fehler generiert wird! Wie in der folgenden Abbildung dargestellt:
Abbildung 4-42
If…else-Anweisungen sind ebenfalls häufig verwendete Anweisungen, z. B.: Wenn es heute regnet, werde ich einen Regenschirm halten, andernfalls werde ich keinen Regenschirm halten. Die else-Anweisung ist eine Erweiterung der if-Anweisung, d. h. der auf else folgende Code wird nur ausgeführt, wenn die angegebene Bedingung „False“ ist. Wie in der folgenden Abbildung dargestellt:
Abbildung 4-43
Da Python keine Switch-Anweisungen unterstützt, kann Python nur Elif-Anweisungen verwenden, um mehrere bedingte Urteile zu implementieren. Beispiel: Wenn die Linie positiv ist, bin ich optimistisch, wenn sie negativ ist, bin ich pessimistisch, andernfalls warte ich ab. Wie in der folgenden Abbildung dargestellt:
Abbildung 4-44
Manchmal müssen wir die K-Line-Daten der letzten Tage abrufen und sie entsprechend der Position der K-Line-Daten nacheinander aus dem K-Line-Array abrufen. Dann ist es sehr praktisch, eine for-Schleife zu verwenden, wie in der folgenden Abbildung dargestellt:
Abbildung 4-45
Wir alle wissen, dass sich der Markt ständig ändert. Wenn Sie das neueste K-Line-Array erhalten möchten, müssen Sie denselben Code immer wieder ausführen. Verwenden Sie dann die whilex-Schleife. Solange die angegebene Bedingung erfüllt ist, kann die Schleife immer das neueste K-Line-Array abrufen.
Abbildung 4-46
Die Schleife hat eine Vorbedingung. Nur wenn die Vorbedingung „wahr“ ist, beginnt die Schleife, etwas wiederholt auszuführen, und die Schleife endet erst, wenn die Vorbedingung „falsch“ ist. Allerdings kann die break-Anweisung während der Ausführung der Schleife sofort aus der Schleife herausspringen, während die continue-Anweisung eine bestimmte Schleife unterbrechen und dann mit der nächsten Schleife fortfahren kann. Wie in der folgenden Abbildung dargestellt:
Abbildung 4-47
Die return-Anweisung beendet die Ausführung einer Funktion und gibt den Wert der Funktion zurück. Die return-Anweisung kann nur im Funktionskörper vorkommen. Wenn sie an einer anderen Stelle im Code vorkommt, führt dies zu einem Syntaxfehler!
Abbildung 4-48
Sie können die Strategiearchitektur als festes Format der Strategie verstehen. Das quantitative Tool des Erfinders verwendet einen Polling-Modus. Das Folgende ist eine klassische Strategiearchitektur für Rohstoff-Futures.
Die Zeilen 4 bis 7 sind die Haupteinstiegsfunktionen des gesamten Programms, d. h. der Computer beginnt mit der Ausführung des Codes ab Zeile 4; dann führt er direkt Zeile 5 aus und tritt in eine Endlosschleife ein; dann werden die Strategielogikfunktion (onTick) und die Ruhefunktion (Sleep) in der Endlosschleife ausgeführt; die Funktion onTick ist der Code in Zeile 1, und Sie können die Strategielogik in Zeile 2 schreiben; wir wissen, dass die Ausführungsgeschwindigkeit des Programms in der Schleife sehr hoch ist, sodass die Verwendung der Ruhefunktion (Sleep) das Programm für eine Weile anhalten kann. Der folgende Code Sleep(500) bedeutet, dass er jedes Mal, wenn die Schleife abgeschlossen ist, für 500 Millisekunden schläft.
Abbildung 4-49
Das Obige ist eine kurze Einführung in die Python-Sprache. Obwohl es sich nur um einfaches Grundwissen handelt, ist es dennoch kein Problem, damit eine einfache quantitative Handelsstrategie zu schreiben. Wenn Sie komplexere Strategien schreiben müssen, können Sie die API-Dokumentation des Inventor Quantitative Tool in der Python-Sprache zu Rate ziehen.
Unter den Trendstrategien im Bereich der technischen Analyse sind der gleitende Durchschnitt und der Kanaldurchbruch zweifellos die beiden wichtigsten Schulen. Obwohl das Ziel darin besteht, den Trend der Preisbewegungen zu erfassen, sind die Handelsphilosophien und Risikomerkmale dieser beiden Strategien völlig unterschiedlich. Nachdem Sie in diesem Abschnitt eine Einführung in die Python-Sprache erhalten haben, zeigen wir Ihnen im nächsten Abschnitt, wie Sie eine quantitative Handelsstrategie für den Kanaldurchbruch schreiben.
Im vorherigen Artikel haben wir die Einführung, die grundlegende Syntax, das Strategie-Framework usw. der Sprache Python gelernt. Obwohl der Inhalt langweilig ist, handelt es sich dabei um eine wesentliche Fähigkeit zur Umsetzung Ihrer Handelsstrategie, und Sie müssen sie erlernen. In diesem Artikel werden wir das Eisen schmieden, solange es heiß ist, und mit den grundlegenden Python-Kenntnissen des vorherigen Artikels weitermachen. Wir werden mit einer einfachen Strategie beginnen, lernen, während wir sie anwenden, und jedem dabei helfen, Schritt für Schritt eine praktikable quantitative Handelsstrategie umzusetzen.
Unter den vielen Handelsstrategien dürfte die Donchian Channel-Strategie eine der klassischsten Durchbruchstrategien sein. Sie war bereits 1970 bekannt. Damals führte ein ausländisches Unternehmen Simulationstests und Untersuchungen zu gängigen Programmhandelsstrategien durch. Die Ergebnisse zeigten dass die Donchian-Channel-Strategie unter allen Strategietests die erfolgreichste war.
Später fand in den USA die berühmteste „Turtle“-Trader-Ausbildung der Trading-Geschichte statt, die zu großem Erfolg führte. Zu dieser Zeit wurden die Handelsmethoden der „Turtles“ geheim gehalten, aber mehr als zehn Jahre später, als die „Turtle Trading Rules“ veröffentlicht wurden, entdeckten die Leute, dass die „Turtles“ eine verbesserte Version des Donchian Channel verwendeten Strategie.
Durchbruchshandelsstrategien eignen sich für Handelsprodukte mit relativ gleichmäßigen Trends. Die gängigste Durchbruchshandelsmethode besteht darin, die relative Positionsbeziehung zwischen Preis und Unterstützung und Widerstand zu nutzen, um bestimmte Handelskauf- und -verkaufspunkte zu bestimmen. Die Donchian-Channel-Strategie in diesem Abschnitt basiert auf diesem Prinzip.
Donchian Channel ist ein Trendindikator und sein Erscheinungsbild und seine Signale ähneln etwas dem Bollinger Band-Indikator. Der Preiskanal von Donchian basiert jedoch auf den höchsten und niedrigsten Preisen innerhalb eines bestimmten Zeitraums. Beispiel: Berechnen Sie den Maximalwert des höchsten Preises der letzten 50 K-Linien, um die obere Spur zu bilden; berechnen Sie den Minimalwert des niedrigsten Preises der letzten 50 K-Linien, um die untere Spur zu bilden. Dieser Indikator besteht aus drei Kurven in unterschiedlichen Farben. Standardmäßig werden die höchsten und niedrigsten Preise innerhalb von 20 Perioden verwendet, um die Volatilität der Marktpreise anzuzeigen. Ein schmaler Kanal bedeutet, dass die Marktvolatilität gering ist. Umgekehrt bedeutet ein breiter Kanal, dass die Marktvolatilität relativ groß ist.
Steigt der Kurs über die obere Linie, handelt es sich um ein Kaufsignal; fällt der Kurs hingegen unter die untere Linie, handelt es sich um ein Verkaufssignal. Da die oberen und unteren Spuren anhand der höchsten und niedrigsten Preise berechnet werden, steigen und fallen die Preise unter normalen Umständen selten gleichzeitig über die oberen und unteren Kanallinien. In den meisten Fällen bewegen sich die Preise einseitig entlang der oberen oder unteren Spur oder zwischen der oberen und unteren Spur.
Im Inventor Quantitative Tool ist die Berechnungsmethode des Donchian Channel sehr einfach. Sie können sie direkt verwenden, um den höchsten oder niedrigsten Preis innerhalb des angegebenen Zeitraums zu ermitteln, wie in der folgenden Abbildung dargestellt: Die 5. Zeile dient zum Ermitteln des Maximalwerts des höchsten Preises von 50 Zeiträumen und die 6. Zeile zum Ermitteln des Minimalwerts des niedrigsten Preises von 50 Zeiträumen.
Abbildung 4-50
Es gibt viele Möglichkeiten, den Donchian Channel zu nutzen. Er kann allein oder in Kombination mit anderen Indikatoren verwendet werden. In diesem Kurs verwenden wir die einfachste Methode. Das heißt, wenn der Preis die obere Spur von unten nach oben durchbricht, das heißt, die obere Drucklinie durchbricht, glauben wir, dass die bullische Kraft stärker wird, eine Welle steigender Märkte gebildet wurde und ein Kauf-Eröffnungssignal vorliegt wird generiert; wenn der Preis von oben nach unten fällt und die untere Linie durchbricht, d. h. wenn er unter die Unterstützungslinie fällt, glauben wir, dass die Short-Seite stärker wird, ein Abwärtstrend gebildet wurde und eine Verkaufseröffnung Signal wird erzeugt.
Abbildung 4-51
Wenn der Preis nach dem Öffnen einer Long-Position auf die mittlere Spur des Donchian-Kanals zurückfällt, glauben wir, dass die Bullen schwächer werden oder die Bären stärker werden, und es wird ein Ausverkaufssignal generiert; wenn der Preis auf die Mitte zurückfällt Wenn der Kurs nach dem Öffnen einer Short-Position auf der Spur des Donchian-Kanals ansteigt, glauben wir, dass die Bullen schwächer werden oder die Bären stärker werden, und es wird ein Ausverkaufssignal generiert. Wenn der Kurs wieder auf die mittlere Spur des Donchian-Kanals ansteigt, glauben wir, dass Die Stärke der Bären lässt nach oder die Stärke der Bullen nimmt zu, und es wird ein Buy-to-Close-Signal generiert.
Handelsbedingungen Eröffnung einer Long-Position: Wenn keine Position besteht und der Schlusskurs über dem oberen Kurs liegt Eröffnen Sie eine Short-Position: Wenn keine Position besteht und der Schlusskurs unter dem unteren Kurswert liegt Schließen einer Long-Position:Wenn Sie eine Long-Order halten und der Schlusskurs unter dem Mittelkurs liegt Schließen von Short-Positionen:Wenn Sie eine Short-Order halten und der Schlusskurs höher ist als der Mittelkurs
Der erste Schritt zur Umsetzung einer Strategie besteht darin, Daten zu beschaffen, denn Daten sind eine Voraussetzung für eine Handelsstrategie. Stellen Sie sich vor, welche Daten wir benötigen? Und wie erhält man diese Daten? Anschließend entwerfen wir die Handelslogik auf Grundlage dieser Daten und erteilen schließlich Kauf- und Verkaufsaufträge gemäß der Handelslogik. Die einzelnen Schritte sind wie folgt:
Sie können sich die Handelsbibliothek als funktionales Modul vorstellen. Der Vorteil der Verwendung der Handelsbibliothek besteht darin, dass Sie sich auf das Schreiben der Strategielogik konzentrieren können. Beispiel: Wenn wir die Handelsbibliothek verwenden und Positionen öffnen und schließen, können wir die Auftrags-API in der Handelsbibliothek direkt verwenden. Wenn wir die Handelsbibliothek jedoch nicht verwenden, müssen wir beim Öffnen und Schließen von Positionen den Marktpreis ermitteln und das Problem der Platzierung von Aufträgen, die nicht ausgeführt werden, berücksichtigen, das Problem der Stornierung von Aufträgen berücksichtigen usw.
Abbildung 4-52
Das obige Bild zeigt den CTA-Strategierahmen unter Verwendung der quantitativen Tools des Erfinders. Dies ist ein festes Codeformat, und alle Transaktionslogikcodes werden ab Zeile 4 geschrieben. An anderer Stelle sind keine Änderungen erforderlich.
Die Vorlagenbibliothek von JavaScript ist integriert. Python muss diese Vorlage kopieren und speichern: https://www.fmz.com/strategy/24288. Klicken Sie dann auf der Seite zur Richtlinienbearbeitung auf „Referenz“. Natürlich können Sie die Strategie auch ohne Verwendung der Vorlagenbibliothek absolvieren.
Überlegen Sie genau, welche Daten Sie benötigen? Aus unserer Strategiehandelslogik haben wir Folgendes herausgefunden: Zuerst müssen wir den aktuellen Positionsstatus ermitteln, dann die Beziehung zwischen dem Schlusskurs und den oberen, mittleren und unteren Spuren des Bollinger-Band-Indikators vergleichen und schließlich feststellen, ob der Markt kurz vor der Schließung steht. Holen wir uns also diese Daten.
Der erste Schritt besteht darin, das K-Line-Array und den aktuellen K-Line-Schlusskurs abzurufen. Nur mit dem K-Line-Array können wir die API aufrufen, um den höchsten oder niedrigsten Kurs von N Perioden abzurufen. So sieht es im Code aus:
Abbildung 4-53
Wie in der Abbildung oben gezeigt:
Zeile 4: Holen Sie sich das K-Line-Array, das ein festes Format hat.
Zeile 5: Filtern Sie die Länge der K-Linie. Da wir den höchsten oder niedrigsten Preis von N Perioden berechnen, ist der verwendete Parameter 50. Wenn die Anzahl der K-Linien kleiner als 50 ist, kann sie nicht berechnet werden. Daher müssen wir hier die Länge der K-Linie filtern. Wenn es weniger als 50 K-Linien gibt, überspringen Sie diese Schleife und warten Sie weiter auf die nächste K-Linie.
Zeile 6: Wir verwenden den Code „records[len(records) - 1]” ruft zuerst die letzten Daten des K-Line-Arrays ab, also die neuesten K-Line-Daten. Diese Daten sind ein Objekt, das enthält: Eröffnungskurs, Höchstkurs, Tiefstkurs, Schlusskurs, Handelsvolumen, Zeit und andere Daten. Da es sich um ein Objekt handelt, können wir „.Close“ direkt verwenden, um den neuesten K-Line-Schlusskurs abzurufen.
Positionsinformationen sind eine sehr wichtige Voraussetzung für quantitative Handelsstrategien. Wenn die Handelsbedingungen erfüllt sind, muss auch anhand des Positionsstatus und der Anzahl der Positionen bestimmt werden, ob eine Bestellung aufgegeben werden soll. Beispiel: Wenn die Bedingungen zum Eröffnen einer Kaufposition erfüllt sind und Sie eine Position haben, müssen Sie keine erneute Bestellung aufgeben; wenn Sie keine Position haben, können Sie eine Bestellung aufgeben. Dieses Mal kapseln wir die Positionsinformationen direkt in eine Funktion und können sie verwenden, indem wir einfach diese Funktion aufrufen:
Abbildung 4-54
Wie in der Abbildung oben gezeigt: Dies ist eine Funktion, die Positionsinformationen abruft. Wenn es sich um eine Short-Position handelt, gibt sie 0 zurück; wenn es sich um eine Long-Position handelt, gibt sie 1 zurück; wenn es sich um eine Short-Position handelt, gibt sie -1 zurück. Beachten Sie den obigen Code: Zeile 2: Erstellen Sie eine Funktion namens mp, die keine Parameter hat. Zeile 3: Holen Sie sich das Positions-Array, das ein festes Format hat. Zeile 4: Bestimmen Sie die Länge des Positionsarrays. Wenn seine Länge gleich ist, muss es sich um eine leere Position handeln. Geben Sie daher 0 zurück. Zeile 6: Verwenden Sie eine For-Schleife, um mit dem Durchlaufen des Arrays zu beginnen. Die folgende Logik ist sehr einfach. Wenn Sie eine Long-Position halten, wird 1 zurückgegeben; wenn Sie eine Short-Position halten, wird -1 zurückgegeben. Zeile 18: Rufen Sie die Funktion mp auf, die wir gerade geschrieben haben, um die Positionsinformationen zu erhalten.
Im Inventor Quantitative Tool können Sie diesen Wert mithilfe der Funktionen „TA.Highest“ und „TA.Lowest“ direkt ermitteln, ohne die logischen Berechnungen selbst schreiben zu müssen. Und die von den Funktionen „TA.Highest“ und „TA.Lowest“ zurückgegebenen Ergebnisse sind konkrete Werte und keine Arrays. Das ist sehr praktisch. Darüber hinaus verfügt der Beamte über integrierte Hunderte von Anzeigefunktionen.
Abbildung 4-55
Wie in der Abbildung oben gezeigt: Zeile 19: Rufen Sie die Funktion „TA.Highest“ auf, um den Maximalwert des höchsten Preises in 50 Perioden zu erhalten Zeile 20: Rufen Sie die Funktion „TA.Lowest“ auf, um den Mindestwert des niedrigsten Preises in 50 Perioden zu erhalten Zeile 21: Berechnen Sie den Durchschnittswert basierend auf dem Maximalwert des höchsten Preises in 50 Perioden und dem Minimalwert des niedrigsten Preises in 50 Perioden
Mit den oben genannten Daten können Sie die Handelslogik und den Code zum Platzieren von Aufträgen schreiben. Das Format ist ebenfalls sehr einfach. Am häufigsten wird die „if-Anweisung“ verwendet, die in Worten wie folgt beschrieben werden kann: Wenn Bedingung 1 und Bedingung 2 erfüllt sind, geben Sie eine Bestellung auf; wenn Bedingung 3 oder Bedingung 4 erfüllt ist, geben Sie eine Bestellung auf.
Abbildung 4-56
Wie in der Abbildung oben gezeigt: Zeile 22: Verwenden Sie die Transaktionsbibliothek, die ein festes Format hat Zeilen 23 und 24: Dies ist eine Anweisung zum Schließen einer Long-Position, die die zuvor gelernten „Vergleichsoperatoren“ und „logischen Operatoren“ verwendet. Das bedeutet, dass alle Positionen geschlossen werden, wenn Sie derzeit eine Long-Position halten und der Schlusskurs unter dem Mittelwert liegt. Zeilen 25 und 26: Dies ist eine Anweisung zum Schließen einer Short-Order, die die zuvor erlernten „Vergleichsoperatoren“ und „logischen Operatoren“ verwendet. Das bedeutet, dass alle Positionen geschlossen werden, wenn Sie derzeit eine Short-Order halten und der Schlusskurs über dem Mittelwert liegt. Zeile 27: Bestimmen Sie den aktuellen Positionsstatus. Wenn die Position knapp ist, fahren Sie mit dem nächsten Schritt fort. Zeilen 28 und 29: Bestimmen Sie, ob der Schlusskurs höher ist als der obere Kurs. Wenn der Schlusskurs über den oberen Kurs steigt, kaufen Sie, um eine Position zu eröffnen. Zeilen 30 und 31: Bestimmen Sie, ob der Schlusskurs unter dem unteren Kurs liegt. Wenn der Schlusskurs unter den unteren Kurs fällt, verkaufen Sie und eröffnen Sie eine Position.
Oben haben wir jeden Schritt zur Entwicklung einer vollständigen quantitativen Handelsstrategie mit Python gelernt, einschließlich: Strategieeinführung, Berechnungsmethode des Donchian-Kanals, Strategielogik, Kauf- und Verkaufsbedingungen, Implementierung des Strategiecodes usw. Dieser Abschnitt ist nur eine einfache Strategie als Ausgangspunkt. Es gibt mehr als eine Methode. Sie können verschiedene Handelsmethoden entsprechend Ihrem eigenen Handelssystem übereinanderlegen, um Ihre eigene quantitative Handelsstrategie zu entwickeln.
Wenn wir bei der Entwicklung quantitativer Handelsstrategien aus der Perspektive der Ausführungsgeschwindigkeit der Programmiersprache fragen, welche Sprache die schnellste ist, kann es nur C++ sein. Insbesondere im Bereich der Derivate und des Hochfrequenzhandels weist C++ einzigartige sprachliche Besonderheiten und Vorteile bei numerischen Berechnungen auf. Seine Geschwindigkeit kann im Vergleich zu JavaScript und Python um mehrere Größenordnungen gesteigert werden. Wenn Sie sich in Zukunft im Bereich der Derivate und des Hochfrequenzhandels weiterentwickeln möchten, ist dieser Kurs ein Muss für Sie.
Backtesting stellt den größten Unterschied zwischen quantitativem und traditionellem Handel dar. Basierend auf realen Marktdaten, die in der Vergangenheit aufgetreten sind, werden schnell das Auslösen von Strategiesignalen und entsprechende Transaktionen simuliert, um über einen bestimmten Zeitraum Leistungsberichte und andere Daten zu erhalten. Es ist einer der wichtigsten Bestandteile der Strategieentwicklung für in- und ausländische Aktien-, Rohstoff-Futures-, Devisen- und andere Märkte.
In den vorherigen Kapiteln haben wir die Grundlagen der gängigen Programmiersprachen erlernt und Ihnen gezeigt, wie Sie diese Programmiergrundlagen nutzen können, um einige einfache Handelsstrategien zu schreiben. Man kann sagen, dass wir bereits mehr als die Hälfte des langen Marsches hinter uns haben. Ist eine Strategie jedoch erst einmal geschrieben, kann sie nicht direkt in die Praxis umgesetzt werden. Es bedarf weiterhin kontinuierlicher Backtests – Debugging – Backtests – Debugging – und so weiter, bis die Strategie den Modellinhalt vollständig umsetzen und reibungslos laufen kann.
Aus der Perspektive der quantitativen Handelslogik basieren Strategien tatsächlich auf einer Reihe von Erkenntnissen und Annahmen über den Markt. Durch Backtesting lässt sich effizient feststellen, ob diese Annahmen gültig und stabil sind. Welche Verluste in historisch instabilen Zeiten auftreten können und wie man bei der Entscheidungsfindung zur Vermeidung dieser Verluste helfen kann.
Darüber hinaus kann Backtesting aus der Perspektive des quantitativen Handelsbetriebs dabei helfen, Fehler in der Strategielogik zu erkennen, wie etwa zukünftige Funktionen, Preisdiebstahl, Multi-Fitting usw. Liefern Sie zuverlässige Beweise dafür, dass die Strategie im realen Handel eingesetzt werden kann.
Daher besteht die Bedeutung des Backtestings darin, den tatsächlichen Handelsprozess durch historische Daten so realistisch wie möglich wiederherzustellen, die Wirksamkeit der Strategie zu überprüfen, zu vermeiden, einen hohen Preis für falsche Strategien zu zahlen und uns dabei zu helfen, Handelsstrategien zu prüfen, zu verbessern und zu optimieren.
Handelsstrategien werden auf der Grundlage statischer historischer Daten einem Backtest unterzogen. Die tatsächlichen Transaktionsdaten sind dynamisch. Beispiel: Wenn der Höchstkurs höher ist als der Schlusskurs von gestern, dann kaufen Sie, um eine Position zu eröffnen. Wenn im realen Handel die K-Linie noch nicht abgeschlossen ist, ist der Höchstpreis dynamisch und das Handelssignal kann hin und her blinken. Während des Backtestings kann die Backtesting-Engine passende Transaktionen auf Basis statischer historischer Daten simulieren.
Bei der Future-Funktion werden zukünftige Preise verwendet, so dass sich die aktuellen Konditionen in der Zukunft ändern können. Die Future-Funktion kann auch ein Blinken der Signale auslösen. Daher besitzt jede Funktion die Eigenschaften einer Zukunftsfunktion, wie beispielsweise die „Zickzack-Funktion“.
Wie in der folgenden Abbildung dargestellt: Die ZigZag-Funktion zeigt die Wendepunkte von Spitzen und Tälern an. Sie kann ihren Wert entsprechend dem neuesten Echtzeitpreis anpassen. Wenn sich jedoch der aktuelle Preis ändert, ändert sich auch das von der ZigZag-Funktion berechnete Ergebnis. Wenn eine Funktion mit einer Zukunftsfunktion verwendet wird, wird möglicherweise das aktuelle Auftragssignal erstellt und der Auftrag erteilt, das Signal wird jedoch möglicherweise nach einer Weile nicht erstellt.
Abbildung 5-1
Beim sogenannten Preisdiebstahl handelt es sich um die Verwendung von Preisen aus der Vergangenheit für Handelsgeschäfte. Beispiel: Wenn der höchste Preis höher ist als ein Festpreis, kaufen Sie zum Eröffnungspreis. Unter dieser Bedingung versteht man Preisdiebstahl, denn auf dem tatsächlichen Markt ist es so, dass, wenn der Höchstpreis über einem bestimmten Preis liegt, der Preis bereits eine gewisse Strecke über dem Eröffnungspreis liegt und zu diesem Zeitpunkt nicht zum Eröffnungspreis gekauft werden kann. Im Backtest liegt jedoch ein Kaufsignal vor und die Transaktion kann abgeschlossen werden.
Es gibt noch eine andere Situation. Wenn der Preis höher springt und höher eröffnet als der von der Strategie festgelegte Festpreis, kann die Transaktion beim Backtesting zum Festpreis abgeschlossen werden, aber dieser Festpreis ist auf dem tatsächlichen Markt offensichtlich nicht verfügbar.
Es gibt mehrere Situationen, in denen Preise nicht gehandelt werden können: Erstens: Im tatsächlichen Handel können Sie grundsätzlich nicht kaufen, wenn der Preis die Obergrenze erreicht, und umgekehrt. Allerdings ist ein Handel im Backtest möglich.
Der zweite Typ: Der Austauschanpassungsmechanismus ist: Preispriorität und Zeitpriorität. Einige Sorten haben oft riesige Aufträge zum Marktpreis. Wenn Sie während des realen Handels einen Kauf- oder Verk