嗨,我已尝试使用以下代码让 IBPy 为我提供证券列表的最后价格,然后将这些价格保存到 csv
from ib.opt import Connection
from ib.ext.Contract import Contract
import time
import csv
Equity = Contract()
Equity.m_secType = 'Stk'
Equity.m_exchange = 'Smart'
Equity.m_currency = 'USD'
EquityList = ['XOM', 'JNJ', 'BRK B', 'JPM','GE','T','WFC','BAC','PG','CVX','VZ','PFE','MRK','HD','C','KO','DIS','V','UNH','PEP','PM','IBM','MO','SLB','ORCL','MMM','MDT','MA','WMT','MCD','ABBV','BMY','BA','HON','CVS','SPY']
PriceList = []
PriceData = csv.writer(open('price.csv','wb'))
def savepx(msg):
global px
if msg.field == 4:
px = msg.price
def main():
conn = Connection.create(port=7496,clientId=100)
conn.connect()
count = 0
for ticker in EquityList:
Equity.m_symbol = ticker
conn.register(savepx,'TickPrice')
conn.reqMktData(count,Equity,225,False)
time.sleep(.15)
conn.cancelMktData(count)
PriceList.insert(count,px)
count = count + 1
conn.disconnect()
PriceData.writerow(EquityList)
PriceData.writerow(PriceList)
当我使用这个代码时,它开始获取我提供的股票列表的数据,但最终被一个单一的代码捕获,它重复接下来几个代码的价格。这种情况在整个列表中偶尔发生,但例如在一次运行中,它给出 SLB 的价格为 80.63(正确)然后简单地重复列表中其余股票的 80.63 的价格,不知何故没有将变量 px 更新为新值对于新的代码。每次我运行它时,这似乎总是发生在列表中的某个地方,其中为一个代码提取了正确的数据,然后几个后续代码具有相同的值。关于如何解决此问题或以不同方式从 IB 提取实时数据以避免股票列表出现此问题的任何想法?