I wrote the program copied below. When I try to execute with the following data in the input file: ADBE,USD,NASDAQ CSCO,USD,NASDAQ GOOGL,USD,NASDAQ
it only runs for the first stock, ADBE, and does nothing afterwards. The idea is the program should run for each entry in the input file and downloads the corresponding Analysts forecast from InteractiveBrokers and writes it to a XML file.
can you please help me to identify the problem why it is running only for the first line in the input file?
Very much appreciated.
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
import time
class TestApp(EWrapper, EClient):
def __init__(self):
EClient.__init__(self, self)
def error(self, reqId, errorCode, errorString):
print("Error: ", reqId, "", errorCode, "", errorString)
def fundamentalData(self, reqId, fundamental_data):
Filename = str(Symbol) + '_Anal_Est.xml'
print("Filename: ", Filename)
f_out = open(Filename, "w")
f_out.write(fundamental_data)
f_out.close()
def main():
global Symbol
# The input file need to contain in each line: company ticker,currency,exchange - no spaces between them
Company_tickers = open("IB_FD_input.txt", 'r').readlines() # reads a file with companies tickers in one column
#print("Company_tickers: ", Company_tickers)
Number_compnaies = len(Company_tickers)
Company_count = 0
for stock in Company_tickers:
aa = stock.split(",")
Symbol = aa[0].replace(" ", "") # in case there is a space
Currency = aa[1].replace(" ", "")
Exchange = aa[2].replace("\n", "").replace(" ","") # need to remove the \n as it is the last field in the entry line
contract = Contract() # defining the stock to download the fundamental data from IB
contract.symbol = Symbol
contract.secType = "STK"
contract.exchange = "SMART"
contract.currency = Currency
contract.primaryExchange = Exchange
print("Contract: ", contract)
Company_count += 1 # To show progress on screen
print("\n\n" + "**********************" + "\n")
print(" " + Symbol + ": # " + str(Company_count) + " / " + str(Number_compnaies))
print("\n" + "**********************" + "\n")
app = TestApp()
app.connect("127.0.0.1", 7496, 0)
time.sleep(10)
app.reqFundamentalData(8001, contract, "RESC", [])
time.sleep(10)
app.run()
if __name__ == "__main__":
main()