-1

以下は、私がオープンポジションをチェックする方法のサンプルです。ポジションが存在しない場合は 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()    

output is ERROR -1 2104 Market data farm connection is OK:usfuture ERROR -1 2104 Market data farm connection is OK:usfarm ERROR -1 2106 HMDS data farm connection is OK:ushmds File Created Sucessfully

4

1 に答える 1

2

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()
于 2019-07-28T22:41:45.567 に答える