Exemplo n.º 1
0
def get_contract_details(client):
    ''' Define the contract of intrest'''
    # pdb.set_trace()
    contract = Contract()
    contract.symbol = 'NIFTY50'
    contract.secType = "CONTFUT"
    contract.exchange = 'NSE'
    contract.primaryExchange = 'NSE'
    contract.currency = "INR"
    contract.includeExpired = True

    # Get complete details about the contract from IB's database
    client.contractDetailsEnd_available.clear(
    )  # internal flag is set to False
    client.reqContractDetails(1, contract)
    client.contractDetailsEnd_available.wait(
    )  # block thread until internal flag is set to True

    if client.local_symbol:
        print('Local Symbol : {}'.format(client.local_symbol))
        # Set additional contract data
        contract.localSymbol = client.local_symbol
        contract.multiplier = client.multiplier
    else:
        print('Could not access contract data From reqContractDetails')
        exit_program(client)

    return contract
Exemplo n.º 2
0
def main():

    # Create the client and connect to TWS
    client = ReadFutures('127.0.0.1', 7497, 0)

    # Get expiration dates for contracts
    for symbol in client.symbols:

        # Define contract of interest
        con = Contract()
        con.symbol = symbol
        con.secType = "CONTFUT"
        con.exchange = client.symbols[symbol]
        con.currency = "USD"
        con.includeExpired = True
        client.reqContractDetails(0, con)
        time.sleep(3)

        # Request historical data for each contract
        if client.local_symbol:

            # Initialize price dict
            for v in ['CLOSE', 'LOW', 'HIGH', 'VOL']:
                client.price_dict[v] = []

            # Set additional contract data
            con.localSymbol = client.local_symbol
            con.multiplier = client.multiplier

            # Request historical data
            end_date = datetime.today().date() - timedelta(days=1)
            client.reqHistoricalData(1, con,
                                     end_date.strftime("%Y%m%d %H:%M:%S"),
                                     '1 Y', '1 day', 'TRADES', 1, 1, False, [])
            time.sleep(3)

            # Write data to a CSV file
            if client.price_dict['CLOSE']:
                df = pd.DataFrame(data=client.price_dict)
                df.to_csv(symbol + '.csv', encoding='utf-8', index=False)
                client.price_dict.clear()
        else:
            print('Could not access contract data')
            exit()

    # Disconnect from TWS
    client.disconnect()
def main():
    # Create the client and connect to TWS
    client = WriteFuturesToCSV('127.0.0.1', 7497, 0)
    client.nextValidId_available.wait(
    )  # block thread until internal flag is set to True

    print('\n   Good to Go Baba. We are Connected to TWS')
    print('   The Order Id is: {}'.format(client.orderId))
    print('   The Account Details are: {}\n'.format(client.accountsList))

    # Get expiration dates for contracts
    for count, symbol in enumerate(client.symbols):
        # Define contract of interest
        contract = Contract()
        contract.symbol = symbol
        contract.secType = "CONTFUT"
        contract.exchange = client.symbols[symbol]
        contract.primaryExchange = client.symbols[symbol]
        contract.currency = "INR"
        contract.includeExpired = True

        client.contractDetailsEnd_available.clear(
        )  #internal flag is set to False
        client.reqContractDetails(count, contract)
        client.contractDetailsEnd_available.wait(
        )  # block thread until internal flag is set to True

        # Request historical data for each contract
        if client.local_symbol:
            print('Local Symbol : {}'.format(client.local_symbol))
            print('Symbol : {}'.format(symbol))

            # Set additional contract data
            contract.localSymbol = client.local_symbol
            contract.multiplier = client.multiplier

            # Initialize the deque
            client.date_dq.clear()
            client.open_dq.clear()
            client.high_dq.clear()
            client.low_dq.clear()
            client.close_dq.clear()
            client.volume_dq.clear()

            client.historicalDataEnd_available.clear(
            )  #internal flag is set to False

            # Request historical data
            query_time = (datetime.today().date() -
                          timedelta(days=0)).strftime("%Y%m%d %H:%M:%S")
            client.reqHistoricalData(count, contract, query_time, '2 Y',
                                     '1 day', 'TRADES', 1, 1, False, [])
            client.historicalDataEnd_available.wait(
            )  # block thread until internal flag is set to True

            #  Create List
            date_list = list(client.date_dq)
            open_list = list(client.open_dq)
            high_list = list(client.high_dq)
            low_list = list(client.low_dq)
            close_list = list(client.close_dq)
            volume_list = list(client.volume_dq)
            combined_list = [
                date_list, open_list, high_list, low_list, close_list,
                volume_list
            ]

            # Write data to a CSV file
            df = pd.DataFrame(combined_list).transpose()
            df.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
            df['Date'] = pd.to_datetime(
                df['Date'])  # Convert to pandas DateTime format
            df = df[df.Volume !=
                    0]  # Drop all entries for which volume traded = 0
            df.to_csv(client.local_symbol + '.csv',
                      encoding='utf-8',
                      index=False)

            combined_list = []  # Empty the List
        else:
            print('Could not access contract data')
            sys.exit()

    # Disconnect from TWS. But first cancel open Subscriptions
    client.cancelHistoricalData(count)  # provide ID of original request
    client.disconnect()