
Eine Zeitreihe ist eine Abfolge von Daten, die in aufeinanderfolgenden, gleichmäßig verteilten Zeiträumen erfasst werden. Beim quantitativen Investieren manifestieren sich diese Daten hauptsächlich als Preisbewegungen und Datenpunkte der verfolgten Anlageziele. Beispielsweise können Aktienkurse und Zeitreihendaten, die über einen bestimmten Zeitraum regelmäßig aufgezeichnet wurden, in der folgenden Abbildung angezeigt werden, die dem Leser ein klareres Verständnis vermittelt:

Wie Sie sehen, befindet sich das Datum auf der X-Achse und der Preis auf der Y-Achse. „Aufeinanderfolgende Intervalle“ bedeutet in diesem Fall, dass zwischen den Tagen auf der x-Achse ein Abstand von 14 Tagen besteht: Beachten Sie den Unterschied zwischen dem 7. März 2005 und dem nächsten Punkt, dem 31. März 2005, sowie dem 5. und 19. April 2005.
Wenn Sie jedoch mit Zeitreihendaten arbeiten, sehen Sie häufig mehr als nur Datums- und Preisspalten. Meistens arbeiten Sie mit Daten, die fünf Spalten enthalten: Datenzeitraum, Eröffnung, Hoch, Tief und Schluss. Dies bedeutet, dass, wenn Ihr Datenzeitraum auf die Tagesebene eingestellt ist, die Höchst-, Eröffnungs-, Tiefst- und Schlusskursänderungen des Tages in den Daten dieser Zeitreihe widergespiegelt werden.
Tick-Daten sind die detaillierteste Transaktionsdatenstruktur der Börse. Es handelt sich außerdem um eine erweiterte Form der oben genannten Zeitreihendaten, einschließlich: Eröffnungskurs, Höchstkurs, Niedrigstkurs, letzter Kurs, Handelsvolumen und Transaktionsbetrag. Wenn Handelsdaten mit einem Fluss verglichen werden, sind Tick-Daten die Daten des Flusses an einem bestimmten Querschnitt.

Wie in der obigen Abbildung dargestellt, wird jede Aktion der Devisenbörsen in Echtzeit auf den Markt übertragen. Inländische Börsen prüfen zweimal pro Sekunde. Wenn während dieser Zeit eine Aktion stattfindet, wird ein Snapshot erstellt und veröffentlicht. Im Vergleich dazu kann Data Push bestenfalls als OnTime betrachtet werden und nicht als OnTick.
Alle Codes und Zeitreihendaten für dieses Tutorial werden auf der Inventor Quantitative Platform bezogen.
Obwohl es sich bei inländischen Tick-Daten nicht um echte Ticks handelt, kann die Verwendung dieser Daten für Backtestings der Realität zumindest unendlich nahe kommen und diese wiederherstellen. Jeder Tick zeigt die Hauptparameter des Produkts auf dem Markt zu diesem Zeitpunkt an, und auf dem tatsächlichen Markt wird unser Code entsprechend der theoretischen Tickrate von 2 Mal pro Sekunde berechnet.

Darüber hinaus können Sie in Inventor Quantification auch dann die Datengranularität anpassen, wenn Sie Daten für einen Zeitraum von einer Stunde laden, z. B. auf eine Minute. Derzeit besteht die 1-Stunden-K-Linie aus 1-Minuten-Daten. Natürlich ist die Genauigkeit umso höher, je kleiner die Partikelgröße ist. Noch leistungsfähiger ist, dass Sie die Echtzeitumgebung nahtlos wiederherstellen können, wenn Sie die Daten auf Echtzeit-Ticks umstellen. Das heißt, die realen Daten der Börse werden zweimal pro Sekunde getickt.

Sie verfügen jetzt über ein Verständnis der grundlegenden Konzepte, die Sie zum Abschließen dieses Lernprogramms kennen müssen. Wir werden in Kürze auf diese Konzepte zurückkommen. Später in diesem Tutorial erfahren Sie mehr darüber.
Weitere Informationen zu diesem Teil finden Sie unter: https://www.fmz.com/bbs-topic/1651
Um seine Arbeit gut zu machen, muss man zuerst seine Werkzeuge schärfen. Wir müssen einen Custodian auf der Inventor Quantitative Platform bereitstellen. Was das Konzept eines Custodian betrifft, können Leser mit Programmiererfahrung es sich als offiziell gepacktes Docker-System vorstellen. Das System hat kapselte die öffentlichen API-Schnittstellen verschiedener Mainstream-Börsen und die ausführlichen technischen Details zum Schreiben von Strategien und zum Backtesting. Die ursprüngliche Absicht bei der Einführung dieses Systems besteht darin, quantitative Händler von der Notwendigkeit zu entlasten, sich bei der Verwendung der Inventor Quantitative Platform auf das Schreiben und Entwerfen von Strategien zu konzentrieren. Diese technischen Details werden den Strategieautoren in einer gebündelten Form präsentiert, um ihnen die Mühe zu ersparen, eine Menge Zeit und Energie.
Es gibt zwei Möglichkeiten, den Host bereitzustellen:
Methode A: Benutzer mieten oder kaufen selbst Server und setzen sie auf großen Cloud-Computing-Plattformen wie AWS, Alibaba Cloud, Digital Ocean und Google Cloud ein. Der Vorteil besteht darin, dass sowohl die Strategiesicherheit als auch die Systemsicherheit gewährleistet sind. Für die Inventor Quantitative Platform wird den Benutzern empfohlen, diese Methode zu verwenden. Eine solche verteilte Bereitstellung eliminiert das Risiko von Serverangriffen (sei es für Kunden oder die Plattform selbst).
Für diesen Teil können sich die Leser hier informieren: https://www.fmz.com/bbs-topic/2848
Methode B: Verwenden Sie die öffentliche Serverbereitstellung der Inventor Quantitative Platform. Die Plattform bietet Bereitstellungen in Hongkong, London und Hangzhou. Benutzer können die Bereitstellung nach dem Näherungsprinzip basierend auf dem Standort der Börse durchführen, an der sie handeln möchten. Der Vorteil dieses Aspekts besteht darin, dass es einfach und unkompliziert ist und mit einem Klick abgeschlossen werden kann. Es ist besonders für Anfänger geeignet. Sie müssen beim Kauf eines Linux-Servers nicht viele Dinge verstehen und sparen außerdem Zeit und Energie beim Erlernen von Linux-Befehlen. Der Preis ist auch relativ günstig, was für Benutzer mit kleinen Mitteln geeignet ist. Benutzern empfiehlt die Plattform die Verwendung dieser Bereitstellungsmethode.

Um das Verständnis von Anfängern zu gewährleisten, wird in diesem Artikel Methode B angewendet.
Die konkreten Vorgänge sind: Melden Sie sich bei FMZ.COM an, klicken Sie auf Kontrollzentrum, Host und dann auf der Host-Seite auf Host-Miete mit einem Klick.
Geben Sie das Passwort ein. Nach erfolgreicher Bereitstellung wird folgende Abbildung angezeigt:

Wie oben erwähnt, ist der Host wie ein Docker-System und ein Docker-System wie ein Satz von Standards. Nachdem wir diesen Satz von Standards bereitgestellt haben, müssen wir eine „Instanz“ für diesen Standard generieren, und diese „Instanz“ ist eine Roboter.
Es ist ganz einfach, einen Roboter zu erstellen. Klicken Sie nach der Bereitstellung des Hosts auf die Roboterspalte links, klicken Sie auf „Roboter erstellen“, geben Sie einen Namen in das Beschriftungsfeld ein und wählen Sie den Host aus, den Sie gerade unter den Hosting-Hosts bereitgestellt haben. Die Parameterauswahl und der K-Line-Zeitraum im Dialogfeld unten können je nach der jeweiligen Situation ausgewählt werden, hauptsächlich um mit der Auswahl der Handelsstrategie zusammenzuarbeiten.

An diesem Punkt ist unsere Arbeitsumgebung eingerichtet. Wie Sie sehen, ist sie sehr einfach und effektiv und jede Funktion erfüllt ihre eigene Funktion. Als nächstes beginnen wir mit dem Schreiben quantitativer Strategien.
Oben haben wir die Konzepte von Zeitreihendaten und Tickdaten erwähnt. Als Nächstes verwenden wir eine einfache gleitende Durchschnittsstrategie, um diese beiden Konzepte zu verknüpfen.
Durch einen gleitenden Durchschnitt mit langsamer Periode, wie etwa den 7-Tage-Durchschnitt, und einen gleitenden Durchschnitt mit schneller Periode, wie etwa den 3-Tage-Durchschnitt. Wenden wir sie auf dasselbe K-Linien-Diagramm an und wenn der schnelle gleitende Durchschnitt den langsamen gleitenden Durchschnitt kreuzt, nennen wir dies ein „Goldenes Kreuz“, wenn der langsame gleitende Durchschnitt den schnellen gleitenden Durchschnitt kreuzt, nennen wir dies ein „Todeskreuz“.
Die Grundlage für das Eröffnen einer Position besteht darin, eine Long-Order zu eröffnen, wenn das goldene Kreuz erscheint, und eine Short-Order zu eröffnen, wenn das goldene Kreuz erscheint. Dasselbe Prinzip gilt für das Schließen einer Position.
Öffnen wir FMZ.COM, melden uns beim Konto, im Kontrollzentrum und in der Strategiebibliothek an, erstellen eine neue Strategie und wählen Python in der Strategieschreibsprache in der oberen linken Ecke aus. Nachfolgend sehen Sie den Code für diese Strategie. Jede Zeile enthält sehr ausführliche Kommentare. Bitte nehmen Sie sich die Zeit, diese zu lesen. Bei dieser Strategie handelt es sich nicht um eine Live-Strategie, experimentieren Sie also bitte nicht mit echtem Geld. Sie soll vor allem jedem einen allgemeinen Einblick in das Strategieschreiben und eine Lernvorlage geben.
import types # 导入Types模块库,这是为了应对代码中将要用到的各种数据类型
def main(): # 主函数,策略逻辑从这里开始
STATE_IDLE = -1 # 标记持仓状态变量
state = STATE_IDLE # 标记当前持仓状态
initAccount = ext.GetAccount() #这里用到了现货数字货币交易类库(python版),编写策略时记得勾选上,作用是获得账户初始信息
while True: # 进入循环
if state == STATE_IDLE : # 这里开始开仓逻辑
n = ext.Cross(FastPeriod,SlowPeriod) # 这里用到了指标交叉函数,详情请查看https://www.fmz.com/strategy/21104
if abs(n) >= EnterPeriod : # 如果n大于等于入市观察期,这里的入市观察期是为了防止一开盘就胡乱开仓。
opAmount = _N(initAccount.Stocks * PositionRatio,3) # 开仓量,关于_N的用法,请查看官方API文档
Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # 建立一个变量,用于存储开仓状态,并执行开仓操作
if Dict : # 查看dict变量的情况,为下面的日志输出做准备
opAmount = Dict['amount']
state = PD_LONG if n > 0 else PD_SHORT # PD_LONG和PD_SHORT均为全局常量,分别用来表示多头和空头仓位。
Log("开仓详情",Dict,"交叉周期",n) # 日志信息
else: # 这里开始平仓逻辑
n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # 指标交叉函数,
if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # 如果经过了离市观察期且当前账户状态为持仓状态,进而判断金叉或者死叉
nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # 平仓逻辑,是多头就平多头,是空头就平空头。
state = STATE_IDLE # 标记平仓后持仓状态。
nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
LogProfit(nowAccount.Balance - initAccount.Balance,'钱:',nowAccount.Balance,'币:',nowAccount.Stocks,'平仓详情:',Dict2,'交叉周期:',n) # 日志信息
Sleep(Interval * 1000) # 循环暂停一秒,防止API访问频率过快导致账户被限制。
Auf der Seite zur Strategiebearbeitung haben wir das Schreiben der Strategie abgeschlossen. Als nächstes müssen wir diese Strategie einem Backtest unterziehen, um zu sehen, wie sie sich unter historischen Marktbedingungen verhält. Backtests spielen eine wichtige Rolle bei der Entwicklung jeder quantitativen Strategie, aber sie sind auch nur kann als wichtige Referenz dienen. Backtesting bedeutet keine Gewinngarantie, denn der Markt verändert sich ständig. Backtesting ist nur ein Akt der Nachbetrachtung und gehört noch zur Kategorie der Induktion. Der Markt ist deduktiv.
Klicken Sie auf den simulierten Backtest, und Sie können sehen, dass es viele anpassbare Parameter gibt, die direkt darin geändert werden können. Da die Strategie immer komplexer wird und die Anzahl der Parameter zunimmt, kann diese Änderungsmethode den Benutzern helfen, zu vermeiden, Ändern Sie sie einzeln im Code. Der Änderungsprozess ist problemlos, schnell und einfach und übersichtlich organisiert.

Die nachfolgenden Tuning-Optionen können die eingestellten Parameter automatisch optimieren. Das System probiert verschiedene optimale Parameter aus, um Strategieentwicklern dabei zu helfen, die beste Wahl zu treffen.
Aus den obigen Beispielen können wir erkennen, dass die Grundlage des quantitativen Handels die Interaktion zwischen der Analyse von Zeitreihendaten und dem Backtesting von Tick-Daten ist. Egal wie komplex die Logik ist, sie ist untrennbar mit diesen beiden Grundelementen verbunden. Der Unterschied liegt lediglich in der Dimension. Beispielsweise erfordert der Hochfrequenzhandel detailliertere Datenabschnitte und reichhaltigere Zeitreihendaten. Beispielsweise erfordert der Arbitragehandel relativ viele Daten für Backtest-Stichproben. Es können mehr als zehn Jahre kontinuierlicher detaillierter Daten zu zwei Handelszielen erforderlich sein, um die statistischen Ergebnisse der Ausweitung und Verengung ihrer Zinsspannen zu ermitteln. In zukünftigen Artikeln werde ich Hochfrequenzhandel und Arbitragehandelsstrategien vorstellen, also bleiben Sie dran.