![](/img/trans.png)
[英]Return price as an object/variable using Interactive Brokers TWS API - Python
[英]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.