def get_accounts(): columns = [ Csv.CsvColumn(name="Account Name", is_row_identifier=True), Csv.CsvColumn(name="Institution"), Csv.CsvColumn(name="Account Type") ] accounts_csv_path = Config.get_path("accounts_csv") Csv.write_empty(accounts_csv_path, columns) accounts_csv = Csv.CsvFile(accounts_csv_path, default_column_list=columns, default_data_rows=[]) if len(accounts_csv.return_all()) == 0: Io.error("%s does not contain any accounts!" % accounts_csv_path) checking_accounts = get_accounts_by_type(accounts_csv, "Checking") savings_accounts = get_accounts_by_type(accounts_csv, "Savings") credit_cards = get_accounts_by_type(accounts_csv, "Credit Card") return (Concepts.LedgerAccountCollection( checking_accounts=checking_accounts, savings_accounts=savings_accounts, credit_cards=credit_cards))
def get_sum(): misc_sum = float(0) misc_path = Config.get_path("misc_assets_csv") if not isfile(misc_path): with open(misc_path, "w") as f: f.write("Description,Serial No.,Estimated Value,Notes") default_column_map = [ Csv.CsvColumn(name="Description", data_type="str", is_row_identifier=True), Csv.CsvColumn(name="Serial No.", data_type="str"), Csv.CsvColumn(name="Estimated Value", data_type="float"), Csv.CsvColumn(name="Notes", data_type="str") ] default_data_rows = [] csv_file = Csv.CsvFile(misc_path, default_column_map, default_data_rows, read_only=True) for i in csv_file.return_all(): try: value = float(i["Estimated Value"]) misc_sum += value except ValueError: Io.nostop("Error parsing %s as float number in %s" % (str(value), misc_path)) return (misc_sum)
def get_manual_average_beta(position): if position.risk_free == False: columns = [ Csv.CsvColumn(name="Symbol", is_row_identifier=True), Csv.CsvColumn(name="Beta", data_type="float") ] default_rows = [[position.symbol, "-9001"]] manual_beta_csv = Csv.CsvFile(Config.get_beta("manual_averages"), default_column_list=columns, default_data_rows=default_rows, read_only=True) manual_beta = manual_beta_csv.find_by_id(position.symbol)["Beta"] if manual_beta == -9001: manual_beta = None else: try: manual_beta = float(manual_beta) except: manual_beta = None else: manual_beta = float(0) position.manual_average_beta = manual_beta return (0)
def get_adj_close(path, date): columns = [Csv.CsvColumn(name="Date"), Csv.CsvColumn(name="Adj Close")] csv_file = Csv.CsvFile(path, columns, []) entry = csv_file.find_by_dict({"Date": date}) if len(entry) == 1: return (entry[0]["Adj Close"]) elif len(entry) == 0: return (None) else: Io.error("Expected 0 or 1 results, got %s for query %s in %s." % (str(len(entry)), str(date), str(path)))
def get_symbol(symbol, element, default_type=None, quickrun=None): #for securities_info.csv source column_list = [ Csv.CsvColumn("Symbol", is_row_identifier=True), Csv.CsvColumn("Industry"), Csv.CsvColumn("Purpose") ] default_data = [[symbol, "Unknown", "Unknown"]] file_path = Config.get_path("securities_info") csv_file = Csv.CsvFile(file_path, default_column_list=column_list, default_data_rows=default_data, read_only=True) security_row = csv_file.find_by_id(symbol) #prompt for security info if it's unknown if quickrun != True: write_new_data = False for info_element in [["Industry", 1], ["Purpose", 2]]: if security_row[info_element[0]] == "Unknown": write_new_data = True new_value = set_new_info(symbol, info_element[0], csv_file) default_data[0][info_element[1]] = new_value csv_file = Csv.CsvFile(file_path, default_column_list=column_list, default_data_rows=default_data, read_only=False, stop_on_write=False) security_row = csv_file.find_by_id(symbol) if symbol != "T-Bond" and security_row[element] != "Benchmark": verify_manual_beta(symbol) return (security_row[element])
def main(): columns = [ Csv.CsvColumn("Symbol", is_row_identifier=True), Csv.CsvColumn("Description"), Csv.CsvColumn("Quantity", data_type="float"), Csv.CsvColumn("Multiplier", data_type="float") ] default_data = [["XAG-USD", "Silver, Troy Ounce", 0, .9], ["XAU-USD", "Gold, Troy Ounce", 0, .9]] metals_csv = Csv.CsvFile(Config.get_path("metals_csv"), default_column_list=columns, default_data_rows=default_data, stop_on_write=False, read_only=False) metals = [] symbol_string = "" for metal in metals_csv.return_all(): if metal["Quantity"] > 0: metals.append(metal) symbol_string += (metal["Symbol"]).replace("-USD", "") + "," symbol_string = symbol_string.rstrip(",") live_prices_request = MetalsApi.get_live_request(symbol_string) live_prices = Api.make_api_request(live_prices_request, stop_on_err=False) if live_prices != None: if live_prices["success"] == False: print("Falling back to Yahoo futures for live metal prices.") live_prices = None return_metals = [] for metal in metals: if live_prices != None: last_price = float(1 / float( live_prices["rates"][metal["Symbol"].replace("-USD", "")])) else: if metal["Symbol"] == "XAG-USD": symbol = "SI=F" else: Io.error("Unknown metal symbol %s" % metal["Symbol"]) last_price = Yahoo.get_live_price(symbol) new_metal = Instruments.Metal(metal["Symbol"], metal["Description"], metal["Quantity"], metal["Multiplier"], last_price=last_price) return_metals.append(new_metal) return (return_metals)
def verify_manual_beta(symbol): #manual beta entry columns = [ Csv.CsvColumn(name="Symbol", is_row_identifier=True), Csv.CsvColumn(name="Beta", data_type="float") ] default_rows = [] manual_beta_csv = Csv.CsvFile(Config.get_beta("manual_averages"), default_column_list=columns, default_data_rows=default_rows, read_only=True) custom_beta_symbols = manual_beta_csv.find_unique_by_column("Symbol") if not symbol in custom_beta_symbols: if Io.yes_no("Set custom beta for %s?" % symbol): opt = "x" custom_beta = opt while custom_beta == "x": opt = input("Enter custom beta as a whole number or decimal: ") try: opt = float(opt) if Io.yes_no("Set beta for %s to %s?" % (symbol, str(opt))): custom_beta = opt except: pass else: custom_beta = -9001 custom_beta = str(custom_beta) default_rows = [[symbol, custom_beta]] manual_beta_csv = Csv.CsvFile(Config.get_beta("manual_averages"), default_column_list=columns, default_data_rows=default_rows, stop_on_write=False, read_only=False) return (0)