Die Ressourcen sind geladen. Beförderung...

Schnelle Einführung eines halbautomatischen quantitativen Handelstools

Schriftsteller:Gutes, Erstellt: 2020-08-30 10:11:02, aktualisiert: 2023-10-08 19:54:06

Quickly implement a semi-automatic quantitative trading tool

Schnelle Einführung eines halbautomatischen quantitativen Handelstools

Im Rohstoff-Futures-Handel sind Intertemporary Arbitrage eine gängige Handelsmethode. Diese Art von Arbitrage ist nicht risikofrei. Wenn die einseitige Richtung des Spreads weiter expandiert, befindet sich die Arbitrageposition in einem schwimmenden Verlustzustand. Solange die Arbitrageposition jedoch richtig kontrolliert ist, ist sie immer noch sehr funktionsfähig und machbar.

In diesem Artikel versuchen wir, zu einer anderen Handelsstrategie zu wechseln, anstatt eine vollautomatisierte Handelsstrategie zu konstruieren, haben wir ein interaktives halbautomatisches quantitatives Handelswerkzeug realisiert, um die intertemporäre Arbitrage im Rohstoff-Futures-Handel zu erleichtern.

Die Entwicklungsplattform, die wir verwenden werden, ist die FMZ Quant Plattform.

Intertemporales Arbitrage ist ein sehr einfaches Konzept.

Intertemporales Arbitrage Konzept

  • Zitat aus Wikipedia


# Strategy Design

The strategy framework is as follows:

Funktion Hauptelement Während es wahr ist. If(exchange.IO(status)){ // Bestimmt den Verbindungsstatus des CTP-Protokolls. LogStatus(_D(), Schon mit CTP verbunden!) // Markt Öffnungszeit, Login-Verbindung ist normal. - Nein. LogStatus ((_D(), CTP nicht verbunden!) // Nicht beim Trading-Frontend eingeloggt. - Ich weiß. - Ich weiß. - Ich weiß.


If the CTP protocol is connected properly, then we need to set up the trading contract and then get the market quote. After obtaining the quotes, we can use the FMZ Quant platform build-in "line drawing" library to draw the difference.

Funktion Hauptelement Während es wahr ist. If(exchange.IO(status)){ // Bestimmt den Verbindungsstatus des CTP-Protokolls. exchange.SetContractType ((rb2001) // Festlegen des Monatsvertrags Var tickerA = exchange.GetTicker() // Daten zu den monatlichen Angeboten - Ich weiß. exchange.SetContractType ((rb1910) // Festlegen des nächsten Monatsvertrags Var tickerB = exchange.GetTicker() // Daten zu den kurzfristigen Angeboten - Ich weiß. Var diff = Tickers A.Last - Tickers B.Last $.PlotLine ((diff, diff)

LogStatus(_D(), Schon mit CTP verbunden!) // Markt Öffnungszeit, Login-Verbindung ist normal. - Nein. LogStatus ((_D(), CTP nicht verbunden!) // Nicht beim Trading-Frontend eingeloggt. - Ich weiß. - Ich weiß. - Ich weiß.


Get the market data, calculate the difference, and draw the graph to record. let it simply reflects the recent fluctuations in the price difference.
Use the function of "line drawing" library ```$.PlotLine```

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e286fea238b8266dd13.png) 

# Interactive part

On the strategy editing page, you can add interactive controls directly to the strategy:

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e9b91112616d444b964.png) 

Use the function ```GetCommand``` in the strategy code to capture the command that was sent to the robot after the above strategy control was triggered.

After the command is captured, different commands can be processed differently.

The trading part of the code can be packaged using the "Commodity Futures Trading Class Library" function. First, use ```var q = $.NewTaskQueue()``` to generate the transaction control object ```q``` (declared as a global variable).

VAR cmd = GetCommand wenn (cmd) { wenn (cmd == plusHedge) { q.pushTask ((Austausch, rb2001, sell, 1, Funktion ((Task, Ret) { Log ((Task.desc, ret) wenn (ret) { q.pushTask ((Austausch, rb1910, buy, 1, 123, Funktion ((Task, Ret) { Log ((q, task.desc, ret, task.arg) - Ich weiß. - Ich weiß. - Ich weiß. } sonst wenn (cmd == minusHedge) { q.pushTask ((exchange, rb2001, buy, 1, Funktion ((Task, Ret) {) Log ((Task.desc, ret) wenn (ret) { q.pushTask ((Exchange, rb1910, sell, 1, 123, Funktion ((Task, Ret) {) Log ((q, task.desc, ret, task.arg) - Ich weiß. - Ich weiß. - Ich weiß. } sonst wenn (cmd == coverPlus) q.pushTask ((exchange, rb2001, closesell, 1, Funktion ((Task, ret) {) Log ((Task.desc, ret) wenn (ret) { q.pushTask ((Exchange, rb1910, closebuy, 1, 123, Funktion ((Task, Ret) {) Log ((q, task.desc, ret, task.arg) - Ich weiß. - Ich weiß. - Ich weiß. } sonst wenn (cmd == coverMinus) { q.pushTask ((Austausch, rb2001, closebuy, 1, Funktion ((Task, Ret) { Log ((Task.desc, ret) wenn (ret) { q.pushTask ((exchange, rb1910, closesell, 1, 123, function ((task, ret)) { Log ((q, task.desc, ret, task.arg) - Ich weiß. - Ich weiß. - Ich weiß. - Ich weiß. - Ich weiß. Q.Umfrage `


Inhalte dazu

Weitere Informationen