Ejemplo n.º 1
0
def main():
    log.info("Started...")
    
    if path.exists( '/home/scanlom/simfin_data/' ):
        rmtree( '/home/scanlom/simfin_data/' )
    
    # Set your API-key for downloading data.
    # If the API-key is 'free' then you will get the free data,
    # otherwise you will get the data you have paid for.
    # See www.simfin.com for what data is free and how to buy more.
    set_api_key('free')
    
    # Set the local directory where data-files are stored.
    # The dir will be created if it does not already exist.
    set_data_dir('~/simfin_data/')

    rpt = report()
    rpt.add_string( simfin_load("income", load_income, simfin_income_by_ticker, delete_simfin_income_by_id, post_simfin_income) )
    rpt.add_string( simfin_load("balance", load_balance, simfin_balance_by_ticker, delete_simfin_balance_by_id, post_simfin_balance) )
    rpt.add_string( simfin_load("cashflow", load_cashflow, simfin_cashflow_by_ticker, delete_simfin_cashflow_by_id, post_simfin_cashflow) )
    subject = 'Blue Lion - Simfin Load - Financials'
    send_mail_html_self(subject, rpt.get_html())

    rpt2 = report()
    rpt2.add_string( simfin_load_ref_data() )
    rpt2.add_string( simfin_load_market_data() )
    rpt2.add_string( simfin_load_market_data_historical() )
    subject = 'Blue Lion - Simfin Load - Market Data'
    send_mail_html_self(subject, rpt2.get_html())

    log.info("Completed")
Ejemplo n.º 2
0
def main():
    log.info("Started...")
    db = database2()
    rpt = report()
    
    formats = [ rpt.CONST_FORMAT_NONE, rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY_COLOR]
    table = [
        [ "Category", "Spent", "Projected", "Budget", "Tracking" ],
        ]
    append_budget_row( db, table, "Base", [0,2,3,4,5,8,12,96], 65000 )
    append_budget_row( db, table, "Rent", [1], 48000 )
    append_budget_row( db, table, "Travel", [7], 10000 )
    append_budget_row( db, table, "Helper", [9], 12000 )
    append_budget_row( db, table, "Monchichi", [94], 12000 )
    append_budget_row( db, table, "Deux", [93], 1000 )
    append_budget_row( db, table, "Fumi", [11], 5000 )
    append_budget_row( db, table, "Mike", [6,10], 5000 )
    append_budget_row( db, table, "Special", [95,97,98,99], 0 )
    append_budget_row( db, table, "Total", [0,1,2,3,4,5,6,7,8,9,10,11,12,93,94,95,96,97,98,99], 158000 )
    recon_projected = calculate_recon_projected( table, [2,3,4,5,7,8], 1, 6, 2, 4 )
    table.append( [ "Recon", db.get_ytd_spending_sum(), recon_projected, 158000, 158000 - recon_projected ] )
    fumi_projected = calculate_fumi_projected( table, 1, 6, 4 )
    table.append( [ "Payout", 0, fumi_projected, 0, 0 ] )
    rpt.add_table(table, formats)

    subject = 'Spending Report - ' + strftime("%Y-%m-%d", localtime())
     
    send_mail_html_self(subject, rpt.get_html())
    log.info("Completed")
Ejemplo n.º 3
0
def main():
    log.info("Started...")

    db = database2()
    rpt = report()
    total_roe = db.get_balance(db.CONST_BALANCES_TYPE_TOTAL_ROE)
    total_finish = CONST_ONE_UNIT / CONST_FINISH_PCT
    index_roe = db.get_index_history(db.CONST_INDEX_ROE,
                                     datetime.today().date())
    ytd_base_index_roe = db.get_index_history(db.CONST_INDEX_ROE,
                                              db.get_ytd_base_date())
    definite_retirement_years = CONST_DEFINITE_RETIREMENT_DATE - datetime.today(
    ).date()
    hoped_retirement_years = CONST_HOPED_RETIREMENT_DATE - datetime.today(
    ).date()

    # Determine cash made this year
    profit = total_roe - db.get_balance_history(
        db.CONST_BALANCES_TYPE_TOTAL_ROE,
        db.get_ytd_base_date()) - db.get_balance(
            db.CONST_BALANCES_TYPE_SAVINGS)

    populate_summary(db, rpt, index_roe, total_roe, total_finish,
                     hoped_retirement_years, profit)
    populate_summary_super_inflection(db, rpt, index_roe, total_roe,
                                      definite_retirement_years)
    populate_stress_test_twenty_percent_drop(db, rpt, index_roe, total_roe,
                                             total_finish)

    # Send a summary mail
    subject = "Blue Lion - " + rpt.format_ccy(profit) + " / " + rpt.format_pct(
        index_roe / ytd_base_index_roe - 1)
    send_mail_html_self(subject, rpt.get_html())
    log.info("Completed")
Ejemplo n.º 4
0
def main():
    log.info("Started...")
    db = database2()
    rpt = report()

    CONST_PORTFOLIO = 1
    CONST_START = date(2020, 1, 21)
    CONST_END = date(2017, 1, 1)

    contributors = {}
    start = db.get_portfolio_history_by_date(CONST_PORTFOLIO, CONST_START)
    for row in start:
        contributors[row.symbol] = [row.symbol, row.value, 0, 0, 0, 0, 0, 0]
    end = db.get_portfolio_history_by_date(CONST_PORTFOLIO, CONST_END)
    for row in end:
        if row.symbol in contributors:
            contributors[row.symbol][5] = row.value
        else:
            contributors[row.symbol] = [
                row.symbol, 0, 0, 0, 0, row.value, 0, 0
            ]
    divs = db.get_actions_by_date_range_type(
        CONST_START, CONST_END, db.CONST_ACTION_TYPE_DIVIDEND_PORTFOLIO)
    for row in divs:
        if row.symbol in contributors:
            contributors[row.symbol][4] += row.value1
    buys = db.get_actions_by_date_range_type(
        CONST_START, CONST_END, db.CONST_ACTION_TYPE_BOUGHT_PORTFOLIO)
    for row in buys:
        if row.symbol in contributors:
            contributors[row.symbol][2] += row.value1
    sells = db.get_actions_by_date_range_type(
        CONST_START, CONST_END, db.CONST_ACTION_TYPE_SOLD_PORTFOLIO)
    for row in sells:
        if row.symbol in contributors:
            contributors[row.symbol][3] += row.value1
    for key, value in contributors.items():
        value[6] = value[3] + value[4] + value[5] - value[1] - value[2]
        value[7] = (value[1] + value[2] + value[6]) / (value[1] + value[2]) - 1

    formats = [
        rpt.CONST_FORMAT_NONE, rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY,
        rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY,
        rpt.CONST_FORMAT_CCY_COLOR, rpt.CONST_FORMAT_PCT_COLOR
    ]
    table = []
    for key, value in contributors.items():
        table.append(value)
    table.sort(key=lambda a: a[7] * -1)
    table.insert(0,
                 ["Symbol", "Start", "Buy", "Sell", "Div", "End", "Diff", "%"])
    rpt.add_table(table, formats)

    subject = 'Blue Lion - Contributors'
    send_mail_html_self(subject, rpt.get_html())
    log.info("Completed")
Ejemplo n.º 5
0
def main():
    log.info("Started...")
    db = database2()
    rpt = report()
    
    populate_max_movers( db, rpt )
    subject = 'Health Check - ' + strftime("%Y-%m-%d", localtime())
     
    send_mail_html_self(subject, rpt.get_html())
    log.info("Completed")
Ejemplo n.º 6
0
def main():
    log.info("Started...")
    db = database2()
    rpt = report()

    populate_five_cagr(db, rpt)
    populate_magic(rpt)

    subject = 'Blue Lion - Search'
    send_mail_html_self(subject, rpt.get_html())
    log.info("Completed")
Ejemplo n.º 7
0
def main():
    log.info("Started...")
    db = database2()
    rpt = report()

    formats = [
        rpt.CONST_FORMAT_NONE, rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY,
        rpt.CONST_FORMAT_CCY, rpt.CONST_FORMAT_CCY_COLOR
    ]
    table = [
        ["Category", "Spent", "Projected", "Budget", "Tracking"],
    ]
    append_budget_row(db, table, "Base", [0, 2, 3, 4, 5, 8, 12, 96], 75000)
    append_budget_row(db, table, "Rent", [1], 73000)
    append_budget_row(db, table, "Travel", [7], 10000)
    append_budget_row(db, table, "Helper", [9], 12000)
    append_budget_row(db, table, "Monchichi", [94], 12000)
    append_budget_row(db, table, "Deux", [93], 12000)
    append_budget_row(db, table, "Fumi", [11], 5000)
    append_budget_row(db, table, "Mike", [6, 10], 5000)
    append_budget_row(db, table, "Special", [95, 97, 98, 99], 0)
    append_budget_row(
        db, table, "Total",
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 93, 94, 95, 96, 97, 98, 99],
        CONST_BUDGET)
    recon_projected = calculate_recon_projected(table, [2, 3, 4, 5, 6, 8, 9],
                                                1, 7, 2, 4)
    table.append([
        "Recon",
        db.get_ytd_spending_sum(), recon_projected, CONST_BUDGET,
        CONST_BUDGET - recon_projected
    ])
    fumi_projected = calculate_fumi_projected(table, 1, 7, 4)
    table.append(["Payout", 0, fumi_projected, 0, 0])
    rpt.add_table(table, formats)

    plan_projected = (recon_projected + CONST_FIXED) / (1 - CONST_TAX_RATE)
    rpt.add_string("BLRP " + rpt.format_ccy(plan_projected) + "=(" +
                   rpt.format_ccy(recon_projected) + "+" +
                   rpt.format_ccy(CONST_FIXED) + ")/(1-" +
                   rpt.format_ccy(CONST_TAX_RATE) + ")")
    rpt.add_string("BLRB " + rpt.format_ccy(CONST_ONE_UNIT) + "=(" +
                   rpt.format_ccy(CONST_BUDGET) + "+" +
                   rpt.format_ccy(CONST_FIXED) + ")/(1-" +
                   rpt.format_ccy(CONST_TAX_RATE) + ")")
    subject = 'Blue Tree - ' + rpt.format_ccy(
        plan_projected) + ' / ' + rpt.format_ccy(CONST_ONE_UNIT)

    send_mail_html_self(subject, rpt.get_html())
    log.info("Completed")
Ejemplo n.º 8
0
def main():
    log.info("Started...")
    db = database2()
    rpt = report()

    rpt.add_heading("Trade")
    populate_cash(db, rpt)
    rpt.add_string("")        
    populate_allocations(db, rpt)
    rpt.add_heading("Upgrade")
    populate_thirty_pe( db, rpt )
    rpt.add_string("")        
    populate_five_cagr(db, rpt)
    rpt.add_heading("Research")
    populate_reds(db, rpt)
    rpt.add_string("")        
    populate_max_movers( db, rpt )
    
    subject = 'Blue Lion - Health Check'
    send_mail_html_self(subject, rpt.get_html())
    log.info("Completed")