【问题标题】:Export all open order record from IB trader station to csv file将所有未结订单记录从 IB 交易站导出到 csv 文件
【发布时间】:2021-09-21 07:10:20
【问题描述】:

我正在为 Ibapi 开发 Python 程序,我可以自动下订单。 此外,我想通过程序从交易者站导出当前的未结订单。

self.reqAllOpenOrders() (参考:https://interactivebrokers.github.io/tws-api/open_orders.html

我正在使用此命令来获取所有未结订单。它给出了终端中的所有记录,记录的类型为无类型。所以,我想知道如何将该记录导出到 csv 文件。

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.order import *

import threading
import time


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

    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)

        self.reqAllOpenOrders()

def run_loop():
    app.run()

app = IBapi()
app.connect('127.0.0.1', 7497, 123)

# Start the socket in a thread
api_thread = threading.Thread(target=run_loop, daemon=True)
api_thread.start()

time.sleep(3)
app.disconnect()

【问题讨论】:

  • 你是说这段代码有效吗?因为我根本看不到任何会调用您的 openOrder 函数的东西。您是否应该在您的__init__ 中调用reqAllOpenOrders,然后它会重复调用您的openOrder
  • 是的。事实上,这段代码运行良好。 openOrder id: 175 TLSA STK @ SMART : SELL LMT 10.0 Submitted openOrder id: 168 TLSA STK @ SMART : SELL LMT 10.0 Submitted openOrder id: 167 TLSA STK @ SMART : SELL LMT 10.0 Submitted openOrder id: 178 MSFT STK @ SMART : SELL LMT 10.0 Submitted 这是一些输出。即使我不包含self.reqAllOpenOrders,它似乎也调用了该函数。
  • 在这种情况下,您只需打开__init__ 中的CSV 文件,然后将数据写入openOrder,而不是打印它。
  • 使用self. 创建可以在类的所有函数中访问的变量。 IE。 self.file = open(...) 和其他功能 self.file.write(...)

标签: python ib-api


【解决方案1】:
class IBapi(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)
        self.file = open('file.csv', 'w')

    def openOrder(self, orderId, contract, order, orderState):
        mywriter = csv.writer(
            self.file, lineterminator='\n')
        mywriter.writerows([df])

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 2018-09-16
    • 2021-11-25
    • 1970-01-01
    • 2011-03-17
    • 2020-11-03
    • 1970-01-01
    • 2018-12-10
    • 2021-12-02
    相关资源
    最近更新 更多