Sich entwickelnde Handelssysteme

Die KI kommt und wir haben keine Angst davor. Ich schlage vor, ihn zu rätseln, indem ich an der Börse Kohl verdiene. Für den Anfang werden wir sehen.

Bedingungen


Ein Agent ist ein Programm, das Konten in verschiedenen Währungen an einer Börse hat, deren Arbeit zu einer Erhöhung ihres Gesamtwerts führen sollte.

Agent Asset - eine Liste von Konten mit der Verfügbarkeit von Geldern auf ihnen A = [A1, A2, ..] wobei A1, A2, ... der Betrag in der entsprechenden Währung.

Vermögenswert. Wir müssen ein universelles Maß für den Vermögenswert haben, mit dem wir den Vermögenswert messen können. Nehmen Sie an, dass dies $ ist. Ein $ (Konto) ist Teil des Vermögenswerts. Wir gehen auch davon aus, dass wir einen Algorithmus haben, mit dem wir den Wert jedes Kontos in der Liste über $ schätzen können.

Ein Agent kann geschlossen (nur auf sein eigenes Vermögen angewiesen) oder offen (ausleihen) sein. Der Einfachheit halber nehmen wir an, dass wir eine geschlossene haben.

Jede Agentenoperation hat ihren eigenen Wert So (Ax-> Ay, Sum), den wir mit unserem Maß $ und der Zeit To (Ax-> Ay) messen.

Agentenumgebung - andere Agenten oder Personen mit ähnlichen oder unterschiedlichen Arbeitsalgorithmen + alle Informationen, die zu diesem Zeitpunkt gültig sind.

Agentenstrategie. Dies ist ein Algorithmus, der Informationen über den Status von Konten, den Verlauf der Aktivität des Austauschs, seine Aktivität, die Aktivität des aktuellen Austauschs (Brille) empfängt und als Reaktion darauf eine Reihe von Aktionen ausführt oder nicht ausführt.

Strategien können nur auf der aktuellen Aktivität des Austauschs basieren (primitiv),
Berücksichtigen Sie Informationen aus anderen Börsen (Medium), berücksichtigen Sie die Aktivitätshistorie und erkannte statistische Muster (tief). Pessimistisch oder optimistisch - unterscheiden sich in der Einschätzung des Betriebsrisikos. Teilweise oder vollständig. Eine vollständige Strategie deckt alle Aspekte der Funktionsweise des Agenten ab. Teilweise kann zu einem vollständigen kombiniert werden.
Optimalität der Strategien und deren Wahl. Normalerweise hat der Agent mehrere Strategien. Der Wechsel zwischen diesen erfolgt mit einer stabilen (mehr als ein bestimmtes Zeitintervall) Änderung in der Umgebung.

Agententrägheit - wie lange der Agent eine Änderung der Umgebung ignoriert. Oder eine Strategie, die die Beständigkeit gegen Umweltstörungen bestimmt. Ein trägerer Agent kann sowohl gewinnen als auch verlieren, ohne der „Panik“ der Umgebung zu erliegen.

Angenommen, wir haben drei Sätze unvollständiger Strategien:

St   = [1,2,3,4] St   = [5,6,7,8] St  = [9,10,11,12] 

Die Kombination dieser Strategien bietet 64 eindeutige Agentenverhalten, die
Es erweist sich als richtig (nützlich) für die Umgebungen [O1, O2, O3] und nutzlos für [O4, O5, O6] oder schädlich für [O7, ..]

Analyse der Arbeit von Strategien und ihrer Kombinationen in verschiedenen Umgebungen
Wir können eine Metastrategie erstellen, die das Verhalten des Agenten abhängig von der aktuell erkannten Umgebung ändert.

Die Agentenplattform (im Folgenden als Plattform MetaBot bezeichnet) ist ein spezifischer Agent, der Agenten an verbundenen Börsen erstellt, koordiniert und löscht. Wie ein Agent besteht es architektonisch aus einer Reihe von Steuerungsstrategien, die kombiniert werden können, um die Funktionsweise des gesamten Systems insgesamt zu verbessern. Die Plattform speichert den Verlauf aller Vorgänge und andere nützliche Daten, die es den einzelnen Strategien ermöglichen, untergeordnete Agenten effektiv (in US-Dollar) zu verwalten, allgemeine statistische Muster zu analysieren und den Verlauf der Auswirkungen von Strategiekombinationen auf den Erfolg in bestimmten Umgebungen zu analysieren. Die Plattform basiert auf der Metastrategie, deren Parameter sich im Laufe der Zeit weiterentwickeln, um den Gewinn zu maximieren.

Die Umgebung des Austauschagenten besteht aus anderen Agenten und aktuellen Informationen. Umweltveränderungen für den Wirkstoff werden in optimale, normale, kritische, katastrophale usw. unterteilt. durch den Grad des Betriebserfolgs. Der Agent benachrichtigt die Plattform über ihren Zustand und seine Funktionsweise und handelt so lange, wie die Plattform mit dem Status und der Dynamik ihrer Konten „zufrieden“ ist. Andernfalls wird sie geschlossen. Die Plattform bewertet das Gesamtvermögen unterschiedlich und kann Entscheidungen über die Übertragung eines Vermögenswerts von einem Agenten auf einen anderen treffen, der an einer Börse oder an verschiedenen Börsen betrieben werden kann. Die Aufgabe der Plattform besteht darin, das Gesamtvermögen aller Agenten zu maximieren.

Betrachten Sie den Inhalt einer einfachen Implementierung einer Agentenstrategie (auf Scala) zur Verarbeitung eines Orderbuchaustauschs:

 //    var minDelayBetweenOperationsSec: Long //      // 0,     > 0      // < 0      def action(rateVolume: TimeRate): Double //     def middleValues() : Seq[Double] 

Wir bringen ein Genom ein, das sich während des Betriebs des Systems entwickelt.

StrategyParams ist das Bot-Strategie-Genom, das viel Gen enthält, um die Strategie zu parametrisieren:

 case class StrategyParams(low: IntGene, middle: IntGene, high: IntGene, intense: DoubleGene, threshold: DoubleGene, delay: IntGene) 

Dabei sind niedrig, mittel, hoch die Zeiträume in Minuten für die darüber gemittelten Vermögenswerte.
Sie werden verwendet, um die Wertbewegung vorherzusagen.

Intensiv bedeutet Bot-Aktivität oder Aggressivität. Bei großen Parameterwerten führt der Bot Transaktionen für große Beträge durch und (oder) wertet Vorhersagen mit großem Optimismus aus.
Schwellenwert bedeutet das minimale Vertrauen des Bots in die Vorhersage, das ihn auffordert, die Operation abzuschließen. Verzögerung - Trägheit, die minimale Zeit zwischen Aktivierungen.

Es wird postuliert, dass es für jeden Zeitraum, der durch StrategyParams-Parameter beschrieben wird, eine optimale Bot-Strategie gibt, die aus der Historie der Asset-Rate berechnet werden kann. Seine Parameter können unter Verwendung des evolutionären Genomauswahlalgorithmus berechnet werden. Die Berechnung hat die Form:

 def evalBots(trs: Seq[TimeRate]) = EvolutionFactory( candidate = defaultBotStrategyParams, populationConfig = PopulationConfig(500), evolutionConfig = EvolutionConfig(100), errorRate = (c: StrategyParams) => {errorBot(c, trs)} ). 

trs - Orderbook Geschichte,
populationsConfig - wie viele Bots gleichzeitig um ihr Überleben miteinander konkurrieren, evolutionConfig - wie viele Iterationen von Leben und Fortpflanzung müssen durchgeführt werden. Im Verlauf der Iterationen ist es weniger wahrscheinlich, dass Bots mit weniger Assets Nachkommen mit anderen Bots produzieren, was letztendlich bei einer ausreichend großen Population und der Anzahl der Degenerationsentwicklungen zum idealen Bot (Bots) führen sollte.

Nachdem Sie solche Bot (s) für einen bestimmten Zeitraum (Verlauf) erhalten und berechnet haben, müssen Sie sie in Zukunft für einen effektiven Handel verwenden. Platform-Metabot und seine MetaStrategy werden sich mit diesem Problem befassen.

Betrachten Sie den Inhalt einer einfachen Implementierung einer Plattformstrategie:

 MetaStrategy(rateSensitivity: DoubleGene, volumeSensitivity: DoubleGene, profitSensitivity: DoubleGene, criticalForce: DoubleGene, volumesSize: IntGene, delaySwitching: IntGene) 

Dabei beschreiben rateSensitivity, volumeSensitivity, profitSensitivity, wie empfindlich das Verhalten der Plattform gegenüber Änderungen der Parameter des Vermögenspreises, des Handelsvolumens und einer Verringerung des erwarteten Betriebsgewinns ist.

CriticalForce legt einen Schwellenwert fest, der auf einer umfassenden Bewertung der oben genannten Parameter basiert. Dieser Wert überschreitet ein Signal für die Ineffizienz der aktuellen Bot-Strategie (nicht der Plattform) und berechnet die erfolgreichere Version (aktuelle Bot-Strategie).

Fragment der Implementierung:

 val force = rateForce * volumeForce * profitForce if (force >= strategy.criticalForce.value.get) changeBot(force / strategy.criticalForce.value.get, extremeBot, tr) 

Nachdem wir den Plattformstrategie-Algorithmus unter Verwendung der MetaStrategy-Parameter beschrieben haben, können wir einen ähnlichen Evolutionsprozess für das Wachstum einer Population effizienter Plattform-Metabot-Bots starten, von denen der effektivste die Grundlage des Handelssystems wird.

Um die Wirksamkeit dieser Ideen zu testen, wurde ein Prototyp eines Kryptowährungs-Handelssystems erstellt, das als Testgelände verwendet werden kann. Die Deponie benötigt Daten zur Verlaufsgeschichte von Kursen und deren Durchschnittswerten über die Zeiträume, die in Influx gespeichert und von der Deponie selbst durch Extraktion über die offene Bitfinex-Austausch-API generiert werden. Siehe Objekt HistoryExtractor.

Testergebnisse




Während der Läufe konnten wir einige einfache Strategien für Agenten finden, die ohne den Einsatz des Metabot-Managers einen Gewinn von 14% pro Jahr für eine 2,5-jährige Testhistorie erzielten. Obwohl beeindruckend, garantiert es nicht das gleiche Interesse für zukünftige Perioden. Das Verhalten des Systems in Echtzeit wurde nicht getestet. Die Verwendung von Metabot-Strategien für kurze Zeiträume (einen Monat oder weniger) brachte keinen Gewinn, aber für große Zeiträume sind effektive Metastrategien durchaus möglich. Ihre Berechnung war aufgrund der großen Rechenkomplexität (Monate ununterbrochenen Betriebs eines durchschnittlichen PCs) schwierig. Chaotische Kryptowährungskurse können nur in geringem Umfang angepasst werden, aber ... mit diesem Ansatz für den Handel mit anderen Vermögenswerten, deren Volatilität nicht so chaotisch ist und saisonale Perioden aufweist, können bessere Ergebnisse erzielt werden.

Polygonquellen finden Sie hier .

Source: https://habr.com/ru/post/de463357/


All Articles