def mark_contracts_as_stopped_sampling(instrument_code,
                                       contracts_not_sampling,
                                       data,
                                       log=logtoscreen("")):
    """

    :param instrument_code: str
    :param contracts_not_sampling: list of contractDate objects
    :param data: dataBlobg
    :return: None
    """
    diag_contracts = diagContracts(data)
    update_contracts = updateContracts(data)

    for contract_date_object in contracts_not_sampling:
        contract_date = contract_date_object.date

        # Mark it as stop sampling in the database
        contract = diag_contracts.get_contract_data(instrument_code,
                                                    contract_date)
        if contract.currently_sampling:
            contract.sampling_off()
            update_contracts.add_contract_data(contract,
                                               ignore_duplication=True)

            log.msg(
                "Contract %s has now stopped sampling" % str(contract),
                contract_date=contract.date,
            )
        else:
            # nothing to do
            pass

    return None
def add_missing_contracts_to_database(instrument_code,
                                      missing_from_db,
                                      data,
                                      log=logtoscreen("")):
    """

    :param instrument_code: str
    :param missing_from_db: list of contract_date objects
    :param data: dataBlob
    :return: None
    """
    diag_contracts = diagContracts(data)
    update_contracts = updateContracts(data)

    for contract_to_add in missing_from_db:
        contract_date = contract_to_add.date
        if diag_contracts.is_contract_in_data(instrument_code, contract_date):
            contract_to_add = diag_contracts.get_contract_data(
                instrument_code, contract_date)

        # Mark it as sampling
        contract_to_add.sampling_on()

        # Add it to the database
        # We are happy to overwrite
        update_contracts.add_contract_data(contract_to_add,
                                           ignore_duplication=True)

        log.msg("Contract %s now added to database and sampling" %
                str(contract_to_add))

    return None
Пример #3
0
def add_missing_contract_to_database(data: dataBlob, contract_to_add: futuresContract):
    diag_contracts = diagContracts(data)
    update_contracts = updateContracts(data)
    instrument_code = contract_to_add.instrument_code

    contract_date_str = contract_to_add.date_str

    if diag_contracts.is_contract_in_data(instrument_code, contract_date_str):
        contract_to_add = diag_contracts.get_contract_object(
            instrument_code, contract_date_str
        )

    # Mark it as sampling
    contract_to_add.sampling_on()

    # Add it to the database
    # We are happy to overwrite
    update_contracts.add_contract_data(
        contract_to_add, ignore_duplication=True)

    log = data.log.setup(instrument_code=instrument_code)

    log.msg(
        "Contract %s now added to database and sampling" %
        str(contract_to_add))
def update_expiry_for_contract(contract_object, data):
    """
    Get an expiry from IB, check if same as database, otherwise update the database

    :param contract_object: contract object
    :param data: dataBlob
    :param log: log
    :return: None
    """
    log = data.log
    diag_contracts = diagContracts(data)
    data_broker = dataBroker(data)
    update_contracts = updateContracts(data)

    contract_date = contract_object.date
    instrument_code = contract_object.instrument_code

    log = log.setup(
        instrument_code=instrument_code,
        contract_date=contract_date)
    db_contract = diag_contracts.get_contract_data(
        instrument_code, contract_date)

    # Both should be in format expiryDate(yyyy,mm,dd)
    db_expiry_date = db_contract.date.expiry_date
    try:
        ib_expiry_date = (
            data_broker.get_actual_expiry_date_for_instrument_code_and_contract_date(
                instrument_code, contract_date))

        if ib_expiry_date is missing_contract:
            raise Exception()

    except Exception as e:
        # We can do nothing with that...
        log.warn(
            "%s so couldn't get expiry date for %s" %
            (e, str(contract_object)))
        return None

    # Will they be same format?
    if ib_expiry_date == db_expiry_date:
        log.msg(
            "No change to contract expiry %s to %s"
            % (str(contract_object), str(ib_expiry_date))
        )
        return None

    # Different!
    contract_object.date.update_expiry_date(ib_expiry_date)
    update_contracts.add_contract_data(
        contract_object, ignore_duplication=True)

    log.msg(
        "Updated expiry of contract %s to %s"
        % (str(contract_object), str(ib_expiry_date))
    )

    return None
def update_contract_object_with_new_expiry_date(
        data: dataBlob, broker_expiry_date: expiryDate,
        contract_object: futuresContract):
    update_contracts = updateContracts(data)

    contract_object.update_expiry_date(broker_expiry_date)
    update_contracts.add_contract_data(contract_object,
                                       ignore_duplication=True)

    data.log.msg("Updated expiry of contract %s to %s" %
                 (str(contract_object), str(broker_expiry_date)))
Пример #6
0
def stop_expired_contracts_sampling(instrument_code: str, data: dataBlob):
    ## expiry dates will have been updated and are correct
    current_contract_chain_in_db = get_current_contract_chain_in_db(data, instrument_code)

    diag_contracts = diagContracts(data)
    update_contracts = updateContracts(data)
    log = data.log.setup(instrument_code=instrument_code)

    for contract_date_object in current_contract_chain_in_db:
        contract_date = contract_date_object.date_str

        # Mark it as stop sampling in the database
        contract = diag_contracts.get_contract_object(
            instrument_code, contract_date)
        if contract.expired() and contract.currently_sampling:
            contract.sampling_off()
            update_contracts.add_contract_data(
                contract, ignore_duplication=True)

            log.msg(
                "Contract %s has now stopped sampling" % str(contract),
                contract_date=contract.date_str,
            )