reqPostions() 帮助断开 TWS / 盈透证券 / API 的连接



这是我如何检查未平仓头寸的示例。如果不存在仓位,则创建一个 txt 文件,如果存在未平仓仓位,则创建 .txt 文件。我的问题是我不知道如何断开它.它也在输出错误-1,见下面的脚本

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.common import *
from ibapi.contract import *
from ib.opt import ibConnection
import os.path
from os import path

class CheckPos(EClient, EWrapper):
            def __init__(self):
                EClient.__init__(self, self)
            def nextValidId(self, orderId:int):
                self.reqPositions()
            def position(self, account: str, contract: Contract, position: float,
                avgCost: float):
                super().position(account, contract, position, avgCost)
                if position >0:
                    try:
                        os.remove("noposition.txt")
                    except:
                       print("Open Positons")

                else:
                    try:
                        open("noposition.txt","w+")
                        print("File Created Sucessfully")
                    except:
                        print("No Open Positions")



def main():
    app = CheckPos()
    app.connect("127.0.0.1", 7497,421 )
    app.run()

if __name__ == "__main__":
    main()    

输出为错误 -1 2104 市场数据农场连接正常:未来错误 -1 2104 市场数据场连接正常:usfarm错误 -1 2106 HMDS 数据场连接正常:ushmds文件创建成功

你删除了 positionEnd(( 方法。 那是你应该断开连接的时候。

此行from ib.opt import ibConnection来自 IbPy,请将其删除。

我不确定您要对文件做什么,但您可能会在回调中返回许多位置。 最好将它们添加到列表中,并在程序完成所有位置后对它们执行一些操作。 我在 positionEnd(( 方法中写了一些东西,该方法断开连接然后保存数据。

ERROR -1 2104 Market data farm connection is OK:usfuture这样的行只是信息。 你可以忽略它们,除非他们说它坏了,但这是另一个错误代码。

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.common import *
from ibapi.contract import *
import os
class TestApp(EClient, EWrapper):
    posns = []
    fname = 'fname.txt'
    def __init__(self):
        EClient.__init__(self, self)
    def nextValidId(self, orderId:int):
        print("id", orderId)
        print("starting program")
        self.reqPositions()
    def error(self, reqId:TickerId, errorCode:int, errorString:str):
        print("Error: ", reqId, "", errorCode, "", errorString)
    def position(self, account: str, contract: Contract, position: float, avgCost: float):
        self.posns.append((account, contract.symbol, position, avgCost))
        print(contract.symbol, position)
    def positionEnd(self):
        print("end, disconnecting")
        self.disconnect()
        #write posns to file or delete file if no positions
        if self.posns: #means not empty
            with open(self.fname, "w") as outfile:
                outfile.write('n'.join(str(posn) for posn in self.posns))
        else: # no posns so delete file
            os.remove(self.fname)
def main():
    app = TestApp()
    app.connect("127.0.0.1", 7497, 421)
    app.run()
if __name__ == "__main__":
    main()

相关内容

  • 没有找到相关文章

最新更新