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")
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")
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")
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")
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")
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")
def flush(self): if len(self.buffer) > 0: try: msg = "" for record in self.buffer: s = self.format(record) msg = msg + s + "\r\n" send_mail_html_self(self.subject, msg) except: self.handleError(None) # no particular record self.buffer = []
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")
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")