示例#1
0
def read_fx_prices(currency_code: str, tail_size: int = 20):
    """
    Retrieve FX prices from a database, print last tail_size rows

    Will only work for codes in database, so won't do cross rate conversions to find a non existent rate

    :param currency_code: The currency code, for example 'GBPUSD'
    :param tail_size: The length of the tail to print
    :return: None, but print results
    """

    log = logger()

    arcticfxdata = arcticFxPricesData(log=log.setup(
        component="arcticFxPricesData"))

    list_of_codes_all = arcticfxdata.get_list_of_fxcodes()

    try:
        assert currency_code in list_of_codes_all
    except:
        raise Exception("Currency code %s not in possible codes %s" %
                        (currency_code, list_of_codes_all))
    fx_prices = arcticfxdata.get_fx_prices(currency_code)

    print("/n Last %d FX rates for %s \n\n" % (tail_size, currency_code))
    print(fx_prices.tail(tail_size))
示例#2
0
def update_fx_prices():
    """
    Update FX prices stored in Arctic (Mongo) with interactive brokers prices (usually going back about a year)

    :return: Nothing
    """

    mongo_db = mongoDb(
    )  # will use default database, host unles specified here

    log = logger("Update-FX-prices", mongo_db=mongo_db)

    ib_conn = connectionIB(log=log.setup(
        component="IB-connection"))  # will use default port, host

    ibfxpricedata = ibFxPricesData(ib_conn,
                                   log=log.setup(component="ibFxPricesData"))
    arcticfxdata = arcticFxPricesData(
        mongo_db=mongo_db, log=log.setup(component="arcticFxPricesData"))

    list_of_codes_all = ibfxpricedata.get_list_of_fxcodes(
    )  # codes must be in .csv file /sysbrokers/IB/ibConfigSpotFx.csv
    log.msg("FX Codes: %s" % str(list_of_codes_all))
    for fx_code in list_of_codes_all:
        log.label(currency_code=fx_code)
        new_fx_prices = ibfxpricedata.get_fx_prices(
            fx_code)  # returns fxPrices object

        arcticfxdata.update_fx_prices(fx_code, new_fx_prices)

    ib_conn.disconnect()
示例#3
0
    def _get_fx_data_object(self):

        database_name = self._database_name
        host = self._host
        port = self._port

        fx_prices_data_object = arcticFxPricesData(
            mongoDb(database_name=database_name, host=host))
        fx_prices_data_object.log = self.log

        return fx_prices_data_object
def update_fx_prices():
    """
    Update FX prices stored in Arctic (Mongo) with interactive brokers prices (usually going back about a year)

    :return: Nothing
    """

    # avoid unique ids
    conn = connectionIB(client=100)

    ibfxpricedata = ibFxPricesData(conn)
    arcticfxdata = arcticFxPricesData()

    list_of_codes_all = ibfxpricedata.get_list_of_fxcodes(
    )  # codes must be in .csv file /sysbrokers/IB/ibConfigSpotFx.csv
    print(list_of_codes_all)

    for fx_code in list_of_codes_all:
        print(fx_code)
        new_fx_prices = ibfxpricedata.get_fx_prices(
            fx_code)  # returns fxPrices object

        if len(new_fx_prices) == 0:
            print("couldn't get any more data")
            continue

        old_fx_prices = arcticfxdata.get_fx_prices(fx_code)

        new_fx_prices = new_fx_prices[
            new_fx_prices.index > old_fx_prices.index[-1]]

        if len(new_fx_prices) == 0:
            print("No new data found")
            continue

        # merge old and new
        print("Old:")
        print(old_fx_prices.tail(2))
        print("New:")
        print(new_fx_prices.head(2))

        fx_prices = pd.concat([old_fx_prices, new_fx_prices], axis=0)
        fx_prices = fx_prices.sort_index()

        # remove duplicates
        fx_prices = fx_prices[~fx_prices.index.duplicated(keep='first')]

        print("Merged")
        print(fx_prices.tail(5))

        # write
        arcticfxdata.add_fx_prices(fx_code, fx_prices, ignore_duplication=True)
示例#5
0
def update_fx_prices():
    """
    Update FX prices stored in Arctic (Mongo) with interactive brokers prices (usually going back about a year)

    :return: Nothing
    """

    log = logger("Update-FX-prices")

    ib_conn = connectionIB(log=log.setup(
        component="IB-connection"))  # will use default port, host
    mongo_db = mongoDb(
    )  # will use default database, host unles specified here

    ibfxpricedata = ibFxPricesData(ib_conn,
                                   mongo_db=mongo_db,
                                   log=log.setup(component="ibFxPricesData"))
    arcticfxdata = arcticFxPricesData(
        mongo_db=mongo_db, log=log.setup(component="arcticFxPricesData"))

    list_of_codes_all = ibfxpricedata.get_list_of_fxcodes(
    )  # codes must be in .csv file /sysbrokers/IB/ibConfigSpotFx.csv
    log.msg("FX Codes: %s" % str(list_of_codes_all))
    for fx_code in list_of_codes_all:
        log.label(currency_code=fx_code)
        new_fx_prices = ibfxpricedata.get_fx_prices(
            fx_code)  # returns fxPrices object

        if len(new_fx_prices) == 0:
            log.error("Error trying to get data for %s" % fx_code)
            continue

        old_fx_prices = arcticfxdata.get_fx_prices(fx_code)

        new_fx_prices = new_fx_prices[
            new_fx_prices.index > old_fx_prices.index[-1]]

        if len(new_fx_prices) == 0:
            log.msg("No additional data for %s" % fx_code)
            continue

        fx_prices = pd.concat([old_fx_prices, new_fx_prices], axis=0)
        fx_prices = fx_prices.sort_index()

        # remove duplicates
        fx_prices = fx_prices[~fx_prices.index.duplicated(keep='first')]

        # write
        arcticfxdata.add_fx_prices(fx_code, fx_prices, ignore_duplication=True)
示例#6
0
def spotfx_from_csv_and_investing_dot_com(datapath,
                                          ADD_TO_ARCTIC=True,
                                          ADD_TO_CSV=True,
                                          ADD_EXTRA_DATA=True):
    # You can adapt this for different providers by changing these parameters
    if ADD_EXTRA_DATA:
        investingDotCom_csv_fx_prices = csvFxPricesData(
            datapath=datapath, config=investing_dot_com_config)
    if ADD_TO_ARCTIC:
        arctic_fx_prices = arcticFxPricesData()
    my_csv_fx_prices_data = csvFxPricesData()

    list_of_ccy_codes = my_csv_fx_prices_data.get_list_of_fxcodes()

    for currency_code in list_of_ccy_codes:

        print(currency_code)

        fx_prices_my_csv = my_csv_fx_prices_data.get_fx_prices(currency_code)

        fx_prices = investingDotCom_csv_fx_prices.get_fx_prices(currency_code)

        if ADD_EXTRA_DATA:
            fx_prices_investingDotCom = investingDotCom_csv_fx_prices.get_fx_prices(
                currency_code)
            print("%d rows for my csv files, %d rows for investing.com" %
                  (len(fx_prices_my_csv), len(fx_prices_investingDotCom)))
            # Merge;
            last_date_in_my_csv = fx_prices_my_csv.index[-1]
            fx_prices_investingDotCom = fx_prices_investingDotCom[
                last_date_in_my_csv:]
            fx_prices = pd.concat(
                [fx_prices_my_csv, fx_prices_investingDotCom])
            fx_prices = fx_prices.loc[~fx_prices.index.duplicated(
                keep="first")]
        else:
            fx_prices = fx_prices_my_csv

        print("%d rows to write for %s" % (len(fx_prices), currency_code))

        if ADD_TO_CSV:
            my_csv_fx_prices_data.add_fx_prices(currency_code,
                                                fx_prices,
                                                ignore_duplication=True)

        if ADD_TO_ARCTIC:
            arctic_fx_prices.add_fx_prices(currency_code,
                                           fx_prices,
                                           ignore_duplication=True)
    def _get_fx_data_object(self):

        fx_prices_data_object = arcticFxPricesData(self.mongo_db)
        fx_prices_data_object.log = self.log

        return fx_prices_data_object
    def _get_fx_data_object(self):

        fx_prices_data_object = arcticFxPricesData(self._database_name)
        fx_prices_data_object.log = self.log

        return fx_prices_data_object
示例#9
0
ADD_TO_ARCTIC = True
ADD_TO_CSV = True

# You may need to change this!
# There must be ONLY fx prices here, with filenames "GBPUSD.csv" etc
INVESTING_DATA_PATH = "data.other_sources.investing_dot_com.spotfx"

if __name__ == '__main__':
    # You can adapt this for different providers by changing these parameters
    investingDotCom_csv_fx_prices = csvFxPricesData(
        datapath=INVESTING_DATA_PATH,
        price_column="Price",
        date_column="Date",
        date_format="%b %d, %Y")
    if ADD_TO_ARCTIC:
        arctic_fx_prices = arcticFxPricesData()
    my_csv_fx_prices = csvFxPricesData()

    list_of_ccy_codes = investingDotCom_csv_fx_prices.get_list_of_fxcodes()

    for currency_code in list_of_ccy_codes:

        print(currency_code)

        fx_prices_investingDotCom = investingDotCom_csv_fx_prices.get_fx_prices(
            currency_code)
        fx_prices_my_csv = my_csv_fx_prices.get_fx_prices(currency_code)
        print("%d rows for my csv files, %d rows for investing.com" %
              (len(fx_prices_my_csv), len(fx_prices_investingDotCom)))
        # Merge;
        last_date_in_my_csv = fx_prices_my_csv.index[-1]
"""
Get FX prices from Quandl and write to Arctic
"""
from sysdata.quandl.quandl_spotfx_prices import quandlFxPricesData
from sysdata.arctic.arctic_spotfx_prices import arcticFxPricesData
from sysdata.csv.csv_spot_fx import csvFxPricesData

# could get these from stdin
ADD_TO_ARCTIC = True
ADD_TO_CSV = False

if __name__ == '__main__':
    quandl_fx_prices = quandlFxPricesData()
    arctic_fx_prices = arcticFxPricesData()
    csv_fx_prices = csvFxPricesData()

    list_of_ccy_codes = quandl_fx_prices.get_list_of_fxcodes()

    for currency_code in list_of_ccy_codes:
        fx_prices = quandl_fx_prices.get_fx_prices(currency_code)
        print(fx_prices)

        if ADD_TO_CSV:
            csv_fx_prices.add_fx_prices(currency_code, fx_prices)

        if ADD_TO_ARCTIC:
            arctic_fx_prices.add_fx_prices(currency_code, fx_prices)
示例#11
0
    def _get_fx_data_object(self):

        fx_prices_data_object = arcticFxPricesData(self._database_name)
        fx_prices_data_object.log = self.log

        return fx_prices_data_object