def draw_stock_chart(request, symbol, startdate_str=None, enddate_str=None, lookback=None): ''' input: stock, date range, chart format generate chart object set all subcharts generate plot calc all data check date range - adjust if not all data available ''' stock = Stock.objects.get(name=symbol) if startdate_str: startdate = datestr2date(startdate_str) if enddate_str: enddate = datestr2date(enddate_str) if lookback and int(lookback) in Channel.LOOKBACKS: lookback = int(lookback) else: lookback = request.session.get('channel_lookback_period') if not lookback: lookback = Channel.YEAR stock.date_range = (startdate, enddate) chart = stock.chart(style='candle', size=(1024,600)) chart.draw_current_channel(lookback, startdate, enddate) chart.draw_channel_history(lookback) chart.draw_channel_parameters(lookback) chart.draw_channel_indicator(lookback) return chart.plot()
def handle(self, **options): #TODO: verbose option on (any) function that can be called if options.get('pool'): if options.get('pool_id'): print 'Error: pool and pool_id were found, only 1 must be '\ 'specified' raise SystemExit try: pool = Pool.objects.get(name=options.get('pool')) except ObjectDoesNotExist: print 'Error: pool {} was not found'.format(options.get('pool')) raise SystemExit elif options.get('pool_id'): try: pool = Pool.objects.get(id=options.get('pool_id')) except ObjectDoesNotExist: print 'Error: pool_id {} was not found'.format(options.get( 'pool_id')) raise SystemExit else: raise SystemExit('Error: A pool or pool_id must be specified') kwargs = {} if options.get('startdate'): try: kwargs['fromdate'] = datestr2date(options.get('startdate')) except ValueError, e: raise SystemExit('Error: {}'.format(e))
def custom_stock_chart(request, symbol, startdate_str=None, enddate_str=None): ''' TODO: MAKE GENERIC ''' stock = Stock.objects.get(name=symbol) if startdate_str: startdate = datestr2date(startdate_str) if enddate_str: enddate = datestr2date(enddate_str) stock.date_range = (startdate, enddate) chart = stock.chart(style='line', size=(1600,960)) #format for printing colours = ('green', 'orange', 'red', 'magenta', 'purple', 'blue') # chart.add_indicator('sumangle', {}, data='channel', colour='blue') from pricemanager.models import Pool pool = Pool.objects.get(name='S&P500') pool.index.global_date_range = (pool.startdate, datetime.date.today()) chart.new_area(1) for lookback, colour in zip(Channel.LOOKBACKS, colours): if lookback == Channel.YEAR: chart.add_indicator('pool_market', {'pool': pool, 'lookback': lookback}, data='channel', colour=colour) # if lookback == Channel.TWOMONTHS: # break # chart.add_indicator('pool_market', {'pool': pool, 'lookback': Channel.MONTH}, data='channel', colour='blue') # chart.new_area(1) # for lookback, colour in zip(Channel.LOOKBACKS, colours): # chart.add_indicator('angle', {'lookback': lookback}, data='channel', # colour=colour, scale=lookback/100) # chart.new_area(1) # chart.add_indicator('sumwidth', {}, data='channel', colour='blue') # # chart.new_area(1) # for lookback, colour in zip(Channel.LOOKBACKS, colours): # chart.add_indicator('width', {'lookback': lookback}, data='channel', # colour=colour, scale=10/lookback**0.5) return chart.plot()
def draw_market_chart(request, system_id, startdate_str=None, enddate_str=None): ''' Return a png plot with the pool index coloured by market condition. ''' system = System.objects.get(id=system_id) metasystem = system.metasystem metasystem.make_system(system.params) if startdate_str: startdate = datestr2date(startdate_str) else: startdate = metasystem.startdate if enddate_str: enddate = datestr2date(enddate_str) else: enddate = metasystem.enddate index = metasystem.pool.index index.date_range = (startdate, enddate) markettype = metasystem.markettype chart = index.chart(style='market_type', size=(1024, 480), markettype=markettype) return chart.plot()
def test_datestr2date(self): for data in self.validdata: self.assertEqual(du.datestr2date(data['str']), data['date']) invaliddateformats = ('1', '11', '111', '1111', '11111', '1111111', '111111111', '1111111111', '1111011', '1101111', '031-1-00', '31-001-00', '31-1-000', '31-1-20001', 'a1-1-00', ) for date in invaliddateformats: self.assertRaises(ValueError, du.datestr2date, date) invaliddates = ('31/1/00', '01-31-00', '20010229') for date in invaliddates: self.assertRaises(ValueError, du.datestr2date, date)