LYNX Tick-By-Tick data

Door Nickardo Postma


Onderstaand artikel gaat dieper in op de mogelijkheden van de TWS API. De API biedt de mogelijkheid geprogrammeerde verzoeken te sturen naar uw rekening. Voorbeelden hiervan zijn het ophalen van grote datasets, geautomatiseerd plaatsen van orders & het toevoegen van eigen indicatoren. Om de materie te doorgronden is enige kennis van Python / programmeren vereist. Heeft u vragen of ideeën contacteer onze developers dan direct via dev@lynx.nl

 

Binnen het TWS Handelsplatform en via de API is het vanaf versie 969 & 973.04 (Python API) mogelijk tick-by-tick data in te zien en op te vragen. Met de term tick wordt doorgaans de minimale beweging van een product aangeduid; een tick kan echter ook refereren naar de koerswijziging tussen twee transacties.

Het verschil tussen tick-by-tick en de ‘standaard’ marktdata van LYNX is dat bij tick-by-tick data álle transacties afzonderlijk kunnen worden uitgelezen. In tegenstelling tot de ‘standaard’ datastream welke de transacties elke 250ms bij elkaar bundelt, waarna de data als één transactie wordt getoond.

 

Omdat de koers van een product via de ‘standaard’ datastream vier keer per seconde (elke 250ms) wordt geüpdatet, zal de gemiddelde handelaar op het eerste oog geen verschil zien tussen de twee datastreams. Een computer merkt het verschil wel, accurate data zorgt voor meer betrouwbare resultaten. Tick-by-tick data kan derhalve van toegevoegde waarde zijn bij het backtesten en uitvoeren van automatische handelsstrategieën.

Enkele specifieke limitaties:

  • Tick-by-tick is niet beschikbaar voor combos
  • Tick-by-tick voor opties is alleen historisch beschikbaar, niet in real time
  • Tick-by-tick voor indices is alleen beschikbaar voor indices op CME
  • Het tick type veld in de API is hoofdlettergevoelig: BidAsk, Last, AllLast, MidPoint

VOORBEELD (in Python):

Om de volgende stappen uit te voeren dient u de API-software te downloaden; zie onderaan dit artikel. Daarnaast kunt u onderstaand het uitgewerkte voorbeeld downloaden, welke u direct kunt gebruiken om zelf tick-data op te vragen. Tijdens installatie van de API-software worden er verschillende mappen aangemaakt (doorgaans in C:/TWS_API), waaronder de map ‘Samples’; hierin zijn voorbeelden te vinden voor C#, Java, Python & Excel. In het API Python voorbeeld, specifiek binnen Program.py, zijn de volgende twee stukjes code te vinden voor het opvragen van historische tick-data (locatie: /TWS API/samples/Python/Testbed/Program.py):

self.reqHistoricalTicks(18002, ContractSamples.INGA(),
                                "20180712 21:39:33", "", 1000, "BID_ASK", 1, True, [])

 def historicalTicksBidAsk(self, reqId: int, ticks: ListOfHistoricalTickBidAsk,
                              done: bool):
        for tick in ticks:
            print("Historical Tick Bid/Ask. Req Id: ", reqId, ", time: ", tick.time,
                  ", bid price: ", tick.priceBid, ", ask price: ", tick.priceAsk,
                  ", bid size: ", tick.sizeBid, ", ask size: ", tick.sizeAsk)

Binnen reqHistoricalTicks wordt het verzoek gecreëerd, zie ContractSamples.py.  Binnen def historicalTicksBidAsk kan het volgende worden toegevoegd om met de data te kunnen werken:

   tick_data = []

        for tick in ticks:
            tick_data.append(
            {"Time": str(time.ctime(tick.time)), "Bid": float(tick.priceBid), "Ask": float(tick.priceAsk),
             "Bid Size": float(tick.sizeBid), "Ask Size": float(tick.sizeAsk), "Req Id": int(reqId)})

        df = pd.DataFrame(tick_data)

        df.to_csv("TickData_{}_{}.csv".format(reqId, int(time.time())), index_label='index')
        print("TickData CSV Created")

Om Pandas te gebruiken dient deze geïnstalleerd te zijn alsmede geïmporteerd te worden in Python.

import pandas as pd

Eerst wordt er een Python list aangemaakt tick_data = [], daaropvolgend voegen we alle data toe aan de list for tick in ticks: tick_data.append(), uiteindelijk wordt de list omgezet naar een Pandas dataframe df = pd.DataFrame(tick_data) om de data gemakkelijk op te kunnen slaan als .csv bestand, welke gebruikt kan worden in combinatie met Excel of andere programma’s. Ook kan vanuit het DataFrame bijvoorbeeld de EMA of andere waarden worden berekend. De data is nu in een bruikbaar format om bijvoorbeeld backtests mee te doen of een strategie mee te sturen.

 

Om gebruik te kunnen van de API is specifieke software vereist. Download deze hier (ga akkoord met de voorwaarden, download IB API Latest). Ook kunt u de voorbeelden, zoals omschreven in dit artikel, downloaden. Deze vindt u hieronder:

Het verschil tussen tick-by-tick en de ‘standaard’ marktdata van LYNX is dat bij tick-by-tick data álle transacties afzonderlijk kunnen worden uitgelezen. In tegenstelling tot de ‘standaard’ datastream welke de transacties elke 250ms bij elkaar bundelt, waarna de data als één transactie wordt getoond.

 

Omdat de koers van een product via de ‘standaard’ datastream vier keer per seconde (elke 250ms) wordt geüpdatet, zal de gemiddelde handelaar op het eerste oog geen verschil zien tussen de twee datastreams. Een computer merkt het verschil wel, accurate data zorgt voor meer betrouwbare resultaten. Tick-by-tick data kan derhalve van toegevoegde waarde zijn bij het backtesten en uitvoeren van automatische handelsstrategieën.

Enkele specifieke limitaties:

  • Tick-by-tick is niet beschikbaar voor combos
  • Tick-by-tick voor opties is alleen historisch beschikbaar, niet in real time
  • Tick-by-tick voor indices is alleen beschikbaar voor indices op CME
  • Het tick type veld in de API is hoofdlettergevoelig: BidAsk, Last, AllLast, MidPoint

VOORBEELD (in Python):

Om de volgende stappen uit te voeren dient u de API-software te downloaden; zie onderaan dit artikel. Daarnaast kunt u onderstaand het uitgewerkte voorbeeld downloaden, welke u direct kunt gebruiken om zelf tick-data op te vragen. Tijdens installatie van de API-software worden er verschillende mappen aangemaakt (doorgaans in C:/TWS_API), waaronder de map ‘Samples’; hierin zijn voorbeelden te vinden voor C#, Java, Python & Excel. In het API Python voorbeeld, specifiek binnen Program.py, zijn de volgende twee stukjes code te vinden voor het opvragen van historische tick-data (locatie: /TWS API/samples/Python/Testbed/Program.py):

self.reqHistoricalTicks(18002, ContractSamples.INGA(),
                                "20180712 21:39:33", "", 1000, "BID_ASK", 1, True, [])

 def historicalTicksBidAsk(self, reqId: int, ticks: ListOfHistoricalTickBidAsk,
                              done: bool):
        for tick in ticks:
            print("Historical Tick Bid/Ask. Req Id: ", reqId, ", time: ", tick.time,
                  ", bid price: ", tick.priceBid, ", ask price: ", tick.priceAsk,
                  ", bid size: ", tick.sizeBid, ", ask size: ", tick.sizeAsk)

Binnen reqHistoricalTicks wordt het verzoek gecreëerd, zie ContractSamples.py.  Binnen def historicalTicksBidAsk kan het volgende worden toegevoegd om met de data te kunnen werken:

   tick_data = []

        for tick in ticks:
            tick_data.append(
            {"Time": str(time.ctime(tick.time)), "Bid": float(tick.priceBid), "Ask": float(tick.priceAsk),
             "Bid Size": float(tick.sizeBid), "Ask Size": float(tick.sizeAsk), "Req Id": int(reqId)})

        df = pd.DataFrame(tick_data)

        df.to_csv("TickData_{}_{}.csv".format(reqId, int(time.time())), index_label='index')
        print("TickData CSV Created")

Om Pandas te gebruiken dient deze geïnstalleerd te zijn alsmede geïmporteerd te worden in Python.

import pandas as pd

Eerst wordt er een Python list aangemaakt tick_data = [], daaropvolgend voegen we alle data toe aan de list for tick in ticks: tick_data.append(), uiteindelijk wordt de list omgezet naar een Pandas dataframe df = pd.DataFrame(tick_data) om de data gemakkelijk op te kunnen slaan als .csv bestand, welke gebruikt kan worden in combinatie met Excel of andere programma’s. Ook kan vanuit het DataFrame bijvoorbeeld de EMA of andere waarden worden berekend. De data is nu in een bruikbaar format om bijvoorbeeld backtests mee te doen of een strategie mee te sturen.

 

Om gebruik te kunnen van de API is specifieke software vereist. Download deze hier (ga akkoord met de voorwaarden, download IB API Latest). Ook kunt u de voorbeelden, zoals omschreven in dit artikel, downloaden. Deze vindt u hieronder:

 

 
Meer informatie? dev@lynx.nl

API FAQ:

Hoe sta ik API verbindingen toe in het Handelsplatform?

Het is van belang dat, binnen de configuratie instellingen van het Handelsplatform, ‘Enable ActiveX and Socket Clients’ is aangevinkt alsmede dat de ‘Socket port’ overeenkomt met de socket port aangegeven in het verbindingsgedeelte van uw programma/code.

Wat zijn de limitaties van de API?

Het handelsplatform accepteert tot vijftig verzoeken per seconde, client-side. Een verzoek is bijvoorbeeld het opvragen van koersdata, plaatsen van een order of het opvragen van de portefeuille. Er bestaat geen limiet voor het aantal berichten dat het LYNX Handelsplatform terugstuurt in antwoord op de geplaatste verzoeken.

Kan ik via de API handelen op een demorekening?

Het is mogelijk via de API te handelen op een LYNX Demorekening. Er bestaan wel een aantal limitaties aan het gebruik van een demorekening ten opzichte van een echte rekening. Onder andere:

  • Sommige ordertypes kunnen niet worden gebruikt in de demo: VWAP, Auction, RFQ en Pegged to Market
  • Transacties worden gesimuleerd op basis van top of book data
  • Handel in combo’s en EFP’s is gelimiteerd mogelijk
  • Stop- en andere conditionele orders worden te allen tijden gesimuleerd op een demorekening, dit kan afwijken van de ervaring op een echte rekening
  • Penny trading voor Amerikaanse opties is niet mogelijk
Meer informatie? dev@lynx.nl

API FAQ:

Hoe sta ik API verbindingen toe in het Handelsplatform?

Het is van belang dat, binnen de configuratie instellingen van het Handelsplatform, ‘Enable ActiveX and Socket Clients’ is aangevinkt alsmede dat de ‘Socket port’ overeenkomt met de socket port aangegeven in het verbindingsgedeelte van uw programma/code.

Wat zijn de limitaties van de API?

Het handelsplatform accepteert tot vijftig verzoeken per seconde, client-side. Een verzoek is bijvoorbeeld het opvragen van koersdata, plaatsen van een order of het opvragen van de portefeuille. Er bestaat geen limiet voor het aantal berichten dat het LYNX Handelsplatform terugstuurt in antwoord op de geplaatste verzoeken.

Kan ik via de API handelen op een demorekening?

Het is mogelijk via de API te handelen op een LYNX Demorekening. Er bestaan wel een aantal limitaties aan het gebruik van een demorekening ten opzichte van een echte rekening. Onder andere:

  • Sommige ordertypes kunnen niet worden gebruikt in de demo: VWAP, Auction, RFQ en Pegged to Market
  • Transacties worden gesimuleerd op basis van top of book data
  • Handel in combo’s en EFP’s is gelimiteerd mogelijk
  • Stop- en andere conditionele orders worden te allen tijden gesimuleerd op een demorekening, dit kan afwijken van de ervaring op een echte rekening
  • Penny trading voor Amerikaanse opties is niet mogelijk