コード例 #1
0
    def __init__(self,panelFeed, frequency, marketType=bar.Market.STOCK, maxLen=None):
        '''
        :param panelFeed:
        :param resampleTo: resamplebase.Frequency.(MINUT HOUR DAY WEEK MONTH)
        :param maxLen:
        '''
        if not isinstance(panelFeed, baseFeed.PanelFeed):
            raise Exception("panelFeed must be a baseFeed.panelFeed instance")

        if maxLen is None:
            maxLen = panelFeed.maxLen

        super(ResampledPanelFeed,self).__init__(panelFeed.getDataSource(), panelFeed.getInstruments(), frequency, maxLen)
        self.dataSource = None  #reset dataSource
        self.market = marketType
        self.panelFeed = panelFeed
        self.grouper = PanelGrouper(panelFeed)
        self.isResampleFeed = True
        self.range = None
        self.__currentDateTime = np.nan

        self.__needUpdateResampleBar = ResampleState.NOTHING
        self.__laggedTime = None

        self.__nearlyEndingEvent = observer.Event()
        self.__updateValuesEvent = observer.Event()

        panelFeed.getNewPanelsEvent(priority=panelFeed.EventPriority.RESAMPLE).subscribe(self.__onNewValues)
コード例 #2
0
ファイル: dispatcher.py プロジェクト: ctipath/pyalgotrade
 def __init__(self):
     self.__subjects = []
     self.__stop = False
     self.__startEvent = observer.Event()
     self.__idleEvent = observer.Event()
     self.__currDateTime = None
     self.__gotError = False
コード例 #3
0
 def __init__(self, sleepInterval=0.1):
     self._sleepInterval = sleepInterval
     self.__subjects = []
     self.__stop = False
     self.__startEvent = observer.Event()
     self.__idleEvent = observer.Event()
     self.__currDateTime = None
コード例 #4
0
    def __init__(self, currency, apiKey, apiSecret, ignoreMultiCurrency=False):
        if currency not in ["USD", "AUD", "CAD", "CHF", "CNY", "DKK", "EUR", "GBP", "HKD", "JPY", "NZD", "PLN", "RUB", "SEK", "SGD", "THB", "NOK", "CZK"]:
            raise Exception("Invalid currency")

        self.__currency = currency
        self.__apiKey = apiKey
        self.__apiSecret = apiSecret
        self.__ignoreMultiCurrency = ignoreMultiCurrency

        self.__thread = None
        self.__queue = Queue.Queue()
        self.__initializationFailed = None
        self.__stopped = False
        self.__tickerEvent = observer.Event()
        self.__tradeEvent = observer.Event()
        self.__userOrderEvent = observer.Event()
        self.__wsClient = None
        self.__enableReconnection = True

        # Build papertrading/livetrading objects.
        if apiKey is None or apiSecret is None:
            self.__paperTrading = True
        else:
            self.__paperTrading = False
            self.__httpClient = httpclient.HTTPClient(apiKey, apiSecret, currency)
コード例 #5
0
    def testEmitOrder(self):
        handlersData = []

        def handler3():
            handlersData.append(3)

        def handler1():
            handlersData.append(1)

        def handler2():
            handlersData.append(2)

        event = observer.Event()
        event.subscribe(handler1)
        event.subscribe(handler2)
        event.subscribe(handler3)
        event.emit()
        self.assertTrue(handlersData == [1, 2, 3])

        handlersData = []
        event = observer.Event()
        event.subscribe(handler3)
        event.subscribe(handler2)
        event.subscribe(handler1)
        event.emit()
        self.assertTrue(handlersData == [3, 2, 1])
コード例 #6
0
 def new_init(self, maxLen=None):
     super(dataseries.SequenceDataSeries, self).__init__()
     maxLen = dataseries.get_checked_max_len(maxLen)
     self._SequenceDataSeries__newValueEvent = observer.Event()
     self._SequenceDataSeries__values = collections.ListDeque(maxLen)
     self._SequenceDataSeries__dateTimes = collections.ListDeque(maxLen)
     self.updateValueEvent = observer.Event()
コード例 #7
0
 def __init__(self):
     self.__thread = None
     self.__initializationOk = None
     self.__wsClient = None
     self.__enableReconnection = False
     self.__stopped = False
     self.__tradeEvent = observer.Event()
     self.__orderBookUpdateEvent = observer.Event()
コード例 #8
0
 def __init__(self, maxLen=None):
     super(LiveTradeFeed, self).__init__(bar.Frequency.TRADE, maxLen)
     self.__barDicts = []
     self.registerInstrument(common.INSTRUMENT_TOKEN)
     self.__prevTradeDateTime = None
     self.__prevTradeDateTimeDupCount = 0
     self.__wsclient = None
     self.__initializationOk = None
     self.__enableReconnection = True
     self.__stopped = False
     self.__tickerUpdateEvent = observer.Event()
     self.__orderBookModificationEvent = observer.Event()
     self.__orderBookRemovalEvent = observer.Event()
コード例 #9
0
    def __init__(self,
                 symbol=["XBTUSD"],
                 resample_frequancy=60,
                 test=True,
                 config=None,
                 api_key=None,
                 api_secret=None,
                 maxLen=None):
        super(LiveTradeFeed, self).__init__(bar.Frequency.TRADE, maxLen)
        self.__barDicts = []
        symbol = symbol if isinstance(symbol, list) else symbol.split(',')
        for aSymbol in reversed(symbol):
            self.registerInstrument(aSymbol)
            common.btc_symbol = aSymbol
        self.__prevTradeDateTime = None
        self.__thread = None
        self.__wsClientConnected = False
        self.__enableReconnection = True
        self.__stopped = False
        self.endpoint = "https://testnet.bitmex.com/api/v1" if test else "https://www.bitmex.com/api/v1"
        self.__httpClient = None
        for _ in range(3):
            try:
                self.__httpClient = bitmex.bitmex(test=test,
                                                  config=config,
                                                  api_key=api_key,
                                                  api_secret=api_secret)
                break
            except Exception as e:
                common.logger.info("http error: " + str(e))
        if self.__httpClient is None:
            raise Exception("http error")
        self.symbol = symbol
        self.api_key = api_key
        self.api_secret = api_secret
        self.__orderBookUpdateEvent = observer.Event()
        self.__onMargin = observer.Event()
        self.__onExecution = observer.Event()
        self.__onOrder = observer.Event()
        self.__onPostition = observer.Event()

        self.resample_frequancy = resample_frequancy
        if resample_frequancy / 60 >= 60 * 60 * 24:
            self.bin_size = '1d'
        elif resample_frequancy / 60 >= 60 * 60:
            self.bin_size = '1h'
        elif resample_frequancy / 60 >= 60 * 5:
            self.bin_size = '5m'
        else:
            self.bin_size = '1m'
コード例 #10
0
    def __init__(self, colNames, maxLen=None, dtype=np.float32):
        '''
        :param maxLen: 默认按列增长,列为时间
        :param colNames: 行为codes
        '''
        self.__dtype = dtype
        self.__maxLen = get_checked_max_len(maxLen)
        self.__colLen = len(colNames)

        self.__cols = np.array(colNames)
        self.__dateTimes = collections.ListDeque(self.__maxLen)  # rows
        self.__values = collections.NumpyPanelDeque(self.__maxLen,
                                                    len(colNames),
                                                    dtype=dtype)
        self.__newValuesEvent = observer.Event()
        self.__updateValuesEvent = observer.Event()
コード例 #11
0
    def __init__(self, feedDict=None, panelDict=None):
        '''
        :param feedDict: {lable: panelFeed}
        '''
        self.feedDict = feedDict if feedDict is not None else {}
        self.panelDict = panelDict if panelDict is not None else {}

        self.resamples = {}  #重采样数据
        self.dataSource = {}
        self.instruments = None
        self.frequency = np.inf
        self.maxLen = 0
        self.__currentDatetime = None
        self.setUseEventDateTimeInLogs(True)

        self.synchronizedNextValue = {}  # lable : (dateTime, value)
        self.isEof = False
        self.stopped = False
        self.available = None
        self.allAvailable = None

        self.__panelEvents = collections.OrderedDict({
            e: observer.Event()
            for e in PanelFeed.EventPriority.getEventsType()
        })

        for lable, value in self.feedDict.items():
            self.attachFeed(lable, value)
        for lable, value in self.panelDict.items():
            self.attachPanel(lable, value)  # 更新sequenceDataPanel
コード例 #12
0
 def __init__(self, maxLen=None):
     super(SequenceDataSeries, self).__init__()
     maxLen = get_checked_max_len(maxLen)
     
     self.__newValueEvent = observer.Event()
     self.__values = collection.ListDeque(maxLen)
     self.__dateTimes = collection.ListDeque(maxLen)
コード例 #13
0
    def __init__(self, maxLen=DEFAULT_MAX_LEN):
        if not maxLen > 0:
            raise Exception("Invalid maximum length")

        self.__newValueEvent = observer.Event()
        self.__values = collections.ListDeque(maxLen)
        self.__dateTimes = collections.ListDeque(maxLen)
コード例 #14
0
 def __init__(self):
     self.__netRet = 0
     self.__cumRet = 0
     self.__lastBars = {}  # Last Bar per instrument.
     self.__posTrackers = {}
     self.__useAdjClose = False
     self.__event = observer.Event()
コード例 #15
0
    def __init__(self,
                 consumerKey,
                 consumerSecret,
                 accessToken,
                 accessTokenSecret,
                 track=[],
                 follow=[],
                 languages=[]):
        assert isinstance(track, list), "track must be a list"
        assert isinstance(follow, list), "follow must be a list"
        assert isinstance(languages, list), "languages must be a list"

        super(TwitterFeed, self).__init__()

        self.__event = observer.Event()
        self.__queue = Queue.Queue()
        self.__thread = None
        self.__running = False

        listener = Listener(self.__queue)
        auth = tweepy.OAuthHandler(consumerKey, consumerSecret)
        auth.set_access_token(accessToken, accessTokenSecret)
        self.__stream = tweepy.Stream(auth, listener)
        self.__track = track
        self.__follow = follow
        self.__languages = languages
コード例 #16
0
ファイル: feed.py プロジェクト: louisr/pyalgotrade
    def __init__(self,
                 consumerKey,
                 consumerSecret,
                 accessToken,
                 accessTokenSecret,
                 track=[],
                 follow=[],
                 languages=[]):
        if type(track) != types.ListType:
            raise Exception("track must be a list")
        if type(follow) != types.ListType:
            raise Exception("follow must be a list")
        if type(languages) != types.ListType:
            raise Exception("languages must be a list")

        self.__event = observer.Event()
        self.__queue = Queue.Queue()
        self.__thread = None
        self.__running = False

        listener = Listener(self.__queue)
        auth = tweepy.OAuthHandler(consumerKey, consumerSecret)
        auth.set_access_token(accessToken, accessTokenSecret)
        self.__stream = tweepy.Stream(auth, listener)
        self.__track = track
        self.__follow = follow
        self.__languages = languages
コード例 #17
0
    def __init__(self, barFeed, broker):
        assert isinstance(barFeed, pyalgotrade.barfeed.BaseBarFeed
                          ), "barFeed is not a subclass of barfeed.BaseBarFeed"
        assert isinstance(broker, pyalgotrade.broker.Broker
                          ), "broker is not a subclass of broker.Broker"

        self.__barFeed = barFeed
        self.__broker = broker
        self.__activePositions = set()
        self.__orderToPosition = {}
        self.__barsProcessedEvent = observer.Event()
        self.__analyzers = []
        self.__namedAnalyzers = {}
        self.__resampledBarFeeds = []
        self.__dispatcher = dispatcher.Dispatcher()
        self.__broker.getOrderUpdatedEvent().subscribe(self.__onOrderEvent)
        self.__barFeed.getNewValuesEvent().subscribe(self.__onBars)
        self.__resultCurrency = "USD"

        # onStart will be called once all subjects are started.
        self.__dispatcher.getStartEvent().subscribe(self.onStart)
        self.__dispatcher.getIdleEvent().subscribe(self.__onIdle)

        # It is important to dispatch broker events before feed events, specially if we're backtesting.
        self.__dispatcher.addSubject(self.__broker)
        self.__dispatcher.addSubject(self.__barFeed)

        # Initialize logging.
        self.__logger = logger.getLogger(BaseStrategy.LOGGER_NAME)
コード例 #18
0
ファイル: __init__.py プロジェクト: ygs1985ygs/pyalgotrade3
    def __init__(self, maxLen):
        super(BaseFeed, self).__init__()

        maxLen = dataseries.get_checked_max_len(maxLen)

        self.__ds = {}
        self.__event = observer.Event()
        self.__maxLen = maxLen
コード例 #19
0
    def __init__(self, superPanel, indexValues, dataValues, name=None):

        self.__superPanel = superPanel
        self.index = indexValues
        self.values = dataValues
        self.name = name
        self.__superPanel.getNewValuesEvent().subscribe(self.onNewValue)
        self.__newValueEvent = observer.Event()
コード例 #20
0
 def __init__(self, frequency, maxLen=dataseries.DEFAULT_MAX_LEN):
     assert (maxLen == None or maxLen > 0)
     self.__ds = {}
     self.__defaultInstrument = None
     self.__newBarsEvent = observer.Event()
     self.__currentBars = None
     self.__lastBars = {}
     self.__frequency = frequency
     self.__maxLen = maxLen
コード例 #21
0
ファイル: __init__.py プロジェクト: yuanpengwu/WYPFinance
 def __init__(self, maxLen=DEFAULT_MAX_LEN):
     assert (maxLen == None or maxLen > 0)
     self.__newValueEvent = observer.Event()
     # I'm not using collections.deque because:
     # 1: Random access is slower.
     # 2: Slicing is not supported.
     self.__values = []
     self.__dateTimes = []
     self.__maxLen = maxLen
コード例 #22
0
    def __init__(self,
                 dataSource,
                 instruments,
                 frequency=bar.Frequency.MINUTE,
                 maxLen=None):

        self.dataSource = dataSource
        self.instruments = sorted(instruments)
        self.maxLen = maxLen
        self.frequency = frequency
        self.__currentDatetime = None
        self.fields = list(self.dataSource.fields)
        self.stopped = False
        self.setUseEventDateTimeInLogs(True)

        if 'open' in self.fields:
            assert instruments == sorted(
                instruments), 'OHLCV columns must be sorted!'
            self.openPanel = series.SequenceDataPanel(
                instruments, self.maxLen, dtype=np.float32)  # 定义了一个类
            self.highPanel = series.SequenceDataPanel(instruments,
                                                      self.maxLen,
                                                      dtype=np.float32)
            self.lowPanel = series.SequenceDataPanel(instruments,
                                                     self.maxLen,
                                                     dtype=np.float32)
            self.closePanel = series.SequenceDataPanel(instruments,
                                                       self.maxLen,
                                                       dtype=np.float32)
            self.volumePanel = series.SequenceDataPanel(
                instruments, self.maxLen)

            self.barFeeds = {}
            for instrument in instruments:
                self.barFeeds[instrument] = BarFeed(
                    self,
                    instrument=instrument,
                    dateTimes=self.closePanel.getDateTimes(),
                    _open=self.openPanel[instrument],
                    _high=self.highPanel[instrument],
                    _low=self.lowPanel[instrument],
                    _close=self.closePanel[instrument],
                    volume=self.volumePanel[instrument],
                    frequency=self.frequency,
                    maxLen=self.maxLen)

        self.fields = list(self.dataSource.fields)
        self.extraPanel = {}
        for field in self.fields:
            if field not in Field.OHLCV:
                self.extraPanel[field] = series.SequenceDataPanel(
                    instruments, maxLen, dtype=np.float32)

        self.__panelEvents = collections.OrderedDict(
            {e: observer.Event()
             for e in self.EventPriority.getEventsType()})
コード例 #23
0
    def __init__(self, cash, commission=None):
        assert (cash >= 0)
        self.__cash = cash

        if commission is None:
            self.__commission = NoCommission()
        else:
            self.__commission = commission

        self.__orderUpdatedEvent = observer.Event()
コード例 #24
0
    def testDuplicateHandlers(self):
        def handler1():
            handlersData.append(1)

        handlersData = []
        event = observer.Event()
        event.subscribe(handler1)
        event.subscribe(handler1)
        event.emit()
        self.assertTrue(handlersData == [1])
コード例 #25
0
 def __init__(self, maxLen=None):
     super(LiveTradeFeed, self).__init__(bar.Frequency.TRADE, maxLen)
     self.__barDicts = []
     self.registerInstrument(common.btc_symbol)
     self.__prevTradeDateTime = None
     self.__thread = None
     self.__initializationOk = None
     self.__enableReconnection = True
     self.__stopped = False
     self.__orderBookUpdateEvent = observer.Event()
コード例 #26
0
    def __init__(self, calendarObj, maxLen):
        # super(BaseFeed, self).__init__()

        maxLen = dataseries.get_checked_max_len(maxLen)

        self.__ds = {}
        self.__event = observer.Event()
        self.__maxLen = maxLen

        #lw添加
        self.__canlendarObj = calendarObj
コード例 #27
0
ファイル: livefeed.py プロジェクト: krmeljalen/pyalgotrade
 def __init__(self, instrument="BTC", currency="USD", maxLen=None):
     super(LiveTradeFeed, self).__init__(bar.Frequency.TRADE, maxLen)
     self.__barDicts = []
     self.registerInstrument(instrument)
     self.__prevTradeDateTime = None
     self.__thread = None
     self.__wsClientConnected = False
     self.__enableReconnection = True
     self.__stopped = False
     self.__instrument = instrument
     self.__currency = currency
     self.__orderBookUpdateEvent = observer.Event()
コード例 #28
0
    def __init__(self, maxLen=dataseries.DEFAULT_MAX_LEN):
        if not isinstance(maxLen, int):
            raise Exception("Invalid type for maxLen parameter")

        barfeed.BaseBarFeed.__init__(self, bar.Frequency.TRADE, maxLen)
        self.__barDicts = []
        self.registerInstrument(common.btc_symbol)
        self.__prevTradeDateTime = None
        self.__thread = None
        self.__initializationOk = None
        self.__enableReconnection = True
        self.__stopped = False
        self.__orderBookUpdateEvent = observer.Event()
コード例 #29
0
ファイル: livefeed.py プロジェクト: aborodya/pyalgotrade
    def __init__(self, instruments, maxLen=None):
        super(LiveTradeFeed, self).__init__(bar.Frequency.TRADE, maxLen)
        self.__tradeBars = []
        self.__channels = []

        for instrument in instruments:
            instrument = build_instrument(instrument)
            self.__channels.append(common.instrument_to_channel(instrument))
            self.registerDataSeries(instrument)

        self.__thread = None
        self.__enableReconnection = True
        self.__stopped = False
        self.__orderBookUpdateEvent = observer.Event()
コード例 #30
0
    def __init__(self, bTestID):

        self.bTestID = bTestID

        self._stoploss_orders = []
        self.trade_orders = {}  # trade_orders[tradeo.orderID]=tradeo

        self.orderPostions = []

        # 这玩意用来记录平仓委托,本来trade_orders记录开仓委托就够了,对于止损逻辑
        #但是掘金回测这个傻逼玩意,ontrade中拿不到均价,所以只能在委托回报中先拿到,所以这里要存一下。
        self.clearOrders = {}

        self.stoplossOrderCreatedEvent = observer.Event()