Пример #1
0
def portfolio_stocks(user_id):
    '''Returns the list of stocks in a users portfolio'''
    portfolio_info = []
    stock_list = StockPortfolio.objects.filter(user=user_id)
    user = StockFolioUser.objects.filter(user=user_id)[0]
    money = {
        'spent': user.spent,
        'earnt': user.earnt,
        'value': 0,
        'profit': '+'
    }
    if stock_list:
        symbols = [stock.stock for stock in stock_list]
        if len(symbols) == 1:
            stock_data = [get_current_info(symbols)]
        else:
            stock_data = get_current_info(symbols)
        for stock in stock_data:
            for stock_from_list in stock_list:
                if stock_from_list.stock == stock['Symbol']:
                    stock['shares'] = stock_from_list.shares
                    stock['cost'] = int(stock_from_list.shares) * float(
                        stock['LastTradePriceOnly'])
                    money['value'] += float(stock['cost'])
        portfolio_info = [stock_data
                          ] if stock_data.__class__ == dict else stock_data
    if float(money['spent']) > (float(money['value']) + float(money['earnt'])):
        money['profit'] = '-'
    return {'portfolio_info': portfolio_info, 'money': money}
Пример #2
0
def portfolio(request):
  '''The main method for all the user functionality'''
  user_id = request.user.id
  if request.method == 'POST':
    which_form = request.POST.get('which-form', '').strip()
    if which_form == 'find-stock':
      symbol = request.POST.get('stock', '').strip().split(' ')[0].strip().upper()
      if symbol != '':
        portfolio_stock = portfolio_stocks(user_id)
        money = portfolio_stock['money']
        porfolio = portfolio_stock['portfolio_info']
        return render(request, 'StockFolio/portfolio.html', {'stock':get_current_info([''+symbol]), 'news' : get_news_feed(symbol), 'portfolio' : porfolio, 'portfolio_rows' : plot(user_id), 'symbols' : json.dumps(STOCK_SYMBOLS), 'money' : money})
    elif which_form == 'download-historical':
      return download_historical(request.POST.get('stock-symbol', '').strip())
    elif which_form == 'buy-stock':
      symbol = request.POST.get('stock-symbol', '').strip()
      StockPortfolio.buy(user_id, symbol, request.POST.get('shares', '').strip(), request.POST.get('cost-per-share', '').strip())
      portfolio_stock = portfolio_stocks(user_id)
      money = portfolio_stock['money']
      porfolio = portfolio_stock['portfolio_info']
      return render(request, 'StockFolio/portfolio.html', {'stock':get_current_info([''+symbol]), 'news' : get_news_feed(symbol), 'portfolio' : porfolio, 'portfolio_rows' : plot(user_id), 'symbols' : json.dumps(STOCK_SYMBOLS), 'money' : money})
    elif which_form == 'buy-sell':
      symbol = request.POST.get('stock-symbol', '').strip()
      if request.POST.get('buy-stock'):
        StockPortfolio.buy(user_id, symbol, request.POST.get('shares', '').strip(), request.POST.get('cost-per-share', '').strip())
      elif request.POST.get('sell-stock'):
        StockPortfolio.sell(user_id, symbol, request.POST.get('shares', '').strip(), request.POST.get('cost-per-share', '').strip())
      portfolio_stock = portfolio_stocks(user_id)
      money = portfolio_stock['money']
      porfolio = portfolio_stock['portfolio_info']
      return render(request, 'StockFolio/portfolio.html', {'stock':get_current_info([''+symbol]), 'news' : get_news_feed(symbol), 'portfolio' : porfolio, 'portfolio_rows' : plot(user_id), 'symbols' : json.dumps(STOCK_SYMBOLS), 'money' : money})
  portfolio_stock = portfolio_stocks(user_id)
  money = portfolio_stock['money']
  porfolio = portfolio_stock['portfolio_info']
  return render(request, 'StockFolio/portfolio.html', {'portfolio' : porfolio, 'portfolio_rows' : plot(user_id), 'symbols' : json.dumps(STOCK_SYMBOLS), 'money' : money})
Пример #3
0
def portfolio_stocks(user_id):
  '''Returns the list of stocks in a users portfolio'''
  portfolio_info = []
  stock_list = StockPortfolio.objects.filter(user=user_id)
  user = StockFolioUser.objects.filter(user=user_id)[0]
  money = {'spent' : user.spent, 'earnt' : user.earnt, 'value' : 0, 'profit': '+'}
  if stock_list:
    symbols = [stock.stock for stock in stock_list]
    if len(symbols) == 1:
      stock_data = [get_current_info(symbols)]
    else:
      stock_data = get_current_info(symbols)
    for stock in stock_data:
      for stock_from_list in stock_list:
        if stock_from_list.stock == stock['Symbol']:
          stock['shares'] = stock_from_list.shares
          stock['cost'] = int(stock_from_list.shares) * float(stock['LastTradePriceOnly'])
          money['value'] += float(stock['cost'])
    portfolio_info = [stock_data] if stock_data.__class__ == dict else stock_data
  if float(money['spent']) > (float(money['value']) + float(money['earnt'])):
    money['profit'] = '-'
  return {'portfolio_info' : portfolio_info, 'money' : money}
Пример #4
0
def portfolio(request):
    '''The main method for all the user functionality'''
    user_id = request.user.id
    if request.method == 'POST':
        which_form = request.POST.get('which-form', '').strip()

        if which_form == 'find-stock':
            symbol = request.POST.get(
                'stock', '').strip().split(' ')[0].strip().upper()
            if symbol != '':
                portfolio_stock = portfolio_stocks(user_id)
                money = portfolio_stock['money']
                porfolio = portfolio_stock['portfolio_info']

                return render(
                    request, 'StockFolio/portfolio.html', {
                        'stock': get_current_info(['' + symbol]),
                        'news': get_news_feed(symbol),
                        'portfolio': porfolio,
                        'portfolio_rows': plot(user_id),
                        'symbols': json.dumps(STOCK_SYMBOLS),
                        'money': money
                    })

        elif which_form == 'download-historical':
            return download_historical(
                request.POST.get('stock-symbol', '').strip())

        elif which_form == 'buy-stock':
            symbol = request.POST.get('stock-symbol', '').strip()
            StockPortfolio.buy(user_id, symbol,
                               request.POST.get('shares', '').strip(),
                               request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })

        elif which_form == 'recommend':
            symbol = request.POST.get('stock-symbol', '').strip()
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            reco = []
            my_stocks = []
            conn = sqlite3.connect('PyFolio.sqlite3')
            cur = conn.cursor()
            sql = ''' SELECT svm_prediction FROM stockapp_prediction_svm_all WHERE symbol LIKE "%''' + symbol + '''%" '''
            sql2 = ''' SELECT ANN_prediction FROM stockapp_prediction_svm_all WHERE symbol LIKE "%''' + symbol + '''%" '''

            cur.execute(sql)
            result = cur.fetchall()

            cur.execute(sql2)
            result2 = cur.fetchall()

            for i in range(30):
                reco.append(result[i][0])

            stock_price = float(Share(symbol).get_price())
            for i in range(len(portfolio_stock['portfolio_info'])):
                my_stocks.append(
                    portfolio_stock['portfolio_info'][i]['symbol'])

            if 1.1 * stock_price > reco[29]:
                if symbol in my_stocks:
                    msg = "Sell this stock to avoid long term losses"
                else:
                    msg = "Stock is not in your portfolio"
            elif 1.1 * stock_price > reco[29] > stock_price:
                if symbol in my_stocks:
                    msg = "Hold the Stock for long term"
                else:
                    msg = "Stock is not in your portfolio"
            else:
                msg = "Buy this stock for long term gains"

            if result2[0][0] > stock_price + 2:
                msg = msg + " and buy for short term gains"
            elif stock_price < result2[0][0] < stock_price + 2:
                msg = msg + " and hold for short term"
            else:
                msg = msg + " and sell to avoid short term losses"

            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money,
                    'value_reco': msg
                })

        elif which_form == 'buy-sell':
            symbol = request.POST.get('stock-symbol', '').strip()
            if request.POST.get('buy-stock'):
                StockPortfolio.buy(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            elif request.POST.get('sell-stock'):
                StockPortfolio.sell(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })

    portfolio_stock = portfolio_stocks(user_id)
    money = portfolio_stock['money']
    porfolio = portfolio_stock['portfolio_info']

    return render(
        request, 'StockFolio/portfolio.html', {
            'portfolio': porfolio,
            'portfolio_rows': plot(user_id),
            'symbols': json.dumps(STOCK_SYMBOLS),
            'money': money
        })
Пример #5
0
def portfolio(request):
    '''The main method for all the user functionality'''
    user_id = request.user.id
    if request.method == 'POST':
        which_form = request.POST.get('which-form', '').strip()
        if which_form == 'find-stock':
            symbol = request.POST.get(
                'stock', '').strip().split(' ')[0].strip().upper()
            if symbol != '':
                portfolio_stock = portfolio_stocks(user_id)
                money = portfolio_stock['money']
                porfolio = portfolio_stock['portfolio_info']
                return render(
                    request, 'StockFolio/portfolio.html', {
                        'stock': get_current_info(['' + symbol]),
                        'news': get_news_feed(symbol),
                        'portfolio': porfolio,
                        'portfolio_rows': plot(user_id),
                        'symbols': json.dumps(STOCK_SYMBOLS),
                        'money': money
                    })
        elif which_form == 'download-historical':
            return download_historical(
                request.POST.get('stock-symbol', '').strip())
        elif which_form == 'buy-stock':
            symbol = request.POST.get('stock-symbol', '').strip()
            StockPortfolio.buy(user_id, symbol,
                               request.POST.get('shares', '').strip(),
                               request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })
        elif which_form == 'buy-sell':
            symbol = request.POST.get('stock-symbol', '').strip()
            if request.POST.get('buy-stock'):
                StockPortfolio.buy(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            elif request.POST.get('sell-stock'):
                StockPortfolio.sell(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })
    portfolio_stock = portfolio_stocks(user_id)
    money = portfolio_stock['money']
    porfolio = portfolio_stock['portfolio_info']
    return render(
        request, 'StockFolio/portfolio.html', {
            'portfolio': porfolio,
            'portfolio_rows': plot(user_id),
            'symbols': json.dumps(STOCK_SYMBOLS),
            'money': money
        })
Пример #6
0
def portfolio(request):
    '''The main method for all the user functionality'''
    user_id = request.user.id
    if request.method == 'POST':
        which_form = request.POST.get('which-form', '').strip()

        if which_form == 'find-stock':
            symbol = request.POST.get(
                'stock', '').strip().split(' ')[0].strip().upper()
            if symbol != '':
                portfolio_stock = portfolio_stocks(user_id)
                money = portfolio_stock['money']
                porfolio = portfolio_stock['portfolio_info']

                return render(
                    request, 'StockFolio/portfolio.html', {
                        'stock': get_current_info(['' + symbol]),
                        'news': get_news_feed(symbol),
                        'portfolio': porfolio,
                        'stock_rows': plot(user_id),
                        'symbols': json.dumps(STOCK_SYMBOLS),
                        'money': money
                    })

        elif which_form == 'download-historical':
            return download_historical(
                request.POST.get('stock-symbol', '').strip())

        elif which_form == 'buy-stock':
            symbol = request.POST.get('stock-symbol', '').strip()
            StockPortfolio.buy(user_id, symbol,
                               request.POST.get('shares', '').strip(),
                               request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })

        elif which_form == 'recommend':
            symbol = request.POST.get('stock-symbol', '').strip()
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            reco_svm = []
            my_stocks = []
            conn = sqlite3.connect('PyFolio.sqlite3')
            cur = conn.cursor()
            sql = ''' SELECT svm_prediction FROM stockapp_prediction_svm_all WHERE symbol LIKE "%''' + symbol + '''%" '''
            sql2 = ''' SELECT ANN_prediction FROM stockapp_prediction_svm_all WHERE symbol LIKE "%''' + symbol + '''%" '''
            sql3 = ''' SELECT bayesian_prediction FROM stockapp_prediction_svm_all WHERE symbol LIKE "%''' + symbol + '''%" '''

            cur.execute(sql)
            result = cur.fetchall()

            cur.execute(sql2)
            reco_ann = cur.fetchall()

            cur.execute(sql3)
            reco_bay = cur.fetchall()

            for i in range(30):
                reco_svm.append(result[i][0])

            stock_price = float(Share(symbol).get_price())
            for i in range(len(portfolio_stock['portfolio_info'])):
                my_stocks.append(
                    portfolio_stock['portfolio_info'][i]['symbol'])

            x, y = 0, 0

            if float(reco_ann[0][0]) > float(stock_price) + 5 or float(
                    reco_svm[29]) > 1.05 * float(stock_price):
                x, y = 0, 0
                if float(reco_ann[0][0]) > float(stock_price) + 5 and float(
                        reco_ann[0][0]) <= 1.1 * float(stock_price):
                    x = 1
                elif float(reco_svm[29]) > 1.05 * float(stock_price) and float(
                        reco_svm[29]) <= 1.1 * float(stock_price):
                    y = 1

                if float(reco_ann[0][0]) > float(stock_price) + 5 and float(
                        reco_svm[29]) > 1.05 * float(stock_price):
                    x, y = 1, 1

                if (x == 1 and y == 0):
                    message = "Buy for Short term gains"

                elif (y == 1 and x == 0):
                    message = "Buy for Long term gains"

                elif (y == 1 and x == 1):
                    message = "Buy for short and long term gains"

            if symbol in my_stocks:
                if float(reco_ann[0][0]) < float(stock_price) + 5 and float(
                        reco_ann[0]
                    [0]) > float(stock_price) - 5 and float(
                        reco_svm[29]) <= 1.05 * float(stock_price) and float(
                            reco_svm[29]) > 0.95 * float(stock_price):
                    x, y = 0, 0
                    if float(
                            reco_ann[0][0]) < float(stock_price) + 5 and float(
                                reco_ann[0][0]) > float(stock_price) - 5:
                        x = 1
                    elif float(reco_svm[29]
                               ) <= 1.05 * float(stock_price) and float(
                                   reco_svm[29]) > 0.95 * float(stock_price):
                        y = 1

                    if float(reco_ann[0][0]) < float(stock_price) + 5 and float(
                            reco_ann[0][0]) > float(stock_price) - 5 and float(
                                reco_svm[29]
                            ) <= 1.05 * float(stock_price) and float(
                                reco_svm[29]) > 0.95 * float(stock_price):
                        x, y = 1, 1

                    if (x == 1 and y == 0):
                        message = "HOLD"

                    elif (y == 1 and x == 0):
                        message = "HOLD"

                    elif (y == 1 and x == 1):
                        message = "HOLD"
            else:
                message = "Stock not in your portfolio"

            if symbol in my_stocks:
                if float(reco_ann[0][0]) < float(stock_price) - 5 and float(
                        reco_ann[0]
                    [0]) >= 0.90 * float(stock_price) or float(
                        reco_svm[29]) < 0.95 * float(stock_price) and float(
                            reco_svm[29]) > 0.90 * float(stock_price):
                    x, y = 0, 0
                    if float(
                            reco_ann[0][0]) > float(stock_price) - 5 and float(
                                reco_ann[0][0]) > 0.90 * float(stock_price):
                        x = 1
                    elif float(reco_svm[29]
                               ) > 0.95 * float(stock_price) and float(
                                   reco_svm[29]) > 0.90 * float(stock_price):
                        y = 1

                    if float(
                            reco_ann[0][0]) > float(stock_price) - 5 and float(
                                reco_ann[0]
                                [0]) >= 0.90 * float(stock_price) and float(
                                    reco_svm[29]
                                ) > 0.95 * float(stock_price) and float(
                                    reco_svm[29]) > 0.90 * float(stock_price):
                        x, y = 1, 1

                    if (x == 1 and y == 0):
                        message = "SELL"

                    elif (y == 1 and x == 0):
                        message = "SELL"

                    elif (y == 1 and x == 1):
                        message = "SELL"
            else:
                message = "Stock not in your portfolio"

            ann_pred = "Tomorrow's predicted price: " + str(reco_ann[0][0])

            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money,
                    'value_reco': message,
                    'ann_pred': ann_pred
                })

        elif which_form == 'buy-sell':
            symbol = request.POST.get('stock-symbol', '').strip()
            if request.POST.get('buy-stock'):
                StockPortfolio.buy(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            elif request.POST.get('sell-stock'):
                StockPortfolio.sell(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })

    portfolio_stock = portfolio_stocks(user_id)
    money = portfolio_stock['money']
    porfolio = portfolio_stock['portfolio_info']

    return render(
        request, 'StockFolio/portfolio.html', {
            'portfolio': porfolio,
            'portfolio_rows': plot(user_id),
            'symbols': json.dumps(STOCK_SYMBOLS),
            'money': money
        })
Пример #7
0
def portfolio(request):
    '''The main method for all the user functionality'''
    user_id = request.user.id
    if request.method == 'POST':
        which_form = request.POST.get('which-form', '').strip(
        )  # .strip() with no arguments (or None as the first argument) removes all whitespace at the start and end, including spaces, tabs, newlines and carriage returns.
        if which_form == 'find-stock':
            symbol = request.POST.get(
                'stock', '').strip().split(' ')[0].strip().upper()
            if symbol != '':
                portfolio_stock = portfolio_stocks(user_id)
                money = portfolio_stock['money']
                porfolio = portfolio_stock['portfolio_info']
                stock_quote = execute_query_alpha(
                    function="GLOBAL_QUOTE",
                    symbol=symbol,
                )['Global Quote']
                print(stock_quote)
                return render(
                    request, 'StockFolio/portfolio.html', {
                        'stock': stock_quote,
                        'portfolio': porfolio,
                        'portfolio_rows': plot(user_id),
                        'symbols': json.dumps(STOCK_SYMBOLS),
                        'money': money
                    })
                # return render(request, 'StockFolio/portfolio.html',
                #               {'stock': get_current_info(['' + symbol]), 'news': get_news_feed(symbol), 'portfolio': porfolio, 'portfolio_rows': plot(user_id), 'symbols': json.dumps(STOCK_SYMBOLS), 'money': money})
        elif which_form == 'download-historical':
            return download_historical(
                request.POST.get('stock-symbol', '').strip())
        elif which_form == 'buy-stock':
            symbol = request.POST.get('stock-symbol', '').strip()
            StockPortfolio.buy(user_id, symbol,
                               request.POST.get('shares', '').strip(),
                               request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })
        elif which_form == 'buy-sell':
            symbol = request.POST.get('stock-symbol', '').strip()
            if request.POST.get('buy-stock'):
                StockPortfolio.buy(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            elif request.POST.get('sell-stock'):
                StockPortfolio.sell(
                    user_id, symbol,
                    request.POST.get('shares', '').strip(),
                    request.POST.get('cost-per-share', '').strip())
            portfolio_stock = portfolio_stocks(user_id)
            money = portfolio_stock['money']
            porfolio = portfolio_stock['portfolio_info']
            return render(
                request, 'StockFolio/portfolio.html', {
                    'stock': get_current_info(['' + symbol]),
                    'news': get_news_feed(symbol),
                    'portfolio': porfolio,
                    'portfolio_rows': plot(user_id),
                    'symbols': json.dumps(STOCK_SYMBOLS),
                    'money': money
                })
    portfolio_stock = portfolio_stocks(user_id)
    money = portfolio_stock['money']
    porfolio = portfolio_stock['portfolio_info']
    return render(
        request, 'StockFolio/portfolio.html', {
            'portfolio': porfolio,
            'portfolio_rows': plot(user_id),
            'symbols': json.dumps(STOCK_SYMBOLS),
            'money': money
        })