Example #1
0
def random_intalpha(startdate='20140103', freq='30min', n=None):
    if not n >= 0:
        n = np.random.randint(10, 20)
    dates = dateutil.get_startfrom(DATES,
                                   dateutil.compliment_datestring(str(startdate), -1, True),
                                   n)
    times = dateutil.generate_intervals(int(freq[:-3])*60)
    dts = pd.to_datetime([d+' '+t for d in dates for t in times])
    df = pd.DataFrame(np.random.randn(len(dts), len(SIDS)), index=dts, columns=SIDS)
    return df
Example #2
0
class IntervalFetcher(KMinFetcher):
    """Class to fetch TinySoft minute-bar data.

    :param str freq: Frequency of minute-bar data, currently only supports: ('30min', '5min', '1min')
    """

    collections = {
        '30min': DB.ts_30min,
        '5min': DB.ts_5min,
        '1min': DB.ts_1min,
    }
    intervals = {
        '30min': dateutil.generate_intervals(1800),
        '5min': dateutil.generate_intervals(300),
        '1min': dateutil.generate_intervals(60),
    }
    dnames = DB.ts_30min.distinct('dname')
    freqs = ('30min', '5min', '1min')

    def __init__(self, freq, **kwargs):
        if freq not in IntervalFetcher.freqs:
            raise ValueError(
                'No minute-bar data of frequency {0!r} exists'.format(freq))
        self._freq = freq
        self.collection = IntervalFetcher.collections[freq]
        self.intervals = IntervalFetcher.intervals[freq]
        super(IntervalFetcher, self).__init__(**kwargs)

    @property
    def freq(self):
        """Property."""
        return self._freq

    @freq.setter
    def freq(self, freq):
        if freq not in IntervalFetcher.freqs:
            self.warning(
                'No minute-bar data of frequency {0!r} exists. Nothing has changed'
                .format(freq))
            return
        self._freq = freq
        self.collection = IntervalFetcher.collections[freq]
        self.intervals = IntervalFetcher.intervals[freq]
Example #3
0
class IntervalReturnsFetcher(KMinFetcher):
    """Class to fetch TinySoft interval returns data.

    :param str freq: Frequency of interval returns, currently only supports: ('1min', '5min', '15min', '30min', '60min', '120min')
    """

    freqs = ('1min', '5min', '15min', '30min', '60min', '120min')
    intervals = {
        '1min': dateutil.generate_intervals(60),
        '5min': dateutil.generate_intervals(300),
        '15min': dateutil.generate_intervals(15 * 60),
        '30min': dateutil.generate_intervals(30 * 60),
        '60min': dateutil.generate_intervals(60 * 60),
        '120min': dateutil.generate_intervals(120 * 60),
    }

    def __init__(self, freq, **kwargs):
        if freq is not None and freq not in IntervalReturnsFetcher.freqs:
            raise ValueError(
                'No interval returns of frequency {0!r} exists'.format(freq))
        self._freq = freq
        self._dname = 'returns' + freq[:-3]
        self.collection = DB.ts_ret
        self.intervals = IntervalReturnsFetcher.intervals[freq]
        super(IntervalReturnsFetcher, self).__init__(**kwargs)

    @property
    def freq(self):
        """Property."""
        return self._freq

    @freq.setter
    def freq(self, freq):
        if freq not in IntervalReturnsFetcher.freqs:
            self.warning(
                'No interval returns of frequency {0!r} exists. Nothing has changed'
                .format(freq))
            return
        self._freq = freq
        self._dname = 'returns' + freq[:-3]
        self.intervals = IntervalReturnsFetcher.intervals[freq]

    def fetch(self, *args, **kwargs):
        """A variant of :py:meth:`orca.mongo.base.KMinFetcher.fetch`: when ``dname`` is omitted, it uses the :py:attr:`IntervalReturnsFetcher.freq` to determine which data to fetch."""
        if isinstance(args[0],
                      str) and args[0][:7] == 'returns':  # dname is given
            return super(IntervalReturnsFetcher, self).fetch(*args, **kwargs)
        else:
            return super(IntervalReturnsFetcher,
                         self).fetch(*((self._dname, ) + args), **kwargs)

    def fetch_window(self, *args, **kwargs):
        """A variant of :py:meth:`orca.mongo.base.KMinFetcher.fetch_window`: when ``dname`` is omitted, it uses the :py:attr:`IntervalReturnsFetcher.freq` to determine which data to fetch."""
        if isinstance(args[0], str):  # dname is given
            return super(IntervalReturnsFetcher,
                         self).fetch_window(*args, **kwargs)
        else:
            return super(IntervalReturnsFetcher,
                         self).fetch_window(*((self._dname, ) + args),
                                            **kwargs)

    def fetch_history(self, *args, **kwargs):
        """A variant of :py:meth:`orca.mongo.base.KMinFetcher.fetch_history`: when ``dname`` is omitted, it uses the :py:attr:`IntervalReturnsFetcher.freq` to determine which data to fetch."""
        if isinstance(args[0],
                      str) and args[0][:7] == 'returns':  # dname is given
            return super(IntervalReturnsFetcher,
                         self).fetch_history(*args, **kwargs)
        else:
            return super(IntervalReturnsFetcher,
                         self).fetch_history(*((self._dname, ) + args),
                                             **kwargs)

    def fetch_daily(self, *args, **kwargs):
        """A variant of :py:meth:`orca.mongo.base.KMinFetcher.fetch_daily`: when ``dname`` is omitted, it uses the :py:attr:`IntervalReturnsFetcher.freq` to determine which data to fetch."""
        if isinstance(args[0],
                      str) and args[0][:7] == 'returns':  # dname is given
            return super(IntervalReturnsFetcher,
                         self).fetch_daily(*args, **kwargs)
        else:
            return super(IntervalReturnsFetcher,
                         self).fetch_daily(*((self._dname, ) + args), **kwargs)

    def fetch_intervals(self, *args, **kwargs):
        """A variant of :py:meth:`orca.mongo.base.KMinFetcher.fetch_daily`: when ``dname`` is omitted, it uses the :py:attr:`IntervalReturnsFetcher.freq` to determine which data to fetch."""
        if isinstance(args[0],
                      str) and args[0][:7] == 'returns':  # dname is given
            return super(IntervalReturnsFetcher,
                         self).fetch_intervals(*args, **kwargs)
        else:
            return super(IntervalReturnsFetcher,
                         self).fetch_intervals(*((self._dname, ) + args),
                                               **kwargs)
Example #4
0
 def __init__(self, timeout=60):
     UpdaterBase.__init__(self, timeout=timeout)
     self.interval = IntervalFetcher('1min')
     self.quote = QuoteFetcher()
     self.indexquote = IndexQuoteFetcher()
     self.times = dateutil.generate_intervals(60)
Example #5
0
"""
.. moduleauthor:: Li, Wang <*****@*****.**>
"""

import os
from datetime import datetime, timedelta

import numpy as np
import pandas as pd
import warnings
warnings.simplefilter(action='ignore', category=pd.core.common.SettingWithCopyWarning)

from base import UpdaterBase
from orca.utils.dateutil import generate_intervals
times_1min = generate_intervals(1*60, begin='091500', end='151500')
times_5min = generate_intervals(5*60, begin='091500', end='151500')

columns = ['dt', 'price', 'volume', 'bid1', 'ask1', 'bds1', 'aks1', 'open_interest']
dnames = ['price', 'volume', 'open_interest', 'bid1', 'bds1', 'ask1', 'aks1']
columns1 = ['dt', 'price', 'volume']
dnames1 = ['price', 'volume']


class IFUpdater(UpdaterBase):
    """The updater class for collection 'IF'."""

    def __init__(self, timeout=1200):
        super(IFUpdater, self).__init__(timeout=timeout)
        self.sids = set()

    def pre_update(self):
Example #6
0
 def __init__(self, freq, **kwargs):
     super(IntervalAlphaBase, self).__init__(**kwargs)
     if freq not in IntervalAlphaBase.freqs:
         raise ValueError('Frequency {0!r} is currently not supported'.format(freq))
     self.freq = 60 * int(freq[:-3])
     self.times = dateutil.generate_intervals(self.freq)
Example #7
0
 def __init__(self, timeout=60):
     UpdaterBase.__init__(self, timeout=timeout)
     self.interval = IntervalFetcher('1min')
     self.quote = QuoteFetcher()
     self.indexquote = IndexQuoteFetcher()
     self.times = dateutil.generate_intervals(60)
Example #8
0
class IFIntervalFetcher(KDayFetcher):
    """Class to fetch TinySoft futures minute-bar data.

    :param str freq: Frequency of minute-bar data, currently only supports: ('5min', '1min')
    """

    collections = {
        '5min': DB.IF_5min,
        '1min': DB.IF_1min,
    }
    intervals = {
        '5min': dateutil.generate_intervals(5 * 60,
                                            begin='091500',
                                            end='151500'),
        '1min': dateutil.generate_intervals(1 * 60,
                                            begin='091500',
                                            end='151500'),
    }
    dnames = DB.IF_5min.distinct('dname')
    freqs = ('30min', '5min', '1min')

    def __init__(self, freq, **kwargs):
        if freq not in IFIntervalFetcher.freqs:
            raise ValueError(
                'No minute-bar data of frequency {0!r} exists'.format(freq))
        self._freq = freq
        self.collection = IFIntervalFetcher.collections[freq]
        self.intervals = IFIntervalFetcher.intervals[freq]
        super(IFIntervalFetcher, self).__init__(**kwargs)

    @property
    def freq(self):
        """Property."""
        return self._freq

    @freq.setter
    def freq(self, freq):
        if freq not in IFIntervalFetcher.freqs:
            self.warning(
                'No minute-bar data of frequency {0!r} exists. Nothing has changed'
                .format(freq))
            return
        self._freq = freq
        self.collection = IFIntervalFetcher.collections[freq]
        self.intervals = IFIntervalFetcher.intervals[freq]

    def fetch_window(self, dname, window, sid=None, **kwargs):
        assert sid
        datetime_index = kwargs.get('datetime_index', self.datetime_index)
        reindex = kwargs.get('reindex', self.reindex)

        query = {
            'sid': sid,
            'dname': dname,
            'date': {
                '$gte': window[0],
                '$lte': window[-1]
            }
        }
        proj = {'_id': 0, 'dvalue': 1, 'date': 1}
        cursor = self.collection.find(query, proj)
        df = pd.DataFrame({row['date']: row['dvalue'] for row in cursor}).T
        del cursor
        if reindex:
            ser = df.T.unstack()
            ser.index = pd.to_datetime([d + t for d, t in ser.index])
            return ser
        if datetime_index:
            df.index = pd.to_datetime(df.index)
        return df

    def fetch(self, dname, startdate=None, **kwargs):
        if startdate is None:
            startdate = '20100416'
        return super(IFIntervalFetcher, self).fetch(dname, startdate, **kwargs)