Ejemplo n.º 1
0
def sell(key, ticker, shares):
    if Account.api_authenticate(key) == None:
        msg = "Invalid login credentials, pls retry"
    else:
        #pk = Account.login(name, password).pk
        pk = Account.api_authenticate(key).pk
        sell_txn = Account(pk=pk)
        msg = sell_txn.sell(ticker, shares)
    return jsonify({'message': msg})
Ejemplo n.º 2
0
def sell(name, password, ticker, shares):
    if not Account.login(name, password):
        msg = "Invalid login credentials, pls retry"
    else:
        pk = Account.login(name, password).pk
        sell_txn = Account(pk=pk)
        # sell_txn.sell(ticker, shares)
        # msg = "Sell transaction complete"
        msg = sell_txn.sell(ticker, shares)
    return jsonify({'message': msg})
Ejemplo n.º 3
0
def sell(api_key):
    if Account.api_authenticate(api_key) == None:        
        msg = "Invalid login credentials, pls retry"
    else: 
        if not request.json or 'ticker' not in request.json or 'volume' not in request.json:
            return jsonify({"error": "bad request"}), 400
        pk = Account.api_authenticate(api_key).pk
        sell_txn = Account(pk=pk)
        msg = sell_txn.sell(request.json['ticker'], request.json['volume'])
    return jsonify({'message':msg})  
def logged_in_homepage(account):

    while True:
        print(account.username, account.balance)
        selection = view.logged_in_screen(account.username, account.balance)

        if selection not in ['1', '2', '3', '4', '5', '6', '7', '8', '9']:
            view.improper_selection()
            time.sleep(3)

        if selection == '1':
            Account.get_positions(account)

        elif selection == '2':
            deposit = view.deposit_funds()
            if not deposit.isdigit() or int(deposit) < 1:
                view.improper_balance()
                time.sleep(3)
            else:
                account.balance = int(account.balance) + int(deposit)
                account.save()
                continue

        elif selection == '3':
            ticker_request = view.request_ticker_symbol()
            ticker_response = get_price(ticker_request)
            if type(ticker_response) == list:
                view.return_ticker_symbol_price(ticker_response)
                time.sleep(2)
            else:
                view.improper_ticker()
                time.sleep(3)

        elif selection == '4':
            ticker = view.request_ticker_symbol()
            current_price = get_price(ticker)
            share_amount = view.get_shares(current_price)
            if share_amount:
                try:
                    Account.buy(account, ticker, share_amount, current_price)
                except ValueError:
                    view.insufficient_funds()
            else:
                view.improper_ticker()
                time.sleep(3)

        # elif selection == '5':
        #   Account.get_positions(account)
        #   # time.sleep(3)
        #   ticker_to_sell = view.sell_shares()
        #   has_stock = get_price(ticker_to_sell)
        #   print(has_stock)
        #   amount = view.sell_shares_amount()
        #   current_price = get_price(ticker_to_sell)
        #   if has_stock:
        #       Account.sell(account, ticker_to_sell, amount, current_price)
        #   else:
        #       view.improper_ticker()
        #       time.sleep(3)

        elif selection == '5':
            Account.get_positions(account)
            ticker = view.request_ticker_symbol()
            shares = int(view.sell_shares())

            try:
                Account.sell(account, ticker, shares)
            except ValueError:
                view.wups()
                time.sleep(3)
            # view.clearscreen()

        elif selection == '6':
            selection = view.select_trade_option(account.username)

            if len(selection) != 1 or selection.lower() not in ['a', 'b', 'c']:
                view.improper_selection()
                time.sleep(3)
            elif selection.lower() == 'a':
                account_trades = Account.get_trades(account)
                for trade in account_trades:
                    view.show_trades(account.username, trade)
                    time.sleep(1)
            elif selection.lower() == 'b':
                ticker_symbol = view.request_ticker_symbol()
                account_trades_by_ticker = Account.trades_for(
                    account, ticker_symbol)

                if account_trades_by_ticker:
                    for trade in account_trades_by_ticker:
                        view.show_trades(account.username, trade)
                        time.sleep(3)

                else:
                    view.improper_ticker()
                    time.sleep(3)
            elif selection.lower() == 'c':
                continue
        elif selection == '7':
            view.goodbye()
            welcome_homepage()
            return
        elif selection == '8':
            view.goodbye()
            return
        elif selection == '9':
            top_traded(
                'https://api.iextrading.com/1.0/stock/market/batch?symbols=aapl,fb&types=quote,news,chart&range=1m&last=5'
            )
            time.sleep(3)
Ejemplo n.º 5
0
def logged_in_homepage(account):
    
    while True:
        selection = view.logged_in_screen(account.username, account.balance)
        
        if selection not in ["1", "2", "3", "4", "5", "6", "7", "8"]:
            view.improper_selection()
            time.sleep(3)
        
        if selection == "1":
            view.account_positions(account.username)
            Account.get_positions(account)
            time.sleep(3)
        elif selection == "2":
            deposit = view.deposit_funds()
            if not deposit.isdigit() or int(deposit) < 1:
                view.improper_balance()
                time.sleep(3)
            else:
                account.balance = int(account.balance) +  int(deposit)
                account.save()
                continue
        elif selection == "3":
            ticker_request = view.request_ticker_symbol()
            ticker_response = get_price(ticker_request)
            if type(ticker_response) == list:
                view.return_ticker_symbol_price(ticker_response)
                time.sleep(3)
            else:
                view.improper_ticker()
                time.sleep(3)
        elif selection == "4":
            ticker = view.request_ticker_symbol()
            ticker_price = get_price(ticker)
            if ticker_price == False:
                view.improper_ticker()
                time.sleep(3)
                continue
                 
            purchase_amount = view.get_shares(ticker_price)
            if not purchase_amount.isdigit():
                view.improper_money()
                time.sleep(3)
                continue

            total_cost = int(purchase_amount) * int(ticker_price[1])
            
            if total_cost < int(account.balance):
                Account.buy(account, ticker, purchase_amount, ticker_price[1], total_cost)
            elif int(total_cost) > int(account.balance):
                view.not_enough_money()
                time.sleep(3)

        elif selection == "5":
            Account.get_positions(account)
            time.sleep(3)
            ticker_to_sell = view.sell_shares()
            has_stock = get_price(ticker_to_sell)
            position = account.get_position_for(ticker_to_sell)
            amount = view.sell_shares_amount()

            if has_stock and position.shares >= int(amount):
                Account.sell(account, ticker_to_sell, amount)
            elif not has_stock:
                view.improper_ticker()
                time.sleep(3)
            else:
                view.not_enough_shares()
        elif selection == "6":
            selection = view.select_trade_option(account.username)
            
            if len(selection) != 1 or selection.lower() not in ["a", "b", "c"]:
                view.improper_selection()
                time.sleep(3)
            elif selection.lower() == "a":
                account_trades = Account.get_trades(account)
                if not account_trades:
                    view.no_trades(account.username)
                    time.sleep(3)
                for trade in account_trades:
                    view.show_trades(account.username, trade)
                    time.sleep(3)
            elif selection.lower() == "b":
                ticker_symbol = view.request_ticker_symbol()
                account_trades_by_ticker = Account.trades_for(account, ticker_symbol)
               
                if get_price(ticker_symbol) == False:
                    view.improper_ticker()
                    time.sleep(3)
                elif not account_trades_by_ticker:
                    view.no_trades(account.username)
                    time.sleep(3)              
                else:
                    for trade in account_trades_by_ticker:
                        view.show_trades(account.username, trade)
                        time.sleep(3)
            elif selection.lower() == "c":
                continue
        elif selection == "7":
            view.goodbye()
            welcome_homepage()
            return
        elif selection == "8":
            view.goodbye()
            return
Ejemplo n.º 6
0
def main_loop():
    while True:
        choice = user_menu()
        if choice is None: # incorrect selection
            bad_input('Please select option')
        elif choice == '4': # exit
            goodbye()
            break

        elif choice == '1':
            login_input = login_username_pw()
            verified_account = Account.login(login_input)
            if verified_account:
                db_password_hash = verified_account[2]
                password_verify = checkpw(login_input[1].encode(),
                    db_password_hash)
                if password_verify:
                    account = Account(account_id = verified_account[0])
                    account.username = verified_account[1]
                    account.balance = int(verified_account[3])
                    while True:
                        choice = main_menu()
                        if choice is None:
                            bad_input('Please select option')
                        elif choice == '1': # view account balance
                            display_balance(account.balance)
                        elif choice == '2': # deposit funds
                            account.balance += deposit()
                            Account.update_balance(account)
                        elif choice == '3': # buy stock
                            buy_stock = trade_stock()
                            account.buy(buy_stock[0], buy_stock[1])
                        elif choice == '4': #sell stock
                            buy_stock = trade_stock()
                            account.sell(buy_stock[0], buy_stock[1])
                        elif choice == '5': # view positions
                            display_positions(Account.get_positions(account))
                        elif choice == '6': # view trades
                            display_trade_history(Account.get_trades(account))
                        elif choice == '7': # lookup price of stock
                            ticker = view.lookup_ticker()
                            print("Ticker: {} is currently: ${}".format(ticker, get_price(ticker)))
                        elif choice == '8': # See API Keys
                            display_api(Account.retrieve_api_key(account))
                        elif choice == '9': # logout
                            goodbye()
                        else:
                            bad_input('Retry')
                else:
                    bad_input('Incorrect password')
            else:
                bad_input('Incorrect username')
        elif choice == '2': # login with api
            user_api_key = login_api_key()
            # print(user_api_key)
            user = Account.api_authenticate(user_api_key)
            display_user_from_api_key(user)
        elif choice == '3': # create new account
            account_details[0] = "mark"
            account_details[1] = "1234"
            account_details[2] = 1000
            account_details = create_account()
            account = Account()
            account.username = account_details[0]
            account.password_hash = account_details[1]
            account.balance = account_details[2]
            account.api_key = account.generate_api_key()
            Account.save(account)
Ejemplo n.º 7
0
def main():
    while True:
        views.generic_msg("Welcome to Terminal Trader !")
        selection = views.welcome_menu()
        if selection is None:  #Bad input
            views.generic_msg(
                "Please enter a number that corresponds to a stated option")
        elif selection == 3:  #Exit
            views.generic_msg("Bye: Thanks for using Terminal Trader")
            break
        elif selection == 1:  #Create account
            new_username = views.get_input("Username")
            new_password = views.get_input("Password")
            new_account = Account(username=new_username)
            new_account.set_password(new_password)
            new_account.save()
        elif selection == 2:  #Login
            login_username = views.get_input("Username")
            login_password = views.get_input("Password")
            if not Account.login(login_username, login_password):
                views.generic_msg(
                    "Failed to find an account for the given Username/Password, pls retry"
                )
            else:  #Store account pk for re-use
                pk = Account.login(login_username, login_password).pk
                while True:
                    choice = views.main_menu()
                    if choice is None:  #Bad input
                        views.generic_msg(
                            "Please enter a number that corresponds \
                                           to a stated option")
                    elif choice == 8:  #Exit
                        break
                    elif choice == 1:  #View Balance & Positions
                        positions_sub_menu(pk)
                    elif choice == 2:  #Deposit money
                        deposit_amount = float(
                            views.get_input("Deposit Amount"))
                        account_deposit = Account(pk=pk)
                        new_bal = account_deposit.deposit(deposit_amount)
                        account_deposit.save()
                        views.generic_msg("New Balance = {}".format(new_bal))
                    elif choice == 3:  #Look up stock price
                        ticker = views.get_input(
                            "Please enter a Ticker Symbol")
                        quote = util.get_price(ticker)
                        if not quote:
                            views.generic_msg(
                                "The Ticker Symbol entered does not exist")
                        else:
                            views.stock_price(ticker, quote)
                    elif choice == 4:  #Look up ticker from Co. name
                        co_name = views.get_input("Please enter Company Name")
                        companies = util.get_ticker(co_name)
                        if not companies:
                            views.generic_msg(
                                "No matches for input Company Name")
                        else:
                            for co in companies:
                                views.show_companies(co)
                    elif choice == 5:  #Buy stock
                        ticker = views.get_input(
                            "Please enter a Ticker Symbol")
                        shares_buy = views.get_input(
                            "Please enter the number of shares to buy")
                        buy_txn = Account(pk=pk)
                        buy_txn.buy(ticker, shares_buy)
                        views.generic_msg("Buy transaction complete")
                    elif choice == 6:  #Sell stock
                        ticker = views.get_input(
                            "Please enter a Ticker Symbol")
                        shares_sell = views.get_input(
                            "Please enter the number of shares to sell")
                        sell_txn = Account(pk=pk)
                        sell_txn.sell(ticker, shares_sell)
                        views.generic_msg("Sell transaction complete")
                    elif choice == 7:  #View Trade History
                        trades_sub_menu(pk)
Ejemplo n.º 8
0
def logged_in_homepage(account):

    while True:
        selection = view.logged_in_screen(account.username, account.balance)

        if selection not in ["1", "2", "3", "4", "5", "6", "7", "8", "9"]:
            view.improper_selection()
            time.sleep(3)

        if selection == "1":
            Account.get_positions(account)

        elif selection == "2":
            deposit = view.deposit_funds()
            if not deposit.isdigit() or int(deposit) < 1:
                view.improper_balance()
                time.sleep(3)
            else:
                account.balance = int(account.balance) + int(deposit)
                account.save()
                continue
        elif selection == "3":
            ticker_request = view.request_ticker_symbol()
            ticker_response = get_price(ticker_request)
            if type(ticker_response) == list:
                view.return_ticker_symbol_price(ticker_response)
                time.sleep(3)
            else:
                view.improper_ticker()
                time.sleep(3)
        elif selection == "4":
            ticker = view.request_ticker_symbol()
            current_price = get_price(ticker)
            share_amount = view.get_shares(current_price)
            if share_amount:
                try:
                    Account.buy(account, ticker, share_amount, current_price)
                except ValueError:
                    view.insufficient_funds()
            else:
                view.improper_ticker()
                time.sleep(3)

        # elif selection == "5":
        #     Account.get_positions(account)
        #     # time.sleep(3)
        #     ticker_to_sell = view.sell_shares()
        #     has_stock = get_price(ticker_to_sell)
        #     print(has_stock)
        #     amount = view.sell_shares_amount()
        #     current_price = get_price(ticker_to_sell)
        #     if has_stock:
        #         Account.sell(account, ticker_to_sell, amount, current_price)
        #     else:
        #         view.improper_ticker()
        #         time.sleep(3)

        elif selection == "5":
            Account.get_positions(account)
            ticker = view.request_ticker_symbol()
            shares = int(view.sell_shares())

            try:
                Account.sell(account, ticker, shares)
            except ValueError:
                view.wups()
                time.sleep(3)
                # view.clearscreen()

        elif selection == "6":
            selection = view.select_trade_option(account.username)

            if len(selection) != 1 or selection.lower() not in ["a", "b", "c"]:
                view.improper_selection()
                time.sleep(3)
            elif selection.lower() == "a":
                account_trades = Account.get_trades(account)
                for trade in account_trades:
                    view.show_trades(account.username, trade)
                    time.sleep(1)
            elif selection.lower() == "b":
                ticker_symbol = view.request_ticker_symbol()
                account_trades_by_ticker = Account.trades_for(
                    account, ticker_symbol)

                if account_trades_by_ticker:
                    for trade in account_trades_by_ticker:
                        view.show_trades(account.username, trade)
                        time.sleep(3)

                else:
                    view.improper_ticker()
                    time.sleep(3)
            elif selection.lower() == "c":
                continue
        elif selection == "7":
            view.goodbye()
            welcome_homepage()
            return
        elif selection == "8":
            view.goodbye()
            return
        elif selection == "9":
            top_traded(
                "https://api.iextrading.com/1.0/stock/market/batch?symbols=aapl,fb&types=quote,news,chart&range=1m&last=5"
            )
            time.sleep(3)