Heim >Java >javaLernprogramm >Wie implementiert Java eine Handelsstrategie, die auf dem aktiven Geldfluss basiert?
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.
Ü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
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
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
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:
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)
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. 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
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.
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!