当前位置: 首页 > 知识库问答 >
问题:

交互式经纪人Python API-执行多笔交易

荀振国
2023-03-14

我正在尝试为Python应用编程接口创建一个程序,以便一次下多个交易/市场订单。我在网上使用了一个教程来获取一些代码,并做了一些更改。但是,我不能一次下多个订单。我使用了2个列表1是用于符号,另一个是用于它们的数量。(例如:购买3只苹果股票)。我的代码只执行最后一个订单:即“购买3只客户关系管理股票”。有人能帮我弄清楚如何下多个订单吗?

下面是我的Python代码:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.order import *
from threading import Timer
import pandas as pd

t = ['AAPL', 'CRM']

n = [2, 3]

class TestApp(EWrapper, EClient):
def __init__(self):
    EClient.__init__(self, self)

def error(self, reqId , errorCode, errorString):
    print("Error: ", reqId, " ", errorCode, " ", errorString)

def nextValidId(self, orderId ):
    self.nextOrderId = orderId
    self.start()

def orderStatus(self, orderId , status, filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld, mktCapPrice):
    print("OrderStatus. Id: ", orderId, ", Status: ", status, ", Filled: ", filled, ", Remaining: ", remaining, ", LastFillPrice: ", lastFillPrice)

def openOrder(self, orderId, contract, order, orderState):
    print("OpenOrder. ID:", orderId, contract.symbol, contract.secType, "@", contract.exchange, ":", order.action, order.orderType, order.totalQuantity, orderState.status)

def execDetails(self, reqId, contract, execution):
    print("ExecDetails. ", reqId, contract.symbol, contract.secType, contract.currency, execution.execId,
          execution.orderId, execution.shares, execution.lastLiquidity)

def start(self):
    for i in t:
        contract = Contract()
        contract.symbol = i
        contract.secType = "STK"
        contract.exchange = "SMART"
        contract.currency = "USD"
        contract.primaryExchange = "NASDAQ"

    for j in n:
        order = Order()
        order.action = "BUY"
        order.totalQuantity = j
        order.orderType = "MKT"

    self.placeOrder(self.nextOrderId, contract, order)

def stop(self):
    self.done = True
    self.disconnect()

def main():
   app = TestApp()
   app.nextOrderId = 0
   app.connect("127.0.0.1", 7497, 9)

   Timer(3, app.stop).start()
   app.run()

if __name__ == "__main__":
main()

共有1个答案

佘茂才
2023-03-14

问题在于for循环:

for j in n:
    order = Order()
    order.action = "BUY"
    order.totalQuantity = j
    order.orderType = "MKT"

self.placeOrder(self.nextOrderId, contract, order)

此代码创建订单n次,然后向IB提交一份订单。如果您想提交n份订单,需要调用self。将订单放入for循环中:

for j in n:
    order = Order()
    order.action = "BUY"
    order.totalQuantity = j
    order.orderType = "MKT"
    self.placeOrder(self.nextOrderId, contract, order)

确保你增加了self。下订单后,下一个订单编号

 类似资料:
  • 我正在尝试为API创建一个程序,一次进行多个交易,然后获取股票价格,然后每隔一段时间重新平衡一次。我使用了一个在线教程来获取一些代码,并做了一些调整。 但是,当我运行代码时,它经常连接,如果我重新启动IB TWS,它会下订单。但是如果我再次运行代码,它就不起作用,或者显示它将连接的任何指示。有人能帮我弄清楚如何保持连接,这样我就可以运行main.java文件,它会执行多个交易,然后结束连接吗?我需

  • 我曾尝试在VisualStudio2008中设置Interactive Broker的C API,但我知道的C非常有限,并且不断出现错误: 1)是否有任何方法可以使用某种轻量级的脚本语言来连接到Interactive Brokers并进行交易。 像Python这样轻量级的东西就可以了,是的,我已经研究过IBMY,但我不明白java2python系统是如何工作的。 2) 您是如何设置您的自动系统的,

  • 我想使用IB Api,但无法计算我们如何请求完整的符号列表和信息。 在我找到的文档中:reqScannerParameters()——但不清楚如何获得纳斯达克股票的列表? 有更好的办法吗?

  • Noob是个问题,但我正试图弄清楚Matlab交易工具箱使用的是哪种API,以便我可以参考适当的指南。 Matlab网站表示,有关如何实现交易系统的详细信息,请参考交互式经纪人API指南。。http://www.mathworks.com/help/trading/ibtws.createorder.html#inputarg_ibContract 但是,当我打开Interactive Broke

  • 基本上,我想使用python来查询我的IB订单历史,然后进行一些分析。但我找不到任何现有的API来查询这些数据,有人有这样做的经验吗?

  • 有了下面的标准代码,我可以使用一个免费的演示帐户提交市场(MKT)和限额订单(LMT) 有没有人有提交LOO或MOO订单的经验?当我改变时: 我没有得到一个例外,但是,没有悬而未决的订单显示在IB TWS(演示)。