Как я могу запросить Исторические данные в л oop? (tws api) - PullRequest
0 голосов
/ 03 февраля 2020

Я довольно новичок в API tws, и я пытался написать программу, которая размещает базу заказов по исторической цене акций. Я попытался получить биржевые бирки из файла Excel и затем вызвать reqMktdata в l oop: класс TestApp (EClient, EWrapper):

def __init__(self):
    EClient.__init__(self,self)
    self.barsList=[]
def error(self, reqId, errorCode, errorString):
    print(reqId,"error",errorString)
def nextValidId(self,reqId):
    self.start()


def historicalData(self, reqId, bar):
    print(bar)


def start(self):
    contract = Contract()
    wb = Workbook.load_workbook('StockTickers.xlsx')
    sheet_ranges=wb['Sheet1']


    empty_list=[]
    empty_list.append(sheet_ranges['A1'].value)
    empty_list.append(sheet_ranges['A2'].value)
    empty_list.append(sheet_ranges['A3'].value)
    for i in empty_list:
        contract.symbol=str(i)
        print(i)




    contract.secType = "STK"
    contract.exchange = "SMART"
    contract.currency = "USD"
    contract.primaryExchange = "NASDAQ"

    self.reqHistoricalData(1, contract, "", "26 W", "1 day", "MIDPOINT", 0, 1, False, [])

def stop(self):
    self.done=True
    self.disconnect()

def main ():

app = TestApp()
app.nextOrderId=0
app.connect("127.0.0.1", 7497, 0)
Timer(3, app.stop).start()


app.run()

if name == " main ": main ()

однако, когда я пытался напечатать исторические данные, он печатает только исторические данные для Первый символ и останавливается. Кто-нибудь может указать, что я здесь сделал неправильно, или кто-то работал с получением данных в циклах? Большое спасибо.

1 Ответ

0 голосов
/ 11 февраля 2020

Вы должны сделать это по контракту:

def start(self):
    wb = Workbook.load_workbook('StockTickers.xlsx')
    sheet_ranges = wb['Sheet1']

    for cell in ['A3', 'A4', 'A5']:
        contract = Contract()
        contract.symbol = str(sheet_ranges[cell].value)
        contract.secType = "STK"
        contract.exchange = "SMART"
        contract.currency = "USD"
        contract.primaryExchange = "NASDAQ"
        self.reqHistoricalData(1, contract, "", "26 W", "1 day", "MIDPOINT", 0, 1, False, [])
...