Currently showing posts tagged pyrfa

  • PyRFA PyPI Stats

    With the new release of PyPI, all Python package statistics are now uploaded to Google BigQuery which can be put into analytics. Here is our PyRFA package download statistic so far.

  • PyRFA Enterprise Support

    Good news. We have launched PyRFA Enterprise Support for organizations that require our professional support for using PyRFA. Check out the complete benefits of becoming a PyRFA Enterprise subscriber here.

  • PyRFA 8.1.0 on PyPI

    Great news. Our PyRFA 8.1.0 and 7.7.0 (for 32bit support) are now available on PyPI and immediately supports Python 3.6  You are now able to install PyRFA using pip with:

    pip install pyrfa

    What's new in 8.1.0:

    • 17 March 2017
    • Supports Python3.6
    • Adds getClientSessions() for Interactive Provider
    • Adds getClientWatchList() for Interactive Provider
    • Automatically loads dictionaries from the installed package folder
    • Able to privately submitData to a specific session ID
    • Able to closeSubmit items for a specific session ID
    • Available from PyPI

    API guide is available on our GitHub page including example scripts.

  • PyRFA Download Statistics (November 2016)

    Since the released of our PyRFA which recently supports Python 3.5, we have collected the download popularity and statistics as illustrated below:

    • The most popular platform: Windows (64bit)
    • The most popular Python version: Python 2.7

    PyRFA for Windows vs. Linux Downloads

    PyRFA Downloads by Python Versions

    PyRFA for Windows 64bit vs. 32bit Downloads

    PyRFA Downloads by Platforms

  • PyRFA 8.0.1.0 Release

    In 8.0.1.0, PyRFA brings a new capability for market price subscription where it can invoke server-side field filtering upon subscription. The market data updates will contain only fields of interest. This is called "View." With this new feature, PyRFA aims to reduce bandwidth used in very volatile market data updates. Also, we have qualified our builds with Red Hat Enterprise Linux 7.

    What's new:

    • Supports FID filtering subscription with View
    • Updates RDMDictionary and enumtype.def
    • Compiled with RFA 8.0.1.L1
    • Qualified with RHEL7

    Downloads are available at https://github.com/devcartel/pyrfa.

  • PyRFA Download Statistics (February 2016)

    PyRFA is widely picked up by many finance tech developers around the world. It's been downloaded more than 600 times and counting since we released it to the public in 2013. We have been collecting the API download statistics for a while now and we think it is interesting in terms of OSes and platform people are developing application with PyRFA. These stats help us prioritize our future API releases and to help us focus on our QA process and platform extension. Here are some key takeaway:

    • The most popular platform: Windows (64bit)
    • The most popular Python version: Python 2.7

     

    PyRFA for Windows vs. Linux Downloads

     

    PyRFA Downloads by Python Versions

     

    PyRFA for Windows 64bit vs. 32bit Downloads

     

    PyRFA Downloads by Platforms

  • PyRFA 8.0.0 Dropping Support for RHEL5 and 32-bit Systems

    Recent release of PyRFA 8.0.0 (and forward) has dropped support for 32-bit and RHEL5. It supports only 64-bit systems on both Windows and Linux. The reason to drop the support on 32-bit depends on Thomson Reuters RFA C++ libraries that we use to build PyRFA. And since Thomson Reuters has decided not to include the libraries, PyRFA is affected this way.

    Feature-wise, we will keep maintaining version 7.6.1 as it is the last version with 32-bit and RHEL5 support. All future bug fixes and enhancement made to 8.0.0 will also be ported back to 7.6.1.

    For this case, 7.6.1.3 releases also change the data output format into a pure dictionary just like in 8.0.0.

    Thanks for using PyRFA!

  • PyRFA 8.0.0 Data Output Change

    In PyRFA 8.0.0 onwards, we have changed data output from dispatchEventQueue() to contain only dictionary. This enables Python users to parse and use data more efficiently.

    In previous 7.6.0:

    ('NIP', 'EUR=', {'ASK': '0.999', 'ASK_TIME': '13:41:32:120', 'BID': '0.988', 'BID_NET_CH': '0.0041'})

    Now in 8.0.0:

    {'MTYPE':'IMAGE','RIC':'EUR=','SERVICE':'IDN_RDF_SDS','ASK':1.3712,'BID':1.3709}
  • Making Mac Terminal and Windows CMD Support Unicode Charset Display in Python 3

    According to Python 3 unicode character representation, It is possible for the user to confront with Python exception when Terminal is trying to display such unicode data from Pyrfa. Here is the error:

    UnicodeEncodeError: 'ascii' codec can't encode character '\u21e7' in position 1: ordinal not in range(128)

    In this case the '\u21e7' is a unicode for an arrow character. It is a mandatory for the PyRFA users to configure their terminal in order to display these charset according to the Python 3 unicode support. Each of platform can properly display unicode via commands as follows:

    Unix:

    $ export PYTHONIOENCODING=utf-8
            

    Windows

    C:\> chcp 65001
  • Expanding Thomson Reuters Elektron Chain RICs with PyRFA

    We got an inquiry today regarding using our PyRFA to expand chain RICs. Here is the methods of expanding chain RICs that we delivered for a bank who used TREP-RT. Chains are comprised of RICs put in a FID LINK_ or LONGLINK divided into pages. Keep looking at NEXT_LR FID for the next chain RIC page and continue extracting actual RIC. Here are some Python code we used:

    def expandChainRIC(self, chainRIC):
            expanded = []
            done = False
            snapshot = self.snapshotRequest([chainRIC])
            while not done:
                if not snapshot:
                    break
                for i in ['LINK_1', 'LINK_2', 'LINK_3', 'LINK_4', 'LINK_5', 'LINK_6', 'LINK_7', 'LINK_8', 'LINK_9', 'LINK_10', 'LINK_11', 'LINK_12', 'LINK_13', 'LINK_14', 'LONGLINK1', 'LONGLINK2', 'LONGLINK3', 'LONGLINK4', 'LONGLINK5', 'LONGLINK6', 'LONGLINK7', 'LONGLINK8', 'LONGLINK9', 'LONGLINK10', 'LONGLINK11', 'LONGLINK12', 'LONGLINK13', 'LONGLINK14']:
                    if snapshot[0][2].has_key(i) and snapshot[0][2][i]:
                        expanded.append(snapshot[0][2][i])
                if snapshot[0][2].has_key('NEXT_LR') and snapshot[0][2]['NEXT_LR']:
                    snapshot = self.snapshotRequest([snapshot[0][2]['NEXT_LR']])
                elif snapshot[0][2].has_key('LONGNEXTLR') and snapshot[0][2]['LONGNEXTLR']:
                    snapshot = self.snapshotRequest([snapshot[0][2]['LONGNEXTLR']])
                else:
                    done = True
            # if chainRIC is not a chain, return itself back
            if not expanded:
                expanded.append(chainRIC)
            if self.debug:
                print "[debug] Expand chain " + chainRIC + " -> " + str(expanded)
            return expanded


    And

    def snapshotRequest(self, ricList):
            snaphots = ()
            self.pyrfa.log("Subscribing items: " + str(ricList) + " (total: " + str(len(ricList)) + " )")
            for ric in ricList:
                self.pyrfa.marketPriceRequest(ric)
            global end
            end = False
            t = threading.Timer(10, stop)
            t.start()
            imageReceived = 0
            while not end and imageReceived < len(ricList):
                images = self.pyrfa.dispatchEventQueue()
                if images:
                    for i in images:
                        if type(i[2]) is dict:
                            imageReceived += 1
                            snaphots += (i,)
                            t.cancel()
                            t = threading.Timer(10, stop)
                            t.start()
            self.pyrfa.log("Snapshots received: " + str(imageReceived))
            t.cancel()
            return snaphots
    
  • PyRFA 7.5.1.1 Now with TS1 Timeseries

    One of new features in PyRFA 7.5.1.1 is ability to retrieve a full set of timeseries from Thomson Reuters TS1 service. PyRFA makes it unapologetically easy to request and decode TS1 in a few simple steps.

    Timeseries example script:

    import pyrfa
    p = pyrfa.Pyrfa()
    p.createConfigDb("./pyrfa.cfg")
    p.acquireSession("Session1")
    p.createOMMConsumer()
    p.login()
    p.directoryRequest()
    p.dictionaryRequest()
    p.setTimeSeriesPeriod("daily")
    p.setTimeSeriesMaxRecords(10)
    timeseries = p.getTimeSeries("CHK.N")
    print "\n########### CHK.N daily ###########"
    for record in timeseries:
    print record

    Output:

    ########### CHK.N daily  ###########
    DATE,CLOSE,OPEN,HIGH,LOW,VOLUME,VWAP
    2013/11/03,28.840,27.980,29.050,27.950,1998632.000,28.666
    2013/10/31,28.000,27.900,28.100,27.550,1027979.000,27.932
    2013/10/30,27.960,28.190,28.270,27.680,1345424.000,28.005
    2013/10/29,28.150,28.360,28.650,27.770,1370013.000,28.121
    2013/10/28,28.320,28.260,28.500,28.210,1246324.000,28.325
    2013/10/27,28.160,28.260,28.470,28.110,1328412.000,28.228
    2013/10/24,28.470,28.410,28.680,28.153,2462643.000,28.447
    2013/10/23,28.370,27.660,28.680,27.470,1773109.000,28.163
    ...
  • How to Save PyRFA Log

    Every time you run a PyRFA script, it will write a log file to a location specified by:

    \Logger\AppLogger\fileLoggerFilename = "./pyrfa.log"

    In the configuration. However, special options are allowed to append various unique prefix/suffix in the filename to avoid log file overwritten. Those options are:

    • {A} for process name
    • {P} for process ID
    • {T} for local 10-digit timestamp in UTC
    • {H} for hostname
    For example,
    \Logger\AppLogger\fileLoggerFilename = "./pyrfa.log.{T}"

    Will put a timestamp as a log file suffix and we will have a unique log file for every run.

  • PyRFA 7.4.1 Release

    We are pleased to announce that PyRFA 7.4.1 is now released to the public. PyRFA is for accessing market data from Thomson Reuters data feeds (RMDS or TREP-RT) from Python.

    Features:

    • subscription for MARKET_PRICE (level 1)
    • subscription for MARKET_BY_ORDER (order book)
    • subscription for MARKET_BY_PRICE (market depth)
    • snapshot request (no incremental updates)
    • dictionary download or use local files
    • directory request
    • symbol list request
    • custom domain MMT_HISTORY which can be used for intraday timeseries publishing
    • non-interactive provider for MARKET_PRICE, MARKET_BY_ORDER, MARKET_BY_PRICE, SYMBOLLIST, HISTORY
    • debug mode
    • logging
    • low-latency mode
    • subscription outbound NIC binding
    • example scripts

    Find out more at http://devcartel.com/pyrfa