3

SPY で書かれた原資産とオプションの両方を Interactive Brokers API 経由で取得しようとしています。現在のオプション (ストライク、権利など) を取得することは問題ではありませんが、過去 5 か月から今。

コードは次のとおりです。

from ib.ext.Contract import Contract
from ib.ext.ContractDetails import ContractDetails
from ib.opt import ibConnection, message
import time
import datetime

def watcher(msg):
    print(msg)

def contractDetailsHandler(msg):
    contracts.append(msg.contractDetails.m_summary)

def contractDetailsEndHandler(msg):
    global DataWait
    DataWait =  False

def contractHistDetailsHandler(msg):
    contracts.append(msg.contractDetails.m_summary)


con = ibConnection()
con.host = "..."
con.port = ...
con.clientId = 5
con.registerAll(watcher)
con.register(contractDetailsHandler, 'ContractDetails')
con.register(contractDetailsEndHandler, 'ContractDetailsEnd')
con.register(contractHistDetailsHandler, message.historicalData)

con.connect()

contract = Contract()
contract.m_exchange     = "SMART"
contract.m_secType      = "OPT"
contract.m_symbol       = "SPY"
contract.m_currency     = "USD"

endtime = '20170102 01:00:00'

#con.reqContractDetails(1, contract)

con.reqHistoricalData(2,contract,endtime,"5 M","1 sec","TRADES",0,1)
con.reqHistoricalData(3,contract,endtime,"5 M","1 sec","MIDPOINT",0,1)

contracts = []

DataWait = True  ;  i = 0
while DataWait and i < 90:
    i += 1 ; print(i),
    time.sleep(1)

con.disconnect()
con.close()

print(contracts)

私が得るのは次のとおりです。

<error id=2, errorCode=321, errorMsg=Error validating request:-'yd' : cause - When the local symbol field is empty, please fill all option fields (right, strike, expiry))>

Contract オブジェクトにそれらが含まれていないことはわかっていますが、権利、ストライキ、有効期限をどのように知ることができるでしょうか? それは基本的に私が必要とするものです(日付とオプション中の基本的な変更を伴う)。そのための別の方法はありますか?

いくつかの指針を教えていただければ、大歓迎です!または、選択した範囲のストライキ、権利、有効期限付きの原資産とオプションのいずれかの代替ソース (支払われるかどうかに関係なく、単一プロジェクトに必要です)。

事前にありがとうございました!どんな入力でも大歓迎です。

4

2 に答える 2