Пример #1
0
def edit(request):
    try:
        body = json.loads(request.body.decode('utf-8'))
        user = get_user(request)
        portfolio = Portfolio.objects.get(email=user.email)

        for so in portfolio.get_stock_ownerships():
            so.delete()
        #print(body)
        for s in body["stocks"]:
            ticker = s["ticker"]
            for t in s["transactions"]:
                add_result = portfolio.add_stock(ticker, t["date"],
                                                 int(t["volume"]),
                                                 float(t["price"]))

                if add_result['message'] != "Success":
                    print("Returned ", add_result)
                    return HttpResponseBadRequest(json.dumps(add_result))

        for so in portfolio.get_stock_ownerships():
            so.recalculate()
    except Exception as e:
        print(e)
        raise e
        return HttpResponseBadRequest()
    return HttpResponse()
Пример #2
0
def metrics(request):
    try:
        user = get_user(request)
        portfolio = Portfolio.objects.get(email=user.email)

        scores = {"beta_score": 0, "profit_score": 0, "volatility_score": 0}
        suggestions = []

        if len(portfolio.get_stock_ownerships()) > 0:
            scores["beta_score"] = round(calc_diversification_score(portfolio))
            scores["profit_score"] = round(calc_profit_score(portfolio))
            scores["volatility_score"] = round(
                calc_volatility_score(portfolio))

            suggestions.append(get_suggestions("beta", scores["beta_score"]))
            suggestions.append(
                get_suggestions("profit", scores["profit_score"]))
            suggestions.append(
                get_suggestions("volatility", scores["volatility_score"]))

        responseData = {"scores": scores, "suggestions": suggestions}

        return HttpResponse(json.dumps(responseData))
    except Exception as e:
        raise e
        pass
    return HttpResponseBadRequest()
Пример #3
0
def rank(request, reverse=True):
    try:
        n = int(request.GET.get("n"))

        user = get_user(request)
        portfolio = Portfolio.objects.get(email=user.email)

        profit_margins = []

        for stockOwnership in StockOwnership.objects.filter(owner=portfolio):
            profit_margins.append({
                "name":
                str(stockOwnership.get_stock_name()),
                "ticker":
                str(stockOwnership.get_stock_ticker()),
                "price":
                stock_api.get_price(stockOwnership.get_stock_ticker()),
                "profit_margin":
                stockOwnership.calc_profit_margin()
            })

        profit_margins.sort(reverse=reverse,
                            key=lambda pm: pm["profit_margin"])
        profit_margins = profit_margins[:min(len(profit_margins), n)]

        ret = {"stocks": []}
        ret["stocks"] = profit_margins

        return HttpResponse(json.dumps(ret))
    except Exception as e:
        raise e
        return HttpResponseBadRequest("portfolio best bad request")
    return HttpResponseBadRequest("portfolio best really bad request")
Пример #4
0
def get_watchlists(request):
    #get all watchlists associated with a user
    user = get_user(request)
    ret = {"watchlists": []}

    for wl in Watchlist.objects.filter(user=user):
        ret["watchlists"].append({"id": wl.id, "label": wl.name})

    return HttpResponse(json.dumps(ret))
Пример #5
0
def create_watchlist(request):
    body = json.loads(request.body.decode("utf-8"))
    user = get_user(request)
    name = body["label"]

    # how do we want to handle things that have been aleady created?
    wl = Watchlist.objects.create(user=user, name=name)
    responseData = {"id": wl.id, "label": wl.name}
    return HttpResponse(json.dumps(responseData))
Пример #6
0
def get_num_forex_calls(request):
    ret = {}
    user = get_user(request)

    if is_admin(user):
        ret = {"num_calls": ForexApiInterface.get_num_calls()}

    else:
        return HttpResponseForbidden()
    return HttpResponse(json.dumps(ret))
Пример #7
0
def get_forex_api_priority(request):
    ret = {"forex_api_priorities": []}
    user = get_user(request)

    if is_admin(user):
        ret["forex_api_priorities"] = (
            ForexApiInterface.get_ordered_forex_api_list())
    else:
        return HttpResponseForbidden()
    return HttpResponse(json.dumps(ret))
Пример #8
0
def get_news_api_priority(request):
    ret = {}
    user = get_user(request)

    ret = {"news_api_priorities": []}
    if is_admin(user):
        ret["news_api_priorities"] = (
            NewsApiInterface.get_ordered_news_api_list())
    else:
        return HttpResponseForbidden()
    return HttpResponse(json.dumps(ret))
Пример #9
0
def save_watchlist(request):
    body = json.loads(request.body.decode("utf-8"))
    user = get_user(request)
    watchlist = body["id"]

    try:
        wl = Watchlist.objects.get(id=watchlist, user=user)
        tickers = [x["ticker"] for x in body["tickers"]]
        wl.save_stocks(set(tickers))

    except Watchlist.DoesNotExist:
        return HttpResponseNotFound()

    return HttpResponse()
Пример #10
0
def delete_watchlist(request):
    body = json.loads(request.body.decode("utf-8"))
    user = get_user(request)

    watchlist_id = body["id"]
    try:
        wl = Watchlist.objects.get(id=watchlist_id, user=user)
        if wl.user != user:
            return HttpResponseBadRequest("you naughty naughty")
        wl.delete()
    except Watchlist.DoesNotExist:
        return HttpResponseNotFound()

    return HttpResponse()
Пример #11
0
def make_admin(request):
    body = json.loads(request.body.decode('utf-8'))
    ret = {}
    user = get_user(request)
    try:
        to_admin = User.objects.get(email=body["user"])
    except User.DoesNotExist:
        return HttpResponseNotFound()

    if (user.is_admin):
        make_user_admin(to_admin)
        return HttpResponse()

    return HttpResponseForbidden()
Пример #12
0
def details(request):
    # TODO also give time series
    # current price
    try:
        user = get_user(request)
        portfolio = Portfolio.objects.get(email=user.email)
        holdings = portfolio.get_stock_ownerships()

        ret = {"stocks": []}

        for h in holdings:
            # TODO we should use query set sort or make use of meta
            transactions = list(Transaction.objects.filter(stockOwnership=h))
            transactions.sort(key=lambda x: x.purchase_date)

            retTrans = [
                {  #"uuid" : str(t.id),
                    "volume": str(t.purchase_vol),
                    "price": str(t.purchase_price),
                    "date": str(t.purchase_date)
                } for t in transactions
            ]

            #h.recalculate()

            ret["stocks"].append({
                "name":
                str(h.get_stock_name()),
                "ticker":
                str(h.get_stock_ticker()),
                "volume":
                h.volume,
                "vwap":
                h.VWAP,
                "price":
                stock_api.get_price(h.get_stock_ticker()),
                "first_purchase_date":
                str(h.first_purchase),
                "transactions":
                retTrans
            })
        return HttpResponse(json.dumps(ret))
    except Exception as e:
        return HttpResponseBadRequest("portfolio details bad request")
    return HttpResponseBadRequest("portfolio details really bad request")
Пример #13
0
def set_stock_api_priority(request):
    body = json.loads(request.body.decode('utf-8'))
    ret = {}
    user = get_user(request)

    new_stock_priorities = body["new_priorities"]
    priorities = []
    if is_admin(user):
        for i in new_stock_priorities:
            priorities.append(i['priority'])

        if (len(priorities) > len(set(priorities))):
            return HttpResponseBadRequest()
        else:
            StockApiInterface.set_stock_api_order(new_stock_priorities)
            return HttpResponse()
    else:
        return HttpResponseForbidden()

    return HttpResponseBadRequest()
Пример #14
0
def summary(request):
    # TODO change %
    try:
        user = get_user(request)
        portfolio = Portfolio.objects.get(email=user.email)

        pInvestment = portfolio.get_investment()
        pValue = portfolio.get_value()
        pProfit = pValue - pInvestment
        pValueTm1 = portfolio.get_value
        pLastUpdate = str(portfolio.last_update)

        ownerships = list(portfolio.get_stock_ownerships())
        ownerships.sort(reverse=True, key=lambda x: x.VWAP * x.volume)
        ownerships = ownerships[:min(5, len(ownerships))]  # get top 5

        pKeyStocks = [{
            "name":
            so.get_stock_name(),
            "ticker":
            so.get_stock_ticker(),
            "value":
            stock_api.get_price(so.get_stock_ticker()) * so.volume
        } for so in ownerships]

        ret = {
            "value": pValue,
            "profit": pProfit,
            "last_update": pLastUpdate,
            "stocks": pKeyStocks
        }

        return HttpResponse(json.dumps(ret))
    except Exception as e:
        print(e)
        return HttpResponseBadRequest()
    return HttpResponseBadRequest()
Пример #15
0
def get_watchlist_stocks(request):
    #given a watchlist id, return json array of stocks with relevant information
    wid = int(request.GET.get("id"))
    user = get_user(request)

    watchlist = Watchlist.objects.get(id=wid)
    if watchlist.user != user:
        return HttpResponseBadRequest("you naughty naughty")
    tickers = [
        sw.ticker
        for sw in list(StockWatch.objects.filter(watchlist=watchlist))
    ]

    stock_data_list = []

    for ticker in tickers:
        stock_dict = {}
        stock_dict['ticker'] = ticker
        stock_dict['price'] = stock_api.get_price(ticker)
        stock_dict['name'] = stock_api.check_stock(ticker)['name']
        stock_dict['prices'] = stock_api.get_stock_prices(ticker, "market")
        stock_data_list.append(stock_dict)

    return HttpResponse(json.dumps(stock_data_list))
Пример #16
0
def check_admin(request):
    ret = {}
    user = get_user(request)

    ret["is_admin"] = is_admin(user)
    return HttpResponse(json.dumps(ret))