Wie man die Tick-Empfangsgrenze von Rohstoff-Futures durchbricht

Schriftsteller:Rubin, Erstellt: 2018-08-27 15:58:30, Aktualisiert:

Was ist Tick? So kann man sich z.B. Transaktionsdaten als einen Fluss vorstellen, und Tick ist die Daten eines Teils des Flusses. Die feinste Granularität von inländischen Futures beträgt zweimal pro Sekunde. Mit anderen Worten, inländische Futures senden bis zu einem Tick bei 500 Millisekunden.

Wie bekommen die meisten inländischen ((in diesem Artikel China meint) Software Tick?

Dabei gibt es oft mehr als eine Transaktion in 500 Millisekunden, und die spezifische Situation darin ist völlig eine Blackbox.

Die meisten Handelsframeworks auf dem Markt verwenden einen Rückrufmodus, was bedeutet, dass es in idealer Situation höchstens einen Tick in 500 Millisekunden gibt. In der realen Situation onBar/onTick ist es gut, den Tick nicht zu verpassen. Warum? Weil Sie sich mit der gesamten Code-Logik in der onBar/onTick-Funktion auseinandersetzen müssen, was viel Zeit kostet. Ob Sie es wollen oder nicht, Ihre Strategie-Logik muss unterbrochen werden, Sie müssen den Zustand im Leerlauf verwenden, wie folgt:

img

Weiterentwickelte Mechanismen

FMZ Quantitative Trading Plattform übernimmt diesen rückwärts gerichteten Rückrufmechanismus nicht, sondern übernimmt den Hauptfunktionsmechanismus, der die Strategie-Logik nicht unterbricht und es Benutzern ermöglicht, den Strategiefluss natürlicher zu steuern.

Sagen Sie nicht, dass die Skriptsprache langsam ist, es sei denn, Sie verwenden sie für Neuralnetzwerk-Training, auch wenn es war, kann es bei jeder Gelegenheit nach dem Hinzufügen von Jit Hot Compilation verwendet werden. Die Einstiegsstrategie ist hier nicht geschrieben, und sprechen Sie über die Synthese von Futures-Hochfrequenz-Tick. Zum Beispiel, wenn wir uns mit einer Futures-Firma verbinden, können wir nur den Markt dieser Futures-Firma empfangen. Die Geschwindigkeit und Qualität unseres Empfangs hängen mit unserem eigenen Netzwerk zusammen und auch mit der Last der Front-End-Maschine der Futures-Firma zusammen.

Wie können wir also genauer Futures-Tick-Daten schneller erhalten? Unter dem FMZ Quants-Strategiemodell können Sie die Konten verschiedener Futures-Unternehmen einfach betreiben und ihre Preise kombinieren, um Aufträge mit der schnellsten Geschwindigkeit zu verarbeiten. Unter normalen Umständen können wir zwei Tick pro Sekunde von der Futures-Unternehmen erhalten, aber durch die Technologie der Kombination des Marktes, indem wir den MA801 als Beispiel nehmen, können wir einen Tick mit bis zu sechs Mal pro Sekunde und ohne Wiederholung erhalten.

img

Code-Demo

Dieser Code kann nur auf dem realen Markt verwendet werden und kann nicht zurück getestet werden. Beim Hinzufügen der Börse können viele Futures-Unternehmen hinzugefügt werden, um die gleichzeitige Fusionsverarbeitung des Marktes durchzuführen.

img

Der Code lautet wie folgt:

img

Demo-Effekt

img

Wie oben gezeigt, sind die Daten der ersten Futures-Firma um 21:24:44 früher als die der zweiten. Die Hinzufügung von zwei Futures-Firmen kann den Effekt zeigen, wenn Sie mehr als 5 Futures-Firmen hinzufügen, um zusammenzuschließen, dann haben Sie grundsätzlich keine Möglichkeit, Tick zu verpassen; wenn Sie eine Hochfrequenz-Handelsstrategie entwickeln, haben Sie einen sehr wichtigen und entscheidenden Schritt gelöst, nämlich die Geschwindigkeit und Stabilität des Tickempfangs.

Erhalten Sie den vollständigen Code:

function main() {
    log("Prepare to connect to the exchange and subscribe to the market")
    //step 1:All futures front-end machines are starting to subscribe to the variety
    _.each(exchanges, function(e){
        /*Waiting to connect to the exchange. The strategy is running without 
          interruption, and it is not the logic of the event callback. */
        while(!e.IO("status"))Sleep(1000);
        /*Use _C function to troubleshoot network errors. If subscribe to the market just 
        after connecting to exchanges, there may be a CTP unprepared error. */
        _C(e.SetContractType, "MA801")
        /*Switch the market receiving mode to the immediate return mode instead of the 
          event trigger mode. Refer to the API documentation on FMZ website. */
        e.IO("mode", 0)
    })
    Log("start fusing the data")
    //step 2: the important part begins
    var preVolume = 0
    while (true) {
        var ts = new Date().getTime()
        //Return if any exchanges occur tick event
        var ret = exchange.IO("wait_any")
        //Reset Volume at the right time
        if (ret.Nano/1000000 - ts > 60000) {
            preVolume = 0
        }
        //Target the exchange where the event occurred
        var e = exchanges[ret.Index]
        //Get ticker,  because of switching mode as return before, so here is the updated market, and GetTicker won't fail
        //Only the Tick with increasing volume is displayed. It no need to compare actual process, just process it.
        var ticker = e.GetTicker()
        if (ticker.Volume >= preVolume){
            Log(ret,ticker.Last, ticker.Volume)
            preVolume = ticker.Volume
        }
    }
}   



Mehr