def fetch(market): bars = api.market_bars(market['MarketId'], interval=opts.interval.upper(), span=opts.span, bars=opts.bars)['PriceBars'] if opts.raw: pad_count = 0 else: orig = len(bars) bars = pad_bars(bars, interval=opts.span * 60) pad_count = len(bars) - orig if opts.chop: bars = bars[-opts.bars:] filename = base.filename_for(opts, market, kind='bars_%s%s' % (opts.span, opts.interval[0].upper())) with file(filename, 'w') as fp: writer = csv.writer(fp, quoting=csv.QUOTE_ALL) write = writer.writerow write(('UtcTime', 'Open', 'High', 'Low', 'Close')) for bar in bars: write((tsformat(bar), bar['Open'], bar['High'], bar['Low'], bar['Close'])) print 'Wrote %d bars for %d/%s to %r (padded:%d, first:%r, last:%r)' %\ (len(bars), market['MarketId'], market['Name'], filename, pad_count, bars and tsformat(bars[0]), bars and tsformat(bars[-1]))
def main(opts, args, api, streamer, searcher): if not args: print 'Need at least one symbol to lookup.' return for i in xrange(len(args)): args[i] += opts.suffix or '' stdout = make_writer(sys.stdout) stdout.writerow(HEADER) market_writer_map = {} def dump(price): if not price['MarketId']: return s, market = markets[price['MarketId']] row = price_to_row(market, price) stdout.writerow(row) market_writer_map[price['MarketId']].writerow(row) markets, unknown = base.threaded_lookup(searcher, args) if unknown: print '# Unknown:', ', '.join(unknown) for market_id, (ric, market) in markets.iteritems(): fp = file(base.filename_for(opts, market, kind='ticks'), 'a', 1) writer = csv.writer(fp, quoting=csv.QUOTE_ALL) market_writer_map[market_id] = writer if os.path.getsize(fp.name) == 0: writer.writerow(HEADER) streamer.prices.listen(dump, market_id) raw_input() streamer.stop()