Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
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)))
Ejemplo n.º 5
0
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])
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)