此文为ib_insync需要下载历史数据用的一些操作. 目的是能迅速查到想要的code.
ib_insync是ib的 python api. 因为vnpy已经封装了ib的实盘模块, 所以我用ib_insync只是为了下载历史数据.
ib基础
连接ib
python
1 | import ib_insync |
['util', 'Event', 'SoftDollarTier', 'PriceIncrement', 'Execution', 'CommissionReport', 'BarList', 'BarDataList', 'RealTimeBarList', 'BarData', 'RealTimeBar', 'HistogramData', 'NewsProvider', 'DepthMktDataDescription', 'ScannerSubscription', 'ScanDataList', 'FundamentalRatios', 'ExecutionFilter', 'PnL', 'PnLSingle', 'AccountValue', 'TickData', 'TickByTickAllLast', 'TickByTickBidAsk', 'TickByTickMidPoint', 'HistoricalTick', 'HistoricalTickBidAsk', 'HistoricalTickLast', 'TickAttrib', 'TickAttribBidAsk', 'TickAttribLast', 'MktDepthData', 'DOMLevel', 'TradeLogEntry', 'TagValue', 'FamilyCode', 'SmartComponent', 'PortfolioItem', 'Position', 'Fill', 'OptionComputation', 'OptionChain', 'Dividends', 'NewsArticle', 'HistoricalNews', 'NewsTick', 'NewsBulletin', 'ConnectionStats', 'Contract', 'Stock', 'Option', 'Future', 'ContFuture', 'Forex', 'Index', 'CFD', 'Commodity', 'Bond', 'FuturesOption', 'MutualFund', 'Warrant', 'Bag', 'ComboLeg', 'DeltaNeutralContract', 'ContractDetails', 'ContractDescription', 'ScanData', 'Trade', 'Order', 'OrderStatus', 'OrderState', 'OrderComboLeg', 'LimitOrder', 'MarketOrder', 'StopOrder', 'StopLimitOrder', 'BracketOrder', 'OrderCondition', 'ExecutionCondition', 'MarginCondition', 'TimeCondition', 'PriceCondition', 'PercentChangeCondition', 'VolumeCondition', 'Ticker', 'IB', 'Client', 'Wrapper', 'FlexReport', 'FlexError', 'IBC', 'IBController', 'Watchdog']
python
1 | from ib_insync import * |
python
1 | ib = IB() |
<IB connected to 127.0.0.1:7497 clientId=37>
合约查询
python
1 | ib.reqPositions() |
[Position(account='DU1331072', contract=Forex('EURUSD', conId=12087792, localSymbol='EUR.USD', tradingClass='EUR.USD'), position=0.0, avgCost=0.0)]
python
1 | ib.positions() |
[]
python
1 | [v for v in ib.accountValues() if v.tag == 'NetLiquidationByCurrency' and v.currency == 'BASE'] |
[AccountValue(account='DU1331072', tag='NetLiquidationByCurrency', value='1016878.84', currency='BASE', modelCode='')]
python
1 | Contract(conId=270639) |
python
1 | contract = Stock('TSLA', 'SMART', 'USD') |
[ContractDetails(contract=Contract(secType='STK', conId=76792991, symbol='TSLA', exchange='SMART', primaryExchange='NASDAQ', currency='USD', localSymbol='TSLA', tradingClass='NMS'), marketName='NMS', minTick=0.01, orderTypes='ACTIVETIM,AD,ADJUST,ALERT,ALGO,ALLOC,AVGCOST,BASKET,BENCHPX,COND,CONDORDER,DARKONLY,DARKPOLL,DAY,DEACT,DEACTDIS,DEACTEOD,DIS,GAT,GTC,GTD,GTT,HID,IBKRATS,ICE,IMB,IOC,LIT,LMT,LOC,MIT,MKT,MOC,MTL,NGCOMB,NODARK,NONALGO,OCA,OPG,OPGREROUT,PEGBENCH,POSTONLY,PREOPGRTH,REL,RPI,RTH,SCALE,SCALEODD,SCALERST,SNAPMID,SNAPMKT,SNAPREL,STP,STPLMT,SWEEP,TRAIL,TRAILLIT,TRAILLMT,TRAILMIT,WHATIF', validExchanges='SMART,AMEX,NYSE,CBOE,PHLX,ISE,CHX,ARCA,ISLAND,DRCTEDGE,BEX,BATS,EDGEA,CSFBALGO,JEFFALGO,BYX,IEX,EDGX,FOXRIVER,NYSENAT,PSX', priceMagnifier=1, underConId=0, longName='TESLA INC', contractMonth='', industry='Consumer, Cyclical', category='Auto Manufacturers', subcategory='Auto-Cars/Light Trucks', timeZoneId='EST', tradingHours='20200301:CLOSED;20200302:0400-20200302:2000;20200303:0400-20200303:2000;20200304:0400-20200304:2000;20200305:0400-20200305:2000;20200306:0400-20200306:2000;20200307:CLOSED;20200308:CLOSED;20200309:0400-20200309:2000;20200310:0400-20200310:2000;20200311:0400-20200311:2000;20200312:0400-20200312:2000;20200313:0400-20200313:2000;20200314:CLOSED;20200315:CLOSED;20200316:0400-20200316:2000;20200317:0400-20200317:2000;20200318:0400-20200318:2000;20200319:0400-20200319:2000;20200320:0400-20200320:2000;20200321:CLOSED;20200322:CLOSED;20200323:0400-20200323:2000;20200324:0400-20200324:2000;20200325:0400-20200325:2000;20200326:0400-20200326:2000;20200327:0400-20200327:2000;20200328:CLOSED;20200329:CLOSED;20200330:0400-20200330:2000;20200331:0400-20200331:2000;20200401:0400-20200401:2000;20200402:0400-20200402:2000;20200403:0400-20200403:2000;20200404:CLOSED', liquidHours='20200301:CLOSED;20200302:0930-20200302:1600;20200303:0930-20200303:1600;20200304:0930-20200304:1600;20200305:0930-20200305:1600;20200306:0930-20200306:1600;20200307:CLOSED;20200308:CLOSED;20200309:0930-20200309:1600;20200310:0930-20200310:1600;20200311:0930-20200311:1600;20200312:0930-20200312:1600;20200313:0930-20200313:1600;20200314:CLOSED;20200315:CLOSED;20200316:0930-20200316:1600;20200317:0930-20200317:1600;20200318:0930-20200318:1600;20200319:0930-20200319:1600;20200320:0930-20200320:1600;20200321:CLOSED;20200322:CLOSED;20200323:0930-20200323:1600;20200324:0930-20200324:1600;20200325:0930-20200325:1600;20200326:0930-20200326:1600;20200327:0930-20200327:1600;20200328:CLOSED;20200329:CLOSED;20200330:0930-20200330:1600;20200331:0930-20200331:1600;20200401:0930-20200401:1600;20200402:0930-20200402:1600;20200403:0930-20200403:1600;20200404:CLOSED', evRule='', evMultiplier=0, mdSizeMultiplier=100, aggGroup=1, underSymbol='', underSecType='', marketRuleIds='26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26', secIdList=[], realExpirationDate='', lastTradeTime='', stockType='', cusip='', ratings='', descAppend='', bondType='', couponType='', callable=False, putable=False, coupon=0, convertible=False, maturity='', issueDate='', nextOptionDate='', nextOptionType='', nextOptionPartial=False, notes='')]
日志信息级别
python
1 | util.logToConsole() |
python
1 | import logging |
断开ib
python
1 | ib.disconnect() |
合约细节
合约基础信息
python
1 | from ib_insync import * |
<IB connected to 127.0.0.1:7497 clientId=11>
cds 包含了所有交易所对于这个合约的细节信息。
python
1 | amd = Stock('AMD') |
35
python
1 | cds[0] |
ContractDetails(contract=Contract(secType='STK', conId=4391, symbol='AMD', exchange='SMART', primaryExchange='NASDAQ', currency='USD', localSymbol='AMD', tradingClass='NMS'), marketName='NMS', minTick=0.01, orderTypes='ACTIVETIM,AD,ADJUST,ALERT,ALGO,ALLOC,AVGCOST,BASKET,BENCHPX,COND,CONDORDER,DARKONLY,DARKPOLL,DAY,DEACT,DEACTDIS,DEACTEOD,DIS,GAT,GTC,GTD,GTT,HID,IBKRATS,ICE,IMB,IOC,LIT,LMT,LOC,MIT,MKT,MOC,MTL,NGCOMB,NODARK,NONALGO,OCA,OPG,OPGREROUT,PEGBENCH,POSTONLY,PREOPGRTH,REL,RPI,RTH,SCALE,SCALEODD,SCALERST,SNAPMID,SNAPMKT,SNAPREL,STP,STPLMT,SWEEP,TRAIL,TRAILLIT,TRAILLMT,TRAILMIT,WHATIF', validExchanges='SMART,AMEX,NYSE,CBOE,PHLX,ISE,CHX,ARCA,ISLAND,DRCTEDGE,BEX,BATS,EDGEA,CSFBALGO,JEFFALGO,BYX,IEX,EDGX,FOXRIVER,NYSENAT,PSX', priceMagnifier=1, underConId=0, longName='ADVANCED MICRO DEVICES', contractMonth='', industry='Technology', category='Semiconductors', subcategory='Electronic Compo-Semicon', timeZoneId='EST', tradingHours='20200301:CLOSED;20200302:0400-20200302:2000;20200303:0400-20200303:2000;20200304:0400-20200304:2000;20200305:0400-20200305:2000;20200306:0400-20200306:2000;20200307:CLOSED;20200308:CLOSED;20200309:0400-20200309:2000;20200310:0400-20200310:2000;20200311:0400-20200311:2000;20200312:0400-20200312:2000;20200313:0400-20200313:2000;20200314:CLOSED;20200315:CLOSED;20200316:0400-20200316:2000;20200317:0400-20200317:2000;20200318:0400-20200318:2000;20200319:0400-20200319:2000;20200320:0400-20200320:2000;20200321:CLOSED;20200322:CLOSED;20200323:0400-20200323:2000;20200324:0400-20200324:2000;20200325:0400-20200325:2000;20200326:0400-20200326:2000;20200327:0400-20200327:2000;20200328:CLOSED;20200329:CLOSED;20200330:0400-20200330:2000;20200331:0400-20200331:2000;20200401:0400-20200401:2000;20200402:0400-20200402:2000;20200403:0400-20200403:2000;20200404:CLOSED', liquidHours='20200301:CLOSED;20200302:0930-20200302:1600;20200303:0930-20200303:1600;20200304:0930-20200304:1600;20200305:0930-20200305:1600;20200306:0930-20200306:1600;20200307:CLOSED;20200308:CLOSED;20200309:0930-20200309:1600;20200310:0930-20200310:1600;20200311:0930-20200311:1600;20200312:0930-20200312:1600;20200313:0930-20200313:1600;20200314:CLOSED;20200315:CLOSED;20200316:0930-20200316:1600;20200317:0930-20200317:1600;20200318:0930-20200318:1600;20200319:0930-20200319:1600;20200320:0930-20200320:1600;20200321:CLOSED;20200322:CLOSED;20200323:0930-20200323:1600;20200324:0930-20200324:1600;20200325:0930-20200325:1600;20200326:0930-20200326:1600;20200327:0930-20200327:1600;20200328:CLOSED;20200329:CLOSED;20200330:0930-20200330:1600;20200331:0930-20200331:1600;20200401:0930-20200401:1600;20200402:0930-20200402:1600;20200403:0930-20200403:1600;20200404:CLOSED', evRule='', evMultiplier=0, mdSizeMultiplier=100, aggGroup=1, underSymbol='', underSecType='', marketRuleIds='26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26', secIdList=[], realExpirationDate='', lastTradeTime='', stockType='', cusip='', ratings='', descAppend='', bondType='', couponType='', callable=False, putable=False, coupon=0, convertible=False, maturity='', issueDate='', nextOptionDate='', nextOptionType='', nextOptionPartial=False, notes='')
查看合约最基础信息
python
1 | contracts = [cd.contract for cd in cds] |
Contract(secType='STK', conId=4391, symbol='AMD', exchange='SMART', primaryExchange='NASDAQ', currency='USD', localSymbol='AMD', tradingClass='NMS')
合约查看和filter
股票’AMD’的当前所以可以交易的合约信息
python
1 | util.df(contracts).head() |
secType | conId | symbol | lastTradeDateOrContractMonth | strike | right | multiplier | exchange | primaryExchange | currency | localSymbol | tradingClass | includeExpired | secIdType | secId | comboLegsDescrip | comboLegs | deltaNeutralContract | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | STK | 4391 | AMD | 0.0 | SMART | NASDAQ | USD | AMD | NMS | False | [] | None | ||||||
1 | STK | 32596680 | AMD | 0.0 | SMART | IBIS | EUR | AMD | XETRA | False | [] | None | ||||||
2 | STK | 172603743 | AMD | 0.0 | SMART | EBS | CHF | AMD | AMD | False | [] | None | ||||||
3 | STK | 298633607 | AMD | 0.0 | SMART | ASX | AUD | AMD | AMD | False | [] | None | ||||||
4 | STK | 4391 | AMD | 0.0 | AMEX | NASDAQ | USD | AMD | NMS | False | [] | None |
查询期货gc的当前所有合约
python
1 | gc = ib.reqContractDetails(Future('GC')) |
secType | conId | symbol | lastTradeDateOrContractMonth | strike | right | multiplier | exchange | primaryExchange | currency | localSymbol | tradingClass | includeExpired | secIdType | secId | comboLegsDescrip | comboLegs | deltaNeutralContract | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | FUT | 158708412 | GC | 20200626 | 0.0 | 100 | NYMEX | USD | GCM0 | GC | False | [] | None | |||||
1 | FUT | 178747429 | GC | 20201229 | 0.0 | 100 | NYMEX | USD | GCZ0 | GC | False | [] | None | |||||
2 | FUT | 198577650 | GC | 20210628 | 0.0 | 100 | NYMEX | USD | GCM1 | GC | False | [] | None | |||||
3 | FUT | 217648791 | GC | 20211229 | 0.0 | 100 | NYMEX | USD | GCZ1 | GC | False | [] | None | |||||
4 | FUT | 238666255 | GC | 20220628 | 0.0 | 100 | NYMEX | USD | GCM2 | GC | False | [] | None |
当前所有NYMEX的GC的期货合约
python
1 | gc_contracts_df[gc_contracts_df["exchange"] == "NYMEX"].sort_values("lastTradeDateOrContractMonth") |
secType | conId | symbol | lastTradeDateOrContractMonth | strike | right | multiplier | exchange | primaryExchange | currency | localSymbol | tradingClass | includeExpired | secIdType | secId | comboLegsDescrip | comboLegs | deltaNeutralContract | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
18 | FUT | 397594943 | GC | 20200327 | 0.0 | 100 | NYMEX | USD | GCH0 | GC | False | [] | None | |||||
8 | FUT | 319684499 | GC | 20200428 | 0.0 | 100 | NYMEX | USD | GCJ0 | GC | False | [] | None | |||||
20 | FUT | 405978966 | GC | 20200527 | 0.0 | 100 | NYMEX | USD | GCK0 | GC | False | [] | None | |||||
0 | FUT | 158708412 | GC | 20200626 | 0.0 | 100 | NYMEX | USD | GCM0 | GC | False | [] | None | |||||
10 | FUT | 335154396 | GC | 20200827 | 0.0 | 100 | NYMEX | USD | GCQ0 | GC | False | [] | None | |||||
11 | FUT | 343699127 | GC | 20201028 | 0.0 | 100 | NYMEX | USD | GCV0 | GC | False | [] | None | |||||
1 | FUT | 178747429 | GC | 20201229 | 0.0 | 100 | NYMEX | USD | GCZ0 | GC | False | [] | None | |||||
13 | FUT | 358917044 | GC | 20210224 | 0.0 | 100 | NYMEX | USD | GCG1 | GC | False | [] | None | |||||
14 | FUT | 368776104 | GC | 20210428 | 0.0 | 100 | NYMEX | USD | GCJ1 | GC | False | [] | None | |||||
2 | FUT | 198577650 | GC | 20210628 | 0.0 | 100 | NYMEX | USD | GCM1 | GC | False | [] | None | |||||
16 | FUT | 385426871 | GC | 20210827 | 0.0 | 100 | NYMEX | USD | GCQ1 | GC | False | [] | None | |||||
17 | FUT | 393223512 | GC | 20211027 | 0.0 | 100 | NYMEX | USD | GCV1 | GC | False | [] | None | |||||
3 | FUT | 217648791 | GC | 20211229 | 0.0 | 100 | NYMEX | USD | GCZ1 | GC | False | [] | None | |||||
4 | FUT | 238666255 | GC | 20220628 | 0.0 | 100 | NYMEX | USD | GCM2 | GC | False | [] | None | |||||
5 | FUT | 260862601 | GC | 20221228 | 0.0 | 100 | NYMEX | USD | GCZ2 | GC | False | [] | None | |||||
6 | FUT | 280949060 | GC | 20230628 | 0.0 | 100 | NYMEX | USD | GCM3 | GC | False | [] | None | |||||
7 | FUT | 301051213 | GC | 20231227 | 0.0 | 100 | NYMEX | USD | GCZ3 | GC | False | [] | None | |||||
9 | FUT | 324078607 | GC | 20240626 | 0.0 | 100 | NYMEX | USD | GCM4 | GC | False | [] | None | |||||
12 | FUT | 347896248 | GC | 20241227 | 0.0 | 100 | NYMEX | USD | GCZ4 | GC | False | [] | None | |||||
15 | FUT | 372852975 | GC | 20250626 | 0.0 | 100 | NYMEX | USD | GCM5 | GC | False | [] | None | |||||
19 | FUT | 397594951 | GC | 20251229 | 0.0 | 100 | NYMEX | USD | GCZ5 | GC | False | [] | None |
SMART交易所的唯一AMD合约
python
1 | amd = Stock('AMD', 'SMART', 'USD') |
SMART交易所的唯一INTC合约
python
1 | intc = Stock('INTC', 'SMART', 'USD') |
不存在的合约
python
1 | xxx = Stock('XXX', 'SMART', 'USD') |
2020-03-01 18:01:03,946 ib_insync.wrapper ERROR Error 200, reqId 7: No security definition has been found for the request, contract: Stock(symbol='XXX', exchange='SMART', currency='USD')
EURUSD forex合约
python
1 | eurusd = Forex('EURUSD') |
python
1 | amd |
Stock(symbol='AMD', exchange='SMART', currency='USD')
填充contrat missing的信息
python
1 | ib.qualifyContracts(amd) |
Stock(conId=4391, symbol='AMD', exchange='SMART', primaryExchange='NASDAQ', currency='USD', localSymbol='AMD', tradingClass='NMS')
填充一个contracts的list
python
1 | qualContracts = ib.qualifyContracts(amd, intc, xxx, eurusd) |
2020-03-01 18:54:48,242 ib_insync.wrapper ERROR Error 200, reqId 13: No security definition has been found for the request, contract: Stock(symbol='XXX', exchange='SMART', currency='USD')
2020-03-01 18:54:48,244 ib_insync.ib ERROR Unknown contract: Stock(symbol='XXX', exchange='SMART', currency='USD')
python
1 | qualContracts |
[Stock(conId=4391, symbol='AMD', exchange='SMART', primaryExchange='NASDAQ', currency='USD', localSymbol='AMD', tradingClass='NMS'),
Stock(conId=270639, symbol='INTC', exchange='SMART', primaryExchange='NASDAQ', currency='USD', localSymbol='INTC', tradingClass='NMS'),
Forex('EURUSD', conId=12087792, exchange='IDEALPRO', localSymbol='EUR.USD', tradingClass='EUR.USD')]
股票专用查询合约。查询包含intc的所有合约
python
1 | matches = ib.reqMatchingSymbols('intc') |
[ContractDescription(contract=Contract(secType='STK', conId=270639, symbol='INTC', primaryExchange='NASDAQ.NMS', currency='USD'), derivativeSecTypes=['CFD', 'OPT', 'IOPT', 'WAR', 'FUT', 'BAG']),
ContractDescription(contract=Contract(secType='STK', conId=38709539, symbol='INTC', primaryExchange='MEXI', currency='MXN'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=12178234, symbol='INTC', primaryExchange='EBS', currency='CHF'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=11463493, symbol='INTCUSD', primaryExchange='EBS', currency='USD'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=130861844, symbol='S', primaryExchange='MEXI', currency='MXN'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=130861851, symbol='2S7', primaryExchange='FWB', currency='EUR'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=130651996, symbol='S', primaryExchange='NYSE', currency='USD'), derivativeSecTypes=['CFD', 'OPT', 'FUT', 'BAG']),
ContractDescription(contract=Contract(secType='STK', conId=14015710, symbol='4613', primaryExchange='TSEJ', currency='JPY'), derivativeSecTypes=['CFD']),
ContractDescription(contract=Contract(secType='STK', conId=257310905, symbol='002436', primaryExchange='SEHKSZSE', currency='CNH'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=257765562, symbol='603737', primaryExchange='SEHKNTL', currency='CNH'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=234809384, symbol='FPQ1', primaryExchange='FWB2', currency='EUR'), derivativeSecTypes=['IOPT']),
ContractDescription(contract=Contract(secType='STK', conId=234809383, symbol='FING.B', primaryExchange='SFB', currency='SEK'), derivativeSecTypes=['CFD', 'OPT', 'IOPT', 'BAG']),
ContractDescription(contract=Contract(secType='STK', conId=83364054, symbol='FRP', primaryExchange='VALUE', currency='USD'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=169544707, symbol='ECC', primaryExchange='NYSE', currency='USD'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=90691307, symbol='1151', primaryExchange='SEHK', currency='HKD'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=96816938, symbol='E16', primaryExchange='SGX', currency='USD'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=392988575, symbol='1JO', primaryExchange='FWB2', currency='EUR'), derivativeSecTypes=[]),
ContractDescription(contract=Contract(secType='STK', conId=173148149, symbol='JYNT', primaryExchange='NASDAQ.SCM', currency='USD'), derivativeSecTypes=['OPT', 'BAG']),
ContractDescription(contract=Contract(secType='STK', conId=131085231, symbol='4621', primaryExchange='TSEJ', currency='JPY'), derivativeSecTypes=[])]
期权链
spx合约
python
1 | spx = Index('SPX', 'CBOE') |
[Index(conId=416904, symbol='SPX', exchange='CBOE', currency='USD', localSymbol='SPX')]
这里使用delayed data.
marketDataType: One of:
* 1 = Live
* 2 = Frozen
* 3 = Delayed
* 4 = Delayed frozen
python
1 | ib.reqMarketDataType(4) |
当前tick信息
python
1 | [ticker] = ib.reqTickers(spx) |
Ticker(contract=Index(conId=416904, symbol='SPX', exchange='CBOE', currency='USD', localSymbol='SPX'), time=datetime.datetime(2020, 3, 2, 0, 1, 57, 930587, tzinfo=datetime.timezone.utc), bid=-1.0, bidSize=0, ask=-1.0, askSize=0, last=-1.0, lastSize=0)
当前市场价格。因为是非交易时间所以是nan
python
1 | spxValue = ticker.marketPrice() |
nan
查看option链
python
1 | chains = ib.reqSecDefOptParams(spx.symbol, '', spx.secType, spx.conId) |
exchange | underlyingConId | tradingClass | multiplier | expirations | strikes | |
---|---|---|---|---|---|---|
0 | SMART | 416904 | SPX | 100 | [20200319, 20200416, 20200514, 20200618, 20200... | [100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 650... |
1 | CBOE | 416904 | SPXW | 100 | [20200302, 20200304, 20200306, 20200309, 20200... | [800.0, 900.0, 1000.0, 1100.0, 1150.0, 1200.0,... |
2 | SMART | 416904 | SPXW | 100 | [20200302, 20200304, 20200306, 20200309, 20200... | [800.0, 900.0, 1000.0, 1100.0, 1150.0, 1200.0,... |
3 | CBOE | 416904 | SPX | 100 | [20200319, 20200416, 20200514, 20200618, 20200... | [100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 650... |
选择tradingclass 是spx, exchange是smart的那个合约, 查看这个合约的option chain
python
1 | chain = next(c for c in chains if c.tradingClass == 'SPX' and c.exchange == 'SMART') |
OptionChain(exchange='SMART', underlyingConId='416904', tradingClass='SPX', multiplier='100', expirations=['20200319', '20200416', '20200514', '20200618', '20200716', '20200820', '20200917', '20201015', '20201119', '20201217', '20210114', '20210318', '20210617', '20211216', '20221215'], strikes=[100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 650.0, 700.0, 750.0, 800.0, 850.0, 900.0, 950.0, 1000.0, 1050.0, 1100.0, 1150.0, 1200.0, 1225.0, 1250.0, 1275.0, 1300.0, 1325.0, 1350.0, 1375.0, 1400.0, 1425.0, 1450.0, 1475.0, 1500.0, 1525.0, 1550.0, 1575.0, 1600.0, 1625.0, 1650.0, 1675.0, 1700.0, 1725.0, 1750.0, 1775.0, 1800.0, 1825.0, 1850.0, 1875.0, 1900.0, 1925.0, 1950.0, 1975.0, 2000.0, 2025.0, 2050.0, 2075.0, 2090.0, 2100.0, 2110.0, 2120.0, 2125.0, 2130.0, 2140.0, 2150.0, 2160.0, 2170.0, 2175.0, 2180.0, 2190.0, 2200.0, 2210.0, 2220.0, 2225.0, 2230.0, 2240.0, 2250.0, 2260.0, 2270.0, 2275.0, 2280.0, 2290.0, 2300.0, 2310.0, 2320.0, 2325.0, 2330.0, 2340.0, 2350.0, 2360.0, 2370.0, 2375.0, 2380.0, 2385.0, 2390.0, 2395.0, 2400.0, 2405.0, 2410.0, 2415.0, 2420.0, 2425.0, 2430.0, 2435.0, 2440.0, 2445.0, 2450.0, 2455.0, 2460.0, 2465.0, 2470.0, 2475.0, 2480.0, 2485.0, 2490.0, 2495.0, 2500.0, 2505.0, 2510.0, 2515.0, 2520.0, 2525.0, 2530.0, 2535.0, 2540.0, 2545.0, 2550.0, 2555.0, 2560.0, 2565.0, 2570.0, 2575.0, 2580.0, 2585.0, 2590.0, 2595.0, 2600.0, 2605.0, 2610.0, 2615.0, 2620.0, 2625.0, 2630.0, 2635.0, 2640.0, 2645.0, 2650.0, 2655.0, 2660.0, 2665.0, 2670.0, 2675.0, 2680.0, 2685.0, 2690.0, 2695.0, 2700.0, 2705.0, 2710.0, 2715.0, 2720.0, 2725.0, 2730.0, 2735.0, 2740.0, 2745.0, 2750.0, 2755.0, 2760.0, 2765.0, 2770.0, 2775.0, 2780.0, 2785.0, 2790.0, 2795.0, 2800.0, 2805.0, 2810.0, 2815.0, 2820.0, 2825.0, 2830.0, 2835.0, 2840.0, 2845.0, 2850.0, 2855.0, 2860.0, 2865.0, 2870.0, 2875.0, 2880.0, 2885.0, 2890.0, 2895.0, 2900.0, 2905.0, 2910.0, 2915.0, 2920.0, 2925.0, 2930.0, 2935.0, 2940.0, 2945.0, 2950.0, 2955.0, 2960.0, 2965.0, 2970.0, 2975.0, 2980.0, 2985.0, 2990.0, 2995.0, 3000.0, 3005.0, 3010.0, 3015.0, 3020.0, 3025.0, 3030.0, 3035.0, 3040.0, 3045.0, 3050.0, 3055.0, 3060.0, 3065.0, 3070.0, 3075.0, 3080.0, 3085.0, 3090.0, 3095.0, 3100.0, 3105.0, 3110.0, 3115.0, 3120.0, 3125.0, 3130.0, 3135.0, 3140.0, 3145.0, 3150.0, 3155.0, 3160.0, 3165.0, 3170.0, 3175.0, 3180.0, 3185.0, 3190.0, 3195.0, 3200.0, 3205.0, 3210.0, 3215.0, 3220.0, 3225.0, 3230.0, 3235.0, 3240.0, 3245.0, 3250.0, 3255.0, 3260.0, 3265.0, 3270.0, 3275.0, 3280.0, 3285.0, 3290.0, 3295.0, 3300.0, 3305.0, 3310.0, 3315.0, 3320.0, 3325.0, 3330.0, 3335.0, 3340.0, 3345.0, 3350.0, 3355.0, 3360.0, 3365.0, 3370.0, 3375.0, 3380.0, 3385.0, 3390.0, 3395.0, 3400.0, 3405.0, 3410.0, 3415.0, 3420.0, 3425.0, 3430.0, 3435.0, 3440.0, 3445.0, 3450.0, 3455.0, 3460.0, 3465.0, 3470.0, 3475.0, 3480.0, 3485.0, 3490.0, 3495.0, 3500.0, 3505.0, 3510.0, 3515.0, 3520.0, 3525.0, 3530.0, 3535.0, 3540.0, 3545.0, 3550.0, 3555.0, 3560.0, 3565.0, 3570.0, 3575.0, 3580.0, 3585.0, 3590.0, 3595.0, 3600.0, 3605.0, 3610.0, 3615.0, 3620.0, 3625.0, 3630.0, 3635.0, 3640.0, 3650.0, 3660.0, 3670.0, 3675.0, 3680.0, 3690.0, 3700.0, 3710.0, 3720.0, 3725.0, 3750.0, 3775.0, 3800.0, 3850.0, 3900.0, 3950.0, 4000.0, 4050.0, 4100.0, 4200.0, 4300.0, 4400.0, 4500.0, 4600.0, 4700.0, 4800.0, 4900.0])
Bar数据
GC future合约 2020年4月28日到期
python
1 | contract_319684499 = Contract(conId=319684499) |
[Contract(secType='FUT', conId=319684499, symbol='GC', lastTradeDateOrContractMonth='20200428', multiplier='100', exchange='NYMEX', currency='USD', localSymbol='GCJ0', tradingClass='GC')]
合约开始时间
python
1 | ib.reqHeadTimeStamp(contract_319684499, whatToShow='MIDPOINT', useRTH=True) |
datetime.datetime(2018, 5, 30, 22, 0)
10天的1分钟数据。一次下太多ib就要搞你,10天的够了。
python
1 | bars = ib.reqHistoricalData( |
python
1 | bars[0] |
BarData(date=datetime.datetime(2020, 2, 14, 9, 30), open=1583.3, high=1583.8, low=1583.0, close=1583.4, volume=922, average=1583.43, barCount=347)
python
1 | df = util.df(bars) |
date | open | high | low | close | volume | average | barCount | |
---|---|---|---|---|---|---|---|---|
0 | 2020-02-14 09:30:00 | 1583.3 | 1583.8 | 1583.0 | 1583.4 | 922 | 1583.43 | 347 |
1 | 2020-02-14 09:31:00 | 1583.5 | 1583.6 | 1583.2 | 1583.4 | 547 | 1583.45 | 240 |
2 | 2020-02-14 09:32:00 | 1583.4 | 1583.4 | 1582.6 | 1582.7 | 786 | 1582.95 | 299 |
3 | 2020-02-14 09:33:00 | 1582.8 | 1582.9 | 1582.1 | 1582.6 | 710 | 1582.43 | 293 |
4 | 2020-02-14 09:34:00 | 1582.7 | 1582.8 | 1582.4 | 1582.6 | 230 | 1582.58 | 127 |
date | open | high | low | close | volume | average | barCount | |
---|---|---|---|---|---|---|---|---|
4495 | 2020-02-28 16:55:00 | 1586.6 | 1589.0 | 1586.2 | 1586.8 | 82 | 1587.33 | 50 |
4496 | 2020-02-28 16:56:00 | 1586.9 | 1588.6 | 1586.2 | 1587.0 | 42 | 1587.39 | 32 |
4497 | 2020-02-28 16:57:00 | 1587.0 | 1588.7 | 1587.0 | 1587.4 | 104 | 1587.74 | 40 |
4498 | 2020-02-28 16:58:00 | 1587.7 | 1588.1 | 1587.4 | 1587.7 | 29 | 1587.71 | 20 |
4499 | 2020-02-28 16:59:00 | 1587.3 | 1587.5 | 1586.5 | 1587.3 | 43 | 1587.00 | 26 |
下面的code通过循环把一个合约所有数据都下载下来
python
1 | contract_319684499 = Contract(conId=319684499) |
2020-02-14 09:30:00
2020-01-31 09:30:00
2020-01-16 09:30:00
2020-01-02 09:30:00
2019-12-17 09:30:00
2019-12-03 09:30:00
2019-11-18 09:30:00
2019-11-04 09:30:00
2019-10-21 09:30:00
2019-10-07 09:30:00
2019-09-23 09:30:00
2019-09-09 09:30:00
2019-08-23 09:30:00
2019-08-09 09:30:00
2019-07-26 09:30:00
2019-07-12 09:30:00
2019-06-27 09:30:00
2019-06-13 09:30:00
2019-05-30 09:30:00
2019-05-15 09:30:00
2019-05-01 10:21:00
2019-04-17 09:30:00
2019-04-03 10:53:00
2019-03-21 09:30:00
2019-03-07 09:30:00
2019-02-21 09:30:00
2019-02-06 09:45:00
2019-01-24 09:55:00
2019-01-11 09:30:00
2019-01-02 09:30:00
2018-12-20 14:43:00
2018-12-07 10:01:00
2018-11-29 09:42:00
2018-11-23 11:44:00
Error 162, reqId 39: Historical Market Data Service error message:HMDS query returned no data: GCJ0@NYMEX Trades, contract: Contract(secType='FUT', conId=319684499, symbol='GC', lastTradeDateOrContractMonth='20200428', multiplier='100', exchange='NYMEX', currency='USD', localSymbol='GCJ0', tradingClass='GC')
上面的报错原因猜测是因为20181123之前,成交量太低了,选择whattoshow == “TRADE”的话就返回不了数据. 选择whattoshow == “MIDPOINT” 还是可以返回数据, 但是我们不需要了,到这就够了.
下面的数可以看出,20181123的时候这个合约还不是主力合约,没有人交易。而当前最新的交易量显示它是主力合约
python
1 | df.head() |
date | open | high | low | close | volume | average | barCount | |
---|---|---|---|---|---|---|---|---|
0 | 2018-11-23 11:44:00 | 1272.7 | 1272.7 | 1272.7 | 1272.7 | 11 | 1272.7 | 5 |
1 | 2018-11-23 11:45:00 | 1272.7 | 1272.7 | 1272.7 | 1272.7 | 0 | 1272.7 | 0 |
2 | 2018-11-23 11:46:00 | 1272.7 | 1272.7 | 1272.7 | 1272.7 | 0 | 1272.7 | 0 |
3 | 2018-11-23 11:47:00 | 1272.7 | 1272.7 | 1272.7 | 1272.7 | 0 | 1272.7 | 0 |
4 | 2018-11-23 11:48:00 | 1272.7 | 1272.7 | 1272.7 | 1272.7 | 0 | 1272.7 | 0 |
python
1 | df.tail() |
date | open | high | low | close | volume | average | barCount | |
---|---|---|---|---|---|---|---|---|
119254 | 2020-02-28 16:55:00 | 1586.6 | 1589.0 | 1586.2 | 1586.8 | 82 | 1587.33 | 50 |
119255 | 2020-02-28 16:56:00 | 1586.9 | 1588.6 | 1586.2 | 1587.0 | 42 | 1587.39 | 32 |
119256 | 2020-02-28 16:57:00 | 1587.0 | 1588.7 | 1587.0 | 1587.4 | 104 | 1587.74 | 40 |
119257 | 2020-02-28 16:58:00 | 1587.7 | 1588.1 | 1587.4 | 1587.7 | 29 | 1587.71 | 20 |
119258 | 2020-02-28 16:59:00 | 1587.3 | 1587.5 | 1586.5 | 1587.3 | 43 | 1587.00 | 26 |
python
1 | df.describe() |
open | high | low | close | volume | average | barCount | |
---|---|---|---|---|---|---|---|
count | 119259.000000 | 119259.000000 | 119259.000000 | 119259.000000 | 119259.000000 | 119259.000000 | 119259.000000 |
mean | 1452.039395 | 1452.075496 | 1452.000574 | 1452.037914 | 31.230398 | 1452.038183 | 13.755918 |
std | 95.843262 | 95.894540 | 95.788182 | 95.841548 | 167.720980 | 95.841501 | 71.451877 |
min | 1272.700000 | 1272.700000 | 1272.700000 | 1272.700000 | 0.000000 | 1272.700000 | 0.000000 |
25% | 1352.000000 | 1352.000000 | 1352.000000 | 1352.000000 | 0.000000 | 1352.000000 | 0.000000 |
50% | 1475.600000 | 1475.600000 | 1475.600000 | 1475.600000 | 0.000000 | 1475.600000 | 0.000000 |
75% | 1524.600000 | 1524.600000 | 1524.600000 | 1524.600000 | 0.000000 | 1524.600000 | 0.000000 |
max | 1684.800000 | 1686.600000 | 1683.800000 | 1684.300000 | 9591.000000 | 1685.380000 | 3716.000000 |
python
1 | df.to_csv(contract_319684499.symbol + '.csv') |