Bei einer Hochfrequenz-Handelsstrategie für Rohstoff-Futures hat die Empfangsgeschwindigkeit der Tick-Marktnoten einen entscheidenden Einfluss auf das Gewinnergebnis der Strategie. Die meisten Handelsframeworks auf dem Markt verwenden jedoch den Callback-Modus-Mechanismus. Denn in der onBar/onTick-Funktion müssen Sie sich mit der gesamten Code-Logik befassen, was Zeitverschwendung ist; ob Sie es wollen oder nicht, Ihre Strategie-Logik muss unterbrochen werden, und Sie müssen einen Zustand-Maschine-Modus verwenden, wie:
var state = STATE_IDLE;
function onTick() {
if (state == STATE_IDLE) {
// do something...
} else if (state == ....) {
// do something
}
}
FFMZ Quant übernimmt nicht den Rückrufmechanismus, sondern übernimmt den
Unter dem Strategie-Modell können Sie leicht die Konten von N verschiedenen Futures-Unternehmen betreiben, ihre TAQ zusammenführen und Bestellungen mit der schnellsten Geschwindigkeit platzieren. Unter normalen Umständen können wir zwei Tickets pro Sekunde von den Futures-Unternehmen erhalten, aber durch die Technologie der Fusion von TAQ, MA801 als Beispiel zu nehmen, können wir maximal 6 nicht-wiederholende Tickets pro Sekunde erhalten.
Lassen Sie uns direkt zum Code gehen (der Code kann nur im Bot betrieben werden, nicht im Backtest), und die Verwendung der IO-Funktion kann sich auf:https://www.fmz.cn/api#io函数
Wenn ein Bot eine Plattform hinzufügt, können N Futures-Unternehmen hinzugefügt werden, um die gleichzeitige Fusion von TAQ zu verarbeiten; hier fügen wir vorübergehend zwei hinzu und demonstrieren dies:
Folgender Code:
function main() {
Log("Prepare to access the platform and subscribe to TAQ")
// Step 1: all futures front-end processors are subscribing for symbols
_.each(exchanges, function(e) {
// wait to access the platform, and yes, the strategy runs continuously for 365 days, and it can run even after the market is closed, and it is not the logic of event callback
good mistake
while (!e.IO("status")) Sleep(1000);
// Use the _C retry function to eliminate network errors, and subscribe to TAQ just access to the platform; there may be an error that CTP is not ready
_C(e.SetContractType, "MA801")
// Switch the TAQ receiving mode to immediate return mode instead of event trigger mode, please refer to the API documentation
e.IO("mode", 0)
})
Log("Start to merge data...")
// Step 2: here comes the important part
var preVolume = 0
while (true) {
var ts = new Date().getTime()
// If any platform has tick event, return
var e = exchange.IO("wait_any")
// Reset Volume at a proper time
if (e.Nano/1000000 - ts > 60000) {
preVolume = 0
}
if (e.Event == 'tick' && e.Ticker.Volume >= preVolume) {
Log(ret, e.Ticker.Last, e.Ticker.Volume)
preVolume = e.Ticker.Volume
}
}
}
Folgende Ergebnisse:
Man kann sehen, dass um 21:24:44 die Daten der ersten Futures-Firma vor der zweiten ankommen, und das Ergebnis kann durch Hinzufügen von zwei Futures-Unternehmen gesehen werden. Wenn Sie es verwenden, um Hochfrequenz-Handelsstrategien zu entwickeln, haben Sie einen sehr wichtigen und entscheidenden Schritt gelöst, nämlich die Geschwindigkeit, Stabilität und Zuverlässigkeit des Erhaltens von Tick.
FMZ Quant (ehemals BotVS) ist eine Plattform, die speziell für Entwickler entwickelt wurde, die kritische Anforderungen an Strategie-Stabilität und Geschwindigkeit haben.