Heim  >  Artikel  >  Java  >  Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?

Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?

王林
王林nach vorne
2023-04-18 18:34:271012Durchsuche
1. Zusammenfassung

Langfristig sollte die Wahrscheinlichkeit eines Preisanstiegs oder -rückgangs jeweils 50 % betragen. Um zukünftige Preise richtig vorherzusagen, müssen Sie alle Faktoren ermitteln, die den Preis beeinflussen in Echtzeit und geben Sie dann jedem Faktor ein korrektes Gewicht und schließlich eine objektive und rationale Analyse. Die Auflistung aller preisbeeinflussenden Faktoren würde den gesamten Bildschirm füllen.

Zusammenfassung: globales Wirtschaftsumfeld, nationale Makropolitik, damit verbundene Industriepolitik, Angebots- und Nachfragebeziehungen, internationale Ereignisse, Zinssätze und Wechselkurse, Inflation und Deflation, Marktpsychologie, unbekannte Faktoren usw. Vorhersagen sind zu einer riesigen und unmöglichen Aufgabe geworden. Schon sehr früh wurde mir klar, dass der Markt unvorhersehbar war. Dann sind alle Vorhersagen auf dem Markt zu Annahmen geworden, und der Handel ist zu einem Wahrscheinlichkeitsspiel geworden, was interessant ist.

2. Warum den Kapitalfluss nutzen? Ist der Markt wirklich gleichgültig, da er nicht vorhersehbar ist? Nein, alle Makro- und Mikrofaktoren haben sich im Preis widergespiegelt, was bedeutet, dass der Preis das Ergebnis des Zusammenspiels aller Faktoren ist. Wir müssen nur den Preis analysieren, um eine vollständige Handelsstrategie zu erstellen.

Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?Überlegen Sie zuerst genau, warum der Preis steigt?

Man könnte sagen, dass es daran liegt: die politische Unterstützung des Landes für verwandte Industrien, starke Regenfälle im Herkunftsland, internationaler Handelskrieg, MACD-Goldkreuz, andere kaufen usw. Natürlich können diese korrekt sein. Im Nachhinein können Sie immer die Gründe erkennen, die die Preise in die Höhe getrieben haben.

Tatsächlich ähnelt das Steigen und Fallen der Preise einer steigenden Flut, die alle Boote anhebt. Der Preisanstieg lässt sich nicht von der Förderung der Fonds trennen. Wenn es mehr Käufer als Verkäufer auf dem Markt gibt, wird der Preis steigen. Gibt es hingegen mehr Verkäufer als Käufer, sinkt der Preis. Mit diesem Konzept können wir auf der Grundlage des Verhältnisses von Angebot und Nachfrage, das sich im Nettomittelfluss widerspiegelt, vernünftige Erwartungen für zukünftige Preistrends abgeben.

3. Prinzip des Mittelflusses

Im Gegensatz zur herkömmlichen Analyse analysiert die Mittelflussanalyse, welche Transaktionen den aktiven Mittelzufluss und welche Transaktionen den aktiven Mittelabfluss darstellen, basierend auf den Transaktionsdaten einer Sequenz über einen bestimmten Zeitraum. Durch Subtrahieren des aktiven Abflussvolumens vom aktiven Zuflussvolumen während dieses Zeitraums können Sie dann den Nettokapitalzufluss während dieses Zeitraums ermitteln. Wenn der Nettomittelzufluss positiv ist, bedeutet dies, dass das Angebot des Produkts die Nachfrage übersteigt. Wenn es einen Nettomittelabfluss gibt, bedeutet dies, dass das Angebot des Produkts die Nachfrage übersteigt.

Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?Nachdem Sie dies gelesen haben, fragen sich einige vielleicht, dass bei tatsächlichen Transaktionen eine Transaktion nur dann abgeschlossen ist, wenn jemand kauft und jemand verkauft. Bei Transaktionsaufträgen muss es genauso viele Verkäufe wie Käufe geben und der Mittelzu- und -abfluss muss gleich sein. Woher kommen die Kapitalzu- und -abflüsse? Genau genommen muss jeder Kaufauftrag einem entsprechenden Verkaufsauftrag entsprechen und der Kapitalzufluss und der Kapitalabfluss müssen gleich sein. Wenn wir berechnen möchten, welche Orders aktiv gekauft und welche Orders aktiv verkauft wurden, können wir nur eine Kompromissmethode verwenden, die auf Balkendaten basiert und auf Handelsvolumen und Preis basiert.

4. Methode zur Berechnung des Kapitalflusses

Änderungen im Kapitalfluss entsprechen genau dem Echtzeit-Marktverhalten. Durch die Integration von Balkendaten wird der Nettokapitalfluss in Echtzeit berechnet. Es gibt zwei Algorithmen zur Berechnung des aktiven Geldflusses:

    Der erste: Wenn der Transaktionspreis der aktuellen Order zum Kontrahentenpreis oder zum Überpreis ausgeführt wird, ist der Kauftransaktionspreis >= der Verkaufspreis, d. h. der Käufer ist mehr Die Bereitschaft, die Transaktion zu einem höheren Preis abzuschließen, ist im aktiven Mittelzufluss enthalten.
  • Zweitens: Wenn der aktuelle Transaktionspreis > der letzte Transaktionspreis, dann kann man verstehen, dass das aktuelle Transaktionsvolumen den Preisanstieg aktiv in die Höhe treibt, d. h. der aktive Mittelzufluss ist enthalten.

Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?Nehmen Sie den obigen zweiten Algorithmus als Beispiel:

Der Schlusskurs einer bestimmten Sorte um 10:00 Uhr beträgt 3450, und der Schlusskurs um 11:00 Uhr beträgt 3455, dann setzen wir 10:00 ~ 11: Das Handelsvolumen von 00 ist im aktiven Mittelzufluss enthalten. Andernfalls wird es in den aktiven Mittelabfluss einbezogen. Dieser Artikel basiert auf der zweiten Methode und fügt den Faktor der Preisschwankung hinzu, indem er die Schlusskurse des vorherigen und des vorherigen Balkens vergleicht, das Handelsvolumen * Schwankungsbreite des steigenden oder fallenden Balkens in eine Sequenz einbezieht und dann weiter basiert Berechnen Sie anhand dieser Sequenz die aktive Zuflussquote.

5. Handelslogik

Dieser Artikel beschreibt den Kapitalfluss auf dem Terminmarkt aus der Perspektive des „Volumens“ und stellt ein Handelsmodell zur Beurteilung kurzfristiger Preistrends durch die Analyse von Balkendaten in Echtzeit fest. Unter normalen Umständen lassen sich Kapitalfluss und Preisentwicklung in vier Grundsituationen einteilen:

    Der Preis steigt und gleichzeitig kommt es zu einem Nettokapitalzufluss pro Zeiteinheit: Diese Situation gilt als stark und die Wahrscheinlichkeit
  • Der Aktienkurs steigt, gleichzeitig kommt es zu einem Nettoabfluss von Mitteln auf aktiver Basis pro Zeiteinheit: In diesem Fall handelt es sich um einen starke Kraft, und die Rate des weiteren Preisanstiegs in der Zukunft wird deutlich abgeschwächt;
  • Der Aktienkurs fällt und gleichzeitig kommt es zu einem Nettomittelzufluss auf Initiative pro Zeiteinheit: , es gilt als Schwachstelle und die Wahrscheinlichkeit, dass der Preis in Zukunft weiter sinkt, ist größer
  • Der Aktienkurs fällt, gleichzeitig kommt es zu einem Netto-Mittelabfluss auf aktiver Basis pro Zeiteinheit: In diesem Fall handelt es sich um eine mittel-schwache Situation und die Geschwindigkeit, mit der die Kurse weiter fallen In der Zukunft ist die Hauptvariablen signifikant geschwächt: Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?

  • Aktiver Verkauf (barOut)

Das Verhältnis von aktiven Zuflüssen zu aktiven Abflüssen (barRatio)

  • Öffnungsschwelle (openValve)

  • Aktuelle Position (myAmount)

  • La Schlusskurs der ST-K-Linie (schließen)

  • Ausstiegs- und Einstiegsbedingungen
  • Eine gute quantitative Handelsstrategie erfordert nicht nur stabile Renditen, sondern auch die Fähigkeit, Risiken zu kontrollieren und große Verluste zu vermeiden, wenn eine kleine Wahrscheinlichkeit eintritt. Dabei nutzen wir die Strategie der Verfolgung aktiver Kapitalströme und analysieren die Marktrichtung von Rohstoff-Futures mit Hilfe kurzfristiger Preisprognosen, um hohe Renditen und geringe Risiken zu erzielen. Die Schritte der Strategie sind wie folgt:
  • Long-Position eröffnen: Wenn derzeit keine Position vorhanden ist und barRatio > eine Kaufposition eröffnet;

  • Short-Position eröffnen: Wenn derzeit keine Position vorhanden ist , und barRatio < 1 / openValve, verkaufen, um eine Position zu eröffnen;

  • Long-Position schließen: : Wenn Sie derzeit eine Short-Position halten und > Quantifizierungs-API des Erfinders. Enthält den höchsten Preis, den niedrigsten Preis, den Eröffnungspreis, den Schlusskurs, das Handelsvolumen und den Standardzeitstempel. Wenn der letzte Transaktionspreis höher ist als der letzte Transaktionspreis, wird das letzte Transaktionsvolumen * (höchster Preis – niedrigster Preis) in den aktiven Kauf einbezogen; wenn der letzte Transaktionspreis niedriger ist als der letzte Transaktionspreis, dann der letzte Das Transaktionsvolumen* (höchster Preis – niedrigster Preis) wird in den aktiven Verkauf einbezogen.

  • Positionsdaten abrufen

function data() {
    var self = {};
    var barVol = [];
    var bars = _C(exchange.GetRecords); //获取bar数据
    if (bars.length < len * 2) { //控制bar数据数组的长度
        return;
    }
    for (var i = len; i > 0; i--) {
        var barSub_1 = bars[bars.length - (i + 1)].Close - bars[bars.length - (i + 2)].Close; //计算当前收盘价与上个bar收盘价的价差
        if (barSub_1 > 0) { //如果价格涨了,就在数组里面添加正数
            barVol.push(bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        } else if (barSub_1 < 0) { //如果价格跌了,就在数组里面添加负数
            barVol.push(-bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        }
    }
    if (barVol.length > len) {
        barVol.shift(); //释放多余的数据
    }
    self.barIn = 0;
    self.barOut = 0;
    for (var v = 0; v < barVol.length; v++) {
        if (barVol[v] > 0) {
            self.barIn += barVol[v]; //合并全部主动流入的资金
        } else {
            self.barOut -= barVol[v]; //合并全部主动流出的资金
        }
    }
    self.barRatio = self.barIn / Math.abs(self.barOut); //计算主动流入资金与主动流出资金的比值
    bars.pop(); //删除未结束的bar数据
    self.close = bars[bars.length - 1].Close; //获取上根K线的收盘价
    self.hh = TA.Highest(bars, hgLen, 'High'); //获取前高
    self.ll = TA.Lowest(bars, hgLen, 'Low'); //获取前低
    return self;
}
Grundlegende Positionsdaten abrufen die GetPosition-Methode in der quantitativen API des Erfinders und verarbeitet diese Grunddaten weiter. Wenn Sie derzeit eine Long-Order haben, geben Sie die positive Positionsmenge zurück. Wenn Sie derzeit eine Short-Order haben, geben Sie die negative Positionsmenge zurück. Der Zweck besteht darin, die Berechnung der Logik zum Öffnen und Schließen von Positionen zu erleichtern. Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?Eine Bestellung aufgeben und handeln
  • function positions(name) {
        var self = {};
        var mp = _C(exchange.GetPosition); //获取持仓
        if (mp.length == 0) {
            self.amount = 0;
        }
        for (var i = 0; i < mp.length; i++) { //持仓数据处理
            if (mp[i].ContractType == name) {
                if (mp[i].Type == PD_LONG || mp[i].Type == PD_LONG_YD) {
                    self.amount = mp[i].Amount;
                } else if (mp[i].Type == PD_SHORT || mp[i].Type == PD_SHORT_YD) {
                    self.amount = -mp[i].Amount;
                }
                self.profit = mp[i].Profit;
            } else {
                self.amount = 0;
            }
        }
        return self;
    }

    7. Strategiefunktionen

  • Eigenschaften:

  • Wenige Kernparameter: Die Modelldesignidee ist klar und es gibt nur 3 Kernparameter. Der Optimierungsspielraum ist gering und eine Überanpassung kann effektiv vermieden werden. Starke Universalität: Die Strategielogik ist einfach und weist eine hohe Universalität auf. Sie eignet sich für die meisten Sorten außer landwirtschaftlichen Produkten und kann mit mehreren Sorten kombiniert werden.
  • Verbesserung:
  • Positionsbedingungen hinzugefügt: Einseitiger (Aktien-)Marktkapitalfluss kann den Kapitalzufluss oder -abfluss basierend auf Preissteigerungen und -rückgängen, Handelsvolumen und anderen Faktoren definieren. Da diese Strategie jedoch die Positionsbedingung nicht berücksichtigt, kann es zu Verzerrungen in der Statistik der aktiven Mittelflüsse kommen.

  • Standardabweichungsbedingungen hinzufügen: Verlassen Sie sich ausschließlich auf den Geldfluss, da die Bedingungen für die Eröffnung von Positionen häufig zu falschen Signalen führen können, was zu häufigem Öffnen und Schließen von Positionen führt. Falsche Signale werden herausgefiltert, indem der Durchschnitt der Nettomittelabflüsse innerhalb eines bestimmten Zeitraums zuzüglich der Standardabweichung gezählt wird.
Vollständiger Strategie-Quellcode:
function trade() {
    var myData = data(); //执行data函数
    if (!myData) {
        return;
    }
    var mp = positions(contractType); //获取持仓信息
    var myAmount = mp.amount; //获取持仓数量
    var myProfit = mp.profit; //获取持仓浮动盈亏
    if (myAmount > 0 && myData.close < myData.ll) {
        p.Cover(contractType, unit); //多头平仓
    }
    if (myAmount < 0 && myData.close > myData.hh) {
        p.Cover(contractType, unit); //空头平仓
    }
    if (myAmount == 0) {
        if (myData.barRatio > openValve) {
            p.OpenLong(contractType, unit); //多头开仓
        } else if (myData.barRatio < 1 / openValve) {
            p.OpenShort(contractType, unit); //空头开仓
        }
    }
}

8. Strategie-Backtest

Strategiekonfiguration:

Backtest-Leistung:

Das obige ist der detaillierte Inhalt vonWie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen