私はIBPyは私の有価証券のリストの最後の価格を与えるために取得するには、以下のコードを試してみましたこんにちは、その後、CSVIBPy:reqMktDataから古くなったデータを取得していますか?
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)
にこれらの価格を保存し、私はこのコードを使用する場合、それはリストのためのデータを取得開始します私が提供した株式は、最終的に次のいくつかのティッカーのために価格を繰り返す単一のティッカーで捕らえられます。これはリスト全体で散発的に起こりますが、たとえば1回の実行でSLBの価格を80.63(正し)とし、単純に80.63の価格をリストの残りの株式について繰り返すと、何らかの形で変数pxが新しい値に更新されません新しいテロップのために。私がこれを実行するたびに、これは常に正しいデータがティッカーのために引き出され、その後いくつかの後続のティッカーが同じ値を持つリストのどこかで発生するようです。この問題を解決する方法や、株式のリストでこの問題を回避するIBからのリアルタイムデータを引き出す別の方法に関するアイデア?