Esempio n. 1
0
def crypto_tokens():
    """ Crypto currency tokens """
    try:
        with open('crypto.csv', 'rb') as csvfile:
            reader = csv.reader(csvfile, delimiter=',')
            positions = [Position(symbol=row[0], quantity=row[1]) 
                for row in reader]

            return Portfolio(positions)

    except IOError:
        return Portfolio()
Esempio n. 2
0
def portfolio():
    """ Stock market portfolio """

    try:
        with open('portfolio.csv', 'rb') as csvfile:
            reader = csv.reader(csvfile, delimiter=',')
            positions = [Position(symbol=row[0], quantity=row[2]) 
                for row in reader ]

            return Portfolio(positions)

    except IOError as err:
        return Portfolio()
Esempio n. 3
0
def portfolio():
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('sheets', 'v4', credentials=creds)

    # Call the Sheets API
    sheet = service.spreadsheets()
    result = sheet.values().get(spreadsheetId=SPREADSHEET_ID,
                                range=RANGE).execute()
    values = result.get('values', [])

    positions = [
        Position(symbol=row[0], quantity=float(scrub(row[2])))
        for row in values if len(row) > 1
    ]

    return Portfolio(positions)
Esempio n. 4
0
    def create_portfolio(payload):

        body = request.get_json()
        portfolio_name = body.get('portfolio_name', None)
        portfolio_compositions = body.get('portfolio_compositions', None)

        # check if portfolio compositions sum up to 100 %
        total_weight = 0
        for portfolio_composition in portfolio_compositions:
            total_weight += portfolio_composition['weight']
        if total_weight != 100:
            abort(422)

        portfolio = Portfolio(name=portfolio_name)

        for portfolio_composition in portfolio_compositions:
            composition = PortfolioComposition(
                security_id=portfolio_composition['security_id'],
                weight=portfolio_composition['weight'])
            composition.portfolio = portfolio
            composition.insert()

        return jsonify({
            'success': True,
            'portfolio_id': portfolio.id,
            'portfolio_name': portfolio.name,
        })
Esempio n. 5
0
def add_user():
    name = request.form['username']
    psw = request.form['passw']
    con_psw = request.form['conf_pass']

    user_with_that_name = User.query.filter_by(username=name).count()
    if user_with_that_name > 0:
        flash("That name is already in use, come up with another", "negative")
        return render_template('sign-up-form.html')
    elif len(psw) < 6 or len(psw) > 20:
        flash("Passwords must be at least 6 chars long, 20 at most.",
              "negative")
        return render_template('sign-up-form.html', username=name)
    elif psw != con_psw:
        flash("Passwords didn't match!!", "negative")
        return render_template('sign-up-form.html', username=name)
    else:
        new_user = User(name, psw)
        db.session.add(new_user)
        db.session.commit()
        # need to do this AFTER new_user commited so id is generated
        new_user_portfolio = Portfolio(holder_id=new_user.id)
        #start a schedule for user's updates (jobs) to be added to
        skedge_start_with_check()
        db.session.add(new_user_portfolio)
        db.session.commit()
        session['username'] = new_user.username
        flash("Logged IN!", "positive")
        return render_template('edit.html', username=session['username'])
Esempio n. 6
0
def get_portfolios(client, acc_names) -> [Portfolio]:
    portfolios = list()
    for acc in acc_names.keys():
        portfolio = Portfolio(acc, acc_names[acc])
        portfolio.df = get_df(client, acc)
        portfolios.append(portfolio)
    return portfolios
 def test_total_expected_earnings(self):
     position_1 = Position(stock=Stock('ticker', 'name', 20, 30),
                           quantity=2)
     position_2 = Position(stock=Stock('ticker', 'name', 20, 40),
                           quantity=2)
     portfolio = Portfolio(position_1, position_2)
     self.assertEqual(Decimal('1.5'), portfolio.total_expected_earnings)
Esempio n. 8
0
def add_portfolio():
    if request.method == 'POST':
        portfolio = session.query(Portfolio).all()
        target = os.path.join(app.config['BASE_DIR'], 'static/image')

        if not os.path.isdir(target):
            os.mkdir(target)

        for file in request.files.getlist("image"):
            filename = file.filename
            destination = "/".join([target, filename])
            image = '../static/image/' + filename
            file.save(destination)

        # Creating a books object to add to the databse.
        image = '../static/image/' + request.form['image']
        port = Portfolio(title=request.form['title'],
                         skills_used=request.form['skills_used'],
                         demo_url=request.form['demo_url'],
                         github_url=request.form['github_url'],
                         description=request.form['description'],
                         client=request.form['client'],
                         created_month=request.form['created_month'],
                         created_year=request.form['created_year'],
                         service=request.form['service'],
                         image=image)
        session.add(port)
        session.commit()
        return redirect(url_for('portfolio.portfolio'))
    else:
        return render_template('modifyPortfolio.html', type='add')
Esempio n. 9
0
def snapshot(save=True):
    stocks = polling()
    from models import Portfolio
    portfolio = Portfolio(stocks)
    if save:
        portfolio.save()
    return portfolio
Esempio n. 10
0
 def mutate(self, info, user_data=None):
     # NOTE: Netlify creates the account regardless of this response
     portfolio = Portfolio()
     settings = Settings()
     metrics = UserMetrics()
     try:
         user = User.objects.get(pk=user_data.email)
         # If no query error, then either the user exists or
         # user variable becomes None. In both cases the response fails.
         return CreateUserMutation(user=None, success=False)
     except Exception as e:  # email not taken
         if "matching query does not exist" not in str(e):
             # unexpected error during query
             return CreateUserMutation(user=None, success=False)
         user = User(name=user_data.name,
                     bio=user_data.bio,
                     email=user_data.email,
                     password=user_data.password,
                     profile_pic=user_data.profile_pic,
                     metrics=metrics,
                     achievements=[],
                     personal_portfolio=portfolio,
                     groups=[],
                     settings=settings)
         checkAchievements(user)
         user.save()
         return CreateUserMutation(user=user, success=True)
Esempio n. 11
0
 def update_portfolio_model(self, portfolio):
     with create_session() as session:
         portfolio_model = Portfolio(btc_value=portfolio)
         account_model = session.query(ExchangeAccount).filter_by(
             id=self.account_model_id).first()
         account_model.portfolio.append(portfolio_model)
         session.add(account_model)
         session.commit()
Esempio n. 12
0
def init_db():
    art = [
        Artwork(title="Street Art", description="A true masterpiece", location=[7,80]),
        Artwork(title="Hidden Subway Mural", description="Far side of the subway station has a double walled mural.", location=[10,132]),
        Artwork(title="Blue Bridge", description="Neon blue tentacles of paint wind up the struts of the bridge", location=[0,0], tags=["amazing"]),
        Artwork(title="Artistic Underpass", description="Bridge ceiling covered in art", location=[0,0], tags=["surreal", "amazing"]),
        Artwork(title="Fire Wall", description="Tongues of flame comemorate the historic fire of this district", tags=["sad", "historic", "amazing"], location=[0,0]),
        Artwork(title="Street Corner Fresco", description="This popular street has a decorative fresco spilling out of the alley behind a popular restaurant", tags=["amazing", "unreal"], location=[0,0])
    ]

    for a in art:
        a.save()

    portfolios = [
        Portfolio(artworks=[art[0], art[1]]),
        Portfolio(artworks=[art[2], art[4]]),
        Portfolio(artworks=[art[1], art[2], art[3]]),
        Portfolio(artworks=[art[3], art[5]]),
    ]
    for p in portfolios:
        p.save()

    users = [
        User(name="Grant", portfolio=portfolios[0], bio="Love me some AI and maybe web dev."),
        User(name="Braden", portfolio=portfolios[1], bio="Spending some time on CSC 400."),
        User(name="Kyle", portfolio=portfolios[2], bio="Fitness, meditation and good books."),
        User(name="John", portfolio=portfolios[3], bio="Looking around for some art. Wasn't satisfied with my dope Windows Vista wallpaper.")
    ]
    for user in users:
        user.save()

    achievements = [
        Achievement(title="Noob", description="You signed up for the service!", points=10)
    ]
    for a in achievements:
        a.save()

    for user in users:
        user.achievements.append(achievements[0])
    for user, portfolio in zip(users, portfolios):
        portfolio.owner = user

    
    for portfolio in portfolios:
        portfolio.save()
Esempio n. 13
0
def portfolio(portfolio_id):
    """Message of /port_*id* command"""
    port = Portfolio(portfolio_id)
    if port.count_papers() > 0:
        message = 'Your papers\n'
        port.current_prices()
        for paper in port.papers:
            message += f'{paper}\n' \
                       f'{paper.change()} {paper.currency} ({paper.percent()}%) \n' \
                       f'{paper.market()}\n\n'
        return message
    else:
        return "No papers"
Esempio n. 14
0
def portfolio_alloc(raw_data, candidate_list, candidate_pick_num,
                    user_selectFund, user_selectFund_weights,
                    extraPortfolio_ratio, ivt_loop_num):

    minimum_weight = 0.1
    candidate_combs = list(combinations(candidate_list, candidate_pick_num))
    weight_alloc_combs = weight_alloc(candidate_pick_num,
                                      (1 - extraPortfolio_ratio) * 100, 3, 3)

    new_weight_alloc_combs = []
    for weight_comb in weight_alloc_combs:
        if min(weight_comb) > minimum_weight:
            new_weight_alloc_combs.append(weight_comb)

    # print(new_weight_alloc_combs)

    portfolio_alloc_list = []
    if len(new_weight_alloc_combs) > 0:
        for candidate_comb in candidate_combs:
            # print(candidate_comb)
            for weight_alloc_comb in new_weight_alloc_combs:
                new_return_list = []
                weight_alloc_comb_perms = set(
                    list(permutations(weight_alloc_comb)))
                for weight_alloc_comb_perm in weight_alloc_comb_perms:
                    final_candidate_comb = candidate_comb + tuple(
                        user_selectFund)
                    final_weight_alloc_comb_perm = weight_alloc_comb_perm + tuple(
                        user_selectFund_weights)
                    new_return_list = newFund_return(
                        raw_data, final_candidate_comb,
                        final_weight_alloc_comb_perm)

                    q = index_q(new_return_list, ivt_loop_num)
                    portfolio_alloc_list.append([
                        q, final_candidate_comb, final_weight_alloc_comb_perm
                    ])

    # check no recommend
    if len(portfolio_alloc_list) == 0:
        return None

    temp_min = min(portfolio_alloc_list)

    co_risk = cal_co_risk(temp_min[1], temp_min[2], raw_data, "downside")
    co_return = cal_co_return(temp_min[1], temp_min[2], raw_data)
    # print(co_risk,co_return)
    min_portfolio = Portfolio(temp_min[0], temp_min[1], temp_min[2],
                              co_return / co_risk)

    return min_portfolio
Esempio n. 15
0
    def mutate(self, info, group_data=None):
        user = UpdateUserMutation.getUser(group_data.member_to_add)
        group_portfolio = Portfolio()
        group = Group(name=group_data.name,
                      bio=group_data.bio,
                      members=[user],
                      metrics=GroupMetrics(artwork_count=0, member_count=1),
                      group_portfolio=group_portfolio,
                      chat=[])
        group.save()
        user.groups.append(group)
        user.save()

        return CreateGroupMutation(group=group)
Esempio n. 16
0
def buy(request):
    if not request.session.get('id'):
        return redirect('login')

    if request.method == 'POST':
        if not request.POST.get('symbol'):
            return apology('Symbol field cannot be empty')
        if not request.POST.get('quantity'):
            return apology('Quantity field cannot be empty')

        symbol = request.POST.get('symbol').upper()
        quantity = int(request.POST.get('quantity'))
        stock_info = lookup(symbol)
        if not stock_info:
            return apology("No such symbol exists")

        user_info = Users.objects.filter(id=request.session.get('id'))
        if not user_info:
            return apology("Your session is invalid")

        available_cash = user_info[0].cash
        if available_cash >= quantity * stock_info.get('price'):
            user_portfolio = Portfolio.objects.filter(
                id=request.session.get('id')).filter(symbol=symbol)
            if user_portfolio:
                user_portfolio[0].price += stock_info.get('price') * quantity
                user_portfolio[0].quantity += quantity
                user_portfolio[0].save()
            else:
                user_portfolio = Portfolio(
                    id=request.session.get('id'),
                    symbol=symbol,
                    price=stock_info.get('price') * quantity,
                    quantity=quantity,
                    stock_name=stock_info.get('name'),
                )
                user_portfolio.save()
            user_info[0].cash -= quantity * stock_info.get('price') * quantity
            user_info[0].save()
            return redirect('index')
        else:
            return apology("You do not have enough cash")
    else:
        return render(request, 'app/buy.html')
Esempio n. 17
0
    def post(self):
        print('Adding new Portfolio')
        #app.logger.info(f'Received : {request.json}')
        #app.logger.info(f'Received : {request.get_json()}')

        # find the user id from JWT token
        logged_user_id = get_jwt_identity()
        new_portfolio = Portfolio(
            id=request.json["id"],
            portfolio_title=request.json["portfolio_title"],
            portfolio_desc=request.json["portfolio_desc"],
            date_created=request.json["date_created"],
            date_updated=request.json["date_updated"],
            user_id=logged_user_id  #request.json["user_id"]
        )

        db.session.add(new_portfolio)
        db.session.commit()

        return stockschema.dump([new_portfolio])
Esempio n. 18
0
    def save_portfolio(self, portfolio, name, date):
        #NOTE ndict annoying stuff
        session = self.manager.db.Session()

        # Cleaning
        session.execute(
            "delete from Positions where Positions.PortfolioName = '{}'".
            format(name))
        #session.execute("delete from Portfolios where Portfolios.Name = '{}'".format(name))

        pf_object = Portfolio(name=name,
                              date=date.strftime(format='%Y-%m-%d %H:%M'),
                              startdate=portfolio.start_date,
                              cash=portfolio.cash,
                              startingcash=portfolio.starting_cash,
                              returns=portfolio.returns,
                              capital=portfolio.capital_used,
                              pnl=portfolio.pnl,
                              portvalue=portfolio.portfolio_value,
                              posvalue=portfolio.positions_value)

        positions = json.loads(
            str(portfolio.positions).replace('Position(',
                                             '').replace(')',
                                                         '').replace("'", '"'))
        assert isinstance(positions, dict)
        #FIXME In remote mode with lot of portfolios: make it crash !
        for ticker in positions:
            positions[ticker]['name'] = name
            positions[ticker]['date'] = date
            session.add(Position(**positions[ticker]))
            #NOTE bug: 'not list-like object', but not an issue ?
            #pf_object.Positions = Position(**positions[ticker])
            #name=name,
            #ticker='pouet',
            #amount=0,
            #last_sale_price=0,
            #cost_basis=0)
        session.add(pf_object)
        session.commit()
        session.close()
Esempio n. 19
0
def get_stock_values(portfolio):
    query = {
        'symbols': ",".join(portfolio.tickers),
        'types': 'quote,news,chart',
        'range': '1m',
        'last': 5
    }

    url = HOSTNAME +\
    '/stock/market/batch?' +\
    query_s(query)

    resp = requests.get(url)
    params = resp.json()

    return Portfolio([
        Position(symbol=vals['quote']['symbol'],
                 price=vals["quote"]["latestPrice"],
                 quantity=portfolio[ticker].quantity)
        for ticker, vals in params.iteritems()
    ])
Esempio n. 20
0
    def update_account_portfolio(self):
        with create_session() as session:
            timestamp = datetime.utcnow()
            account = session.query(AccountModel).filter_by(
                api_key=self.api_key).first()
            if not account:
                raise ValueError("account not found")
            assets = account.my_assets
            portfolio_in_eth = get_portfolio_in_eth(assets)
            default_quotes = portfolio_in_eth['default_quotes']
            quote_dict = {}
            for default_quote in default_quotes:
                quote_dict[default_quote['symbol']] = default_quote['price']
            for asset_portfolio in portfolio_in_eth['portfolio']:
                asset = [
                    asset for asset in assets
                    if asset.name == asset_portfolio['symbol']
                ]
                if asset:
                    asset = asset[0]
                    asset.eth_value = asset_portfolio['eth_cost']
                    asset.quote_price = asset_portfolio['price']
                    asset.pair_name = asset_portfolio['pair_name']
                    asset.timestamp = timestamp  #last time the asset eth value was update
                    session.add(asset)

                    port = Portfolio(account=account,
                                     asset=asset,
                                     asset_name=asset.name,
                                     total_value=asset.free + asset.fixed,
                                     eth_value=asset_portfolio['eth_cost'],
                                     quote_price=asset_portfolio['price'],
                                     pair_name=asset_portfolio['pair_name'],
                                     timestamp=timestamp,
                                     eth_btc_quote=quote_dict['ETHBTC'],
                                     bnb_eth_quote=quote_dict['BNBETH'],
                                     eth_usdt_quote=quote_dict['ETHUSDT'])
                    session.add(port)
            session.commit()
Esempio n. 21
0
def generate_demo_csv():
    position_a = Position(quantity=2,
                          ticker='AA',
                          name='A & A',
                          current_value=20,
                          expected_value=30)
    position_b = Position(quantity=3,
                          ticker='BB',
                          name='B & B',
                          current_value=30,
                          expected_value=40)
    position_c = Position(quantity=4,
                          ticker='CC',
                          name='C & C',
                          current_value=40,
                          expected_value=50)
    position_d = Position(quantity=5,
                          ticker='DD',
                          name='D & D',
                          current_value=50,
                          expected_value=60)
    portfolio = Portfolio(position_a, position_b, position_c, position_d)
    portfolio.write_to_file(os.path.join(PORTFOLIO_DIR, 'demo.csv'))
Esempio n. 22
0
def portfolio_add_update():
    form = PortoForm(request.form)
    if form.validate_on_submit():
        result = {'iserror': False}
        if not form.portfolio_id.data:
            user = User.query.filter_by(username=session['username']).first()
            if user is not None:
                user.portfolio.append(
                    Portfolio(title=form.title.data,
                              description=form.description.data,
                              tags=form.tags.data))
                db.session.commit()
                result['savedsuccess'] = True
            else:
                result['savedsuccess'] = False
                portfolio = Portfolio.query.get(
                    get_portofolio(form.portfolio_id.data))
                form.populate_obj(portfolio)
                result['savedsuccess'] = True
            return json.dumps(result)

    form.errors['iserror'] = True
    return json.dumps(form.errors)
Esempio n. 23
0
def buy_stock(user_id):

    user = User.query.filter_by(id=user_id).first()
    if not user:
        return jsonify({"Message": "No user found"})

    request_data = request.get_json()
    stock = Portfolio.query.filter_by(
        companyName=request_data["companyName"]).filter_by(
            user_id=user_id).first()
    x = datetime.datetime.now()
    new_transaction = Transaction(user_id=user_id,
                                  transactionName="buy",
                                  symbol=request_data["symbol"],
                                  price=request_data["price"],
                                  shares=request_data["shares"],
                                  date=str(x.strftime("%x")))
    if user.buying_power < request_data["price"] * request_data["shares"]:
        return jsonify({"message": "insufficient funds"})
    if stock:
        user.buying_power -= request_data["price"] * request_data["shares"]
        stock.shares += request_data["shares"]
        db.session.add(new_transaction)
        db.session.add(stock)
        db.session.commit()
        return jsonify({"Message": "shares updated"})
    stock_added = Portfolio(symbol=request_data["symbol"],
                            companyName=request_data["companyName"],
                            price=request_data["price"],
                            shares=request_data["shares"],
                            user_id=user_id)
    user.buying_power -= request_data["price"] * request_data["shares"]
    db.session.add(new_transaction)
    db.session.add(stock_added)
    db.session.commit()
    return jsonify({"message": "new stock created "}), 200
Esempio n. 24
0
    def test(self):
        results = iex.get_stock_values(Portfolio(map(lambda ticker: Position(symbol=ticker, quantity=1), ['aapl', 'amzn', 'gpc'])))

        assert results[0].symbol == 'AAPL'
Esempio n. 25
0
def fetch_portfolios(user):
    """Fetch portfolios by user.user_id"""
    data = query.fetch('portfolios', ['id'], holder_id=user.id)
    return [Portfolio(x['id']) for x in data]
Esempio n. 26
0
def recommend(user_input, line_bot_api, user_id):
    #### User Input ####
    extraPortfolio_ratio = user_input.extraPortfolio_ratio
    user_selectFunds = user_input.user_selectFunds
    user_selectFund_weights = user_input.user_selectFund_weights
    user_recommend_num = user_input.user_recommend_num

    #### Transform user_selectFund_weights to user_portfolio_weights_arr ####
    ## Description: Multiply (1-extraPortfolio_ratio) to user_selectFund_weights
    user_portfolio_weights_arr = (
        1 - extraPortfolio_ratio) * np.array(user_selectFund_weights)
    user_portfolio_weights = user_portfolio_weights_arr.tolist()

    #### Get the Funds' data ####
    ## Note: Has removed the funds that were closed or have few data
    message = TextSendMessage(text="讀取基金資料\U0010005E...")
    line_bot_api.push_message(user_id, message)
    df = readcsv.read_df(FUNDS_PREPROC_CSV_NAME)

    ## Check if user_selectFunds are in df.columns
    for fund in user_selectFunds:
        if not (fund in df.columns):
            return None, None

    #### Get the original_cluster_dict information ####
    original_cluster_dict = {}
    with open('original_cluster_dict' + '.pkl', 'rb') as f:
        original_cluster_dict = pickle.load(f)

    #### Get the bestFund_dict information ####
    bestFund_dict = {}
    new_bestFund_dict = {}
    with open('bestFund_dict' + '.pkl', 'rb') as f:
        bestFund_dict = pickle.load(f)

    #### Get the bestFund_dict excluding the groups that user_selectFund was in ####
    message = TextSendMessage(text="Pre-processing\U0010005E...")
    line_bot_api.push_message(user_id, message)
    new_bestFund_dict = calculate.cluster_preproc(original_cluster_dict,
                                                  bestFund_dict,
                                                  user_selectFunds)

    #### Pick the top 5 of bestFunds ####
    candidate_list = calculate.pick_candidate(new_bestFund_dict, candidate_num)

    #### Calculate the orginal protfolio ####
    portfolio_list = []
    new_returns = calculate.newFund_return(df, user_selectFunds,
                                           user_selectFund_weights)
    orginal_q = calculate.index_q(new_returns, ivt_loop_num)

    co_risk = calculate.cal_co_risk(user_selectFunds, user_selectFund_weights,
                                    df, "downside")
    co_return = calculate.cal_co_return(user_selectFunds,
                                        user_selectFund_weights, df)
    # print(co_risk,co_return)
    orginal_protfolio = Portfolio(orginal_q, user_selectFunds,
                                  user_selectFund_weights, co_return / co_risk)
    portfolio_list.append(orginal_protfolio)

    #### Calculate protfolios with extra funds ####
    message = TextSendMessage(text="計算中(這可能會花點時間\U0010005E)...")
    line_bot_api.push_message(user_id, message)
    for i in range(1, user_recommend_num + 1):
        portfolio = calculate.portfolio_alloc(df, candidate_list, i,
                                              user_selectFunds,
                                              user_portfolio_weights,
                                              extraPortfolio_ratio,
                                              ivt_loop_num)
        if portfolio != None:
            portfolio_list.append(portfolio)

    recommend_portfolio = min(portfolio_list, key=attrgetter('index_q'))

    number_to_name = {}
    with open('label2name_dict' + '.pkl', 'rb') as f:
        number_to_name = pickle.load(f)

    temp_labels = []
    for item in orginal_protfolio.labels:
        temp_labels.append(
            number_to_name.get(item, "Unkown name") + "(" + item + ")")
    orginal_protfolio.labels = temp_labels

    # ori = rec
    if len(orginal_protfolio.labels) == len(recommend_portfolio.labels):
        return orginal_protfolio, recommend_portfolio

    temp_labels = []
    for item in recommend_portfolio.labels:
        temp_labels.append(
            number_to_name.get(item, "Unkown name") + "(" + item + ")")
    recommend_portfolio.labels = temp_labels

    return orginal_protfolio, recommend_portfolio
Esempio n. 27
0
 def post(self):
     newPortfolio = Portfolio()
     newPortfolio.title = self.request.get("title")
     newPortfolio.description = self.request.get("description")
     newPortfolio.put()
     self.render('frontend/portfolio-createlist.html')
Esempio n. 28
0
from misc import dp, bot
from models import Portfolio
import handlers.keyboard as kb


# Класс FSM чтобы сохранять список состояний
class PortfolioFSM(StatesGroup):
    portfolio = State()
    broker = State()
    margin = State()


cancel_b = types.ReplyKeyboardMarkup(resize_keyboard=True).add(kb.cancel_kb)

# New instance of Portfolio() class to save data
new_port = Portfolio()


@dp.message_handler(commands=['newportfolio'])
async def new_portfolio(message: types.Message):
    await PortfolioFSM.portfolio.set()
    await bot.send_message(message.chat.id,
                           "Enter name of portfolio",
                           reply_markup=cancel_b)


# You can use state '*' if you need to handle all states
@dp.message_handler(state='*', commands='cancel')
@dp.message_handler(Text(equals='cancel', ignore_case=True), state='*')
async def cancel_handler(message: types.Message, state: FSMContext):
    """Allow user to cancel any action"""
Esempio n. 29
0
    price_hover = p.select(dict(type=HoverTool))

    # Choose, which glyphs are active by glyph name
    price_hover.names = ["price"]
    # Creating tooltips
    price_hover.tooltips = [("Datetime", "@Date{%Y-%m-%d}"),
                            ("Open", "@Open{$0,0.00}"),
                            ("Close", "@Close{$0,0.00}"),
                            ("Volume", "@Volume{($ 0.00 a)}")]
    price_hover.formatters = {"Date": 'datetime'}

    return p


stock = ColumnDataSource(
    data=dict(Date=[], Open=[], Close=[], High=[], Low=[], index=[]))

myPortfolio = Portfolio(['CSCO', 'DTE.DE', 'NOK'], [1, 1, 2], [1, 1, 1],
                        [1, 1, 1])
sample_df = pd.DataFrame(data=myPortfolio.share_data['CSCO']).dropna()
sample_df.reset_index(inplace=True)

stock.data = stock.from_df(sample_df)
elements = list()

p_stock = plot_stock_price(stock)
elements.append(p_stock)

curdoc().add_root(column(elements))
curdoc().title = 'CSCO Data'