簡體   English   中英

盈透證券交易平台,Python API

[英]Interactive Brokers TWS, Python API

我有個問題。 在我的程序中間查看下面大寫的問題。 不知何故,這兩個列表是空的。 class TestApp 中的 function position 似乎沒有被調用。 任何幫助表示贊賞。 我被困在這里,沒有一些幫助找不到解決方案。

 class TestApp(EWrapper, EClient): def __init__(self): EClient.__init__(self, self) self.position_symbols=[] self.position_shares=[] def error(self, reqId, errorCode, errorString): print('Error: ', reqId, " ", errorCode, " ", errorString) def position(self, account, contract, position, avgCost): super().position(account, contract, position, avgCost) print("Position", contract.symbol, position, avgCost) self.position_symbols.append(contract.symbol) self.position_shares.append(str(position)) def nextValidId(self, orderId): self.nextOrderId = orderId self.start() def start(self): self.reqPositions() def stop(self): self.done = True self.cancelScannerSubscription(1) self.disconnect() class MyThread(Thread, EWrapper, EClient): ib=None def __init__(self): self.ib=TestApp() Thread.__init__(self) self.start() self.ib.connect('127.0.0.1', 7497, 0) app = TestApp() app.nextOrderId = 0 def run(self): for i in range (332, 345, 2): time.sleep(4) loopindex = i % numsymbol # THOSE TWO LINES OF CODES ARE NOT WORKING. # PROBABLY DUE TO THREADING ISSUES. # THE TWO LISTS ARE EMPTY print(self.ib.position_symbols) print(self.ib.position_shares) my = None while True: user_input = input("What do I do?") if user_input == "start thread": if my == None: my = MyThread() elif user_input.upper() in ["REMOVE", "ADD"]: do something....

您應該為 EClient.run() 方法使用新線程。 然后在主線程中執行其他所有操作。

這現在有效:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from threading import Thread
import time


class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)
        self.position_symbols = []
        self.position_shares = []

    def error(self, reqId, errorCode, errorString):
        print('Error: ', reqId, " ", errorCode, " ", errorString)

    def position(self, account, contract, position, avgCost):
        super().position(account, contract, position, avgCost)
        print("Position", contract.symbol, position, avgCost)
        self.position_symbols.append(contract.symbol)
        self.position_shares.append(str(position))

    def nextValidId(self, orderId):
        self.nextOrderId = orderId
        self.start()

    def start(self):
        self.reqPositions()

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


# class MyThread(Thread, EWrapper, EClient):
#     ib = None
#
#     def __init__(self):
#         self.ib = TestApp()
#         Thread.__init__(self)
#
#         self.start()
#
#         self.ib.connect('127.0.0.1', 7497, 0)
#         app = TestApp()
#         app.nextOrderId = 0
#
#     def run(self):
#         for i in range(332, 345, 2):
#             time.sleep(4)
#             # loopindex = i % numsymbol
#
#             # THOSE TWO LINES OF CODES ARE NOT WORKING.
#             # PROBABLY DUE TO THREADING ISSUES.
#             # THE TWO LISTS ARE EMPTY
#
#             print(self.ib.position_symbols)
#             print(self.ib.position_shares)


app = TestApp()
app.connect('127.0.0.1', 7497, 0)

my = None
while True:
    app.nextOrderId = 0
    user_input = input("What do I do?")
    if user_input == "start thread":
        if my == None:
            my = Thread(target=app.run)
            my.start()

    elif user_input.upper() in ["REMOVE", "ADD"]:
        # do
        # something....
        pass

    for i in range(332, 345, 2):
        time.sleep(4)
        # loopindex = i % numsymbol

        # NOW WORKING

        print(app.position_symbols)
        print(app.position_shares)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM