Beispiel #1
0
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()
Beispiel #2
0
    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))
Beispiel #3
0
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()
Beispiel #4
0
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()
Beispiel #5
0
    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)