【发布时间】:2017-01-17 16:19:55
【问题描述】:
我有以下示例代码,当我第一次尝试运行它时,它可以工作:
from ib.opt import Connection, message
from ib.ext.Contract import Contract
from ib.ext.Order import Order
def make_contract(symbol, sec_type, exch, prim_exch, curr):
Contract.m_symbol = symbol
Contract.m_secType = sec_type
Contract.m_exchange = exch
Contract.m_primaryExch = prim_exch
Contract.m_currency = curr
return Contract
def make_order(action,quantity, price = None):
if price is not None:
order = Order()
order.m_orderType = 'LMT'
order.m_totalQuantity = quantity
order.m_action = action
order.m_lmtPrice = price
else:
order = Order()
order.m_orderType = 'MKT'
order.m_totalQuantity = quantity
order.m_action = action
return order
cid = 100
while __name__ == "__main__":
conn = Connection.create(port=7496, clientId=999)
conn.connect()
oid = cid
cont = make_contract('AAPL', 'STK', 'SMART', 'SMART', 'USD')
offer = make_order('BUY', 1, 200)
conn.placeOrder(oid, cont, offer)
conn.disconnect()
x = raw_input('enter to resend')
cid += 1
当我第一次运行脚本时,IB的界面会弹出一个窗口,显示API的模拟交易配置信息。但是第二次,第三次运行它时,弹出信息再也不会出现,这让我感到困惑。这里有什么问题吗?
【问题讨论】:
-
不应该是
if __name__ == "__main__":。我想知道如果使用while循环会发生什么? -
我不知道足够多的python来回答,但你应该总是注册一个错误处理程序。我会用一个只打印味精的处理程序来做一个 registerAll 。然后你就可以看到问题了。以其他 ibpy 问题为例。如果我不得不猜测您可能需要在循环中声明
global cid。您必须跟踪一生中使用的最后一个 cid,并且始终以 1 递增,因此 100 也需要更改。 -
我正在使用 iPython,这意味着我可以一次运行每一行代码,实际上我不是在终端中编译它,而是使用 iPython 并一次运行一个,所以问题不在于如果 name == "main" 我很确定
标签: python api interactive-brokers