如何解决AttributeError:'NoneType'对象没有属性'conId'
我正在使用Interactive brokers python API来对AMD进行限价订单。到目前为止,该代码是:
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.order import Order
import threading
import time
class TradingApp(EWrapper,EClient):
def __init__(self):
EClient.__init__(self,self)
def nextValidId(self,orderId):
self.nextValidId = orderId
def websocket_con():
app.run()
app = TradingApp()
app.connect("127.0.0.1",7497,clientId=13)
con_thread = threading.Thread(target=websocket_con,daemon=True)
con_thread.start()
time.sleep(1)
def Usstock(symbol,secType='STK',Currency='USD',exchnange = 'SMART'):
contract=Contract()
contract.symbol = symbol
contract.secType = secType
contract.currency = Currency
contract.exchange = exchnange
def limit_order(direction,quantity,price):
order=Order()
order.action = direction
order.orderType = 'LMT'
order.totalQuantity = quantity
order.lmtPrice = price
order_id = app.nextValidId
app.placeOrder(order_id,Usstock('AMD'),limit_order('BUY',10,50))
虽然我正在运行它,但是却收到错误消息:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-49-407bad8e9645> in <module>
40 order.lmtPrice = price
41 order_id = app.nextValidId
---> 42 app.placeOrder(order_id,50))
~\AppData\Roaming\Python\python37\site-packages\ibapi-9.76.1-py3.7.egg\ibapi\client.py in placeOrder(self,orderId,contract,order)
1041 # send contract fields
1042 if self.serverVersion() >= MIN_SERVER_VER_PLACE_ORDER_CONID:
-> 1043 flds.append(make_field( contract.conId))
1044 flds += [make_field( contract.symbol),1045 make_field( contract.secType),AttributeError: 'nonetype' object has no attribute 'conId'
但是我不知道我在哪里使用了'conId'或为什么显示此错误。有任何想法吗?谢谢!
解决方法
问题在于,在这两个函数的末尾,我应该添加返回合同和订单的内容,因为如果我做的不是全部,则只是对函数中的组件进行修饰。因此代码应为:
def Contract_Order():
contract=Contract()
contract.symbol = 'AMD'
contract.secType = 'STK'
contract.currency = 'USD'
contract.exchange = 'ISLAND'
return contract
def Limit_Order():
order=Order()
order.action = 'BUY'
order.orderType = 'LMT'
order.totalQuantity = 10
order.lmtPrice = 100
return order
只需添加退货合同和退货订单即可解决
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。