首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ScannerSubscription检索IbPy结果

使用ScannerSubscription检索IbPy结果
EN

Stack Overflow用户
提问于 2016-11-25 00:12:50
回答 1查看 988关注 0票数 0

我正在为ScannerSubscription的结果而奋斗。

例如,如果我请求:

代码语言:javascript
复制
qqq_id = 0
subscript = ScannerSubscription()
subscript.numberOfRows(15)
subscript.m_scanCode = 'HIGH_OPEN_GAP'
subscript.m_instrument = 'STK'
subscript.m_averageOptionVolumeAbove = ''
subscript.m_couponRateAbove = ''
subscript.m_couponRateBelow = ''
subscript.m_abovePrice = '5'
subscript.m_belowPrice = ''
subscript.m_marketCapAbove = ''
subscript.m_marketCapBelow = ''
subscript.m_aboveVolume = '100000'
subscript.m_stockTypeFilter = 'ALL'
subscript.locationCode('STK.US.MAJOR')
tws_conn.reqScannerSubscription(qqq_id, subscript)
tws_conn.reqScannerParameters()

我收到了这样的scannerData回复:

<scannerData reqId=0, rank=0, contractDetails=<ib.ext.ContractDetails.ContractDetails object at 0x00000000036EFA58>, distance=None, benchmark=None, projection=None, legsStr=None>

等等。

但我无法检索结果值,例如:

reqScannerParameters() xml结果将<colId>390</colId>指定为Gap值的colId:

代码语言:javascript
复制
<ScanType>
    <displayName>Top Close-to-Open % Gainers</displayName>
    <scanCode>HIGH_OPEN_GAP</scanCode>
    <instruments>STK,STOCK.NA,STOCK.EU,STOCK.HK,FUT.US,FUT.HK,FUT.EU,FUT.NA</instruments>
    <absoluteColumns>false</absoluteColumns>
<Columns varName="columns">
<Column>
    <colId>390</colId>
    <name>Gap</name>
    <display>true</display>
    <section>m</section>
    <displayType>DATA</displayType>
</Column>

如何检索间隙值?

这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-25 18:01:57

现在我肯定你应该在拿到合同后要求数据。

代码语言:javascript
复制
import pandas as pd
scans = 15
res = pd.DataFrame(index = range(scans), columns = ['sym','open','close','calc']).fillna(0)
msgs = []

from ib.ext.Contract import Contract
from ib.opt import ibConnection, message
from ib.ext.TickType import TickType as tt

def tickPrice(msg):
    global scans 

    if msg.field in [tt.OPEN, tt.CLOSE]:
        res.loc[msg.tickerId,tt.getField(msg.field)] = msg.price

    op = res.loc[msg.tickerId,'open']
    cl = res.loc[msg.tickerId,'close']

    if  op > 0 and cl > 0 and res.loc[msg.tickerId,'calc'] == 0:
        res.loc[msg.tickerId,'calc'] = ((op-cl)*100/cl)
        con.cancelMktData(msg.tickerId)
        scans -= 1
        if scans == 0:
            print(res)
            con.disconnect()

def snapshot(msg):
    res.loc[msg.rank,'sym'] = msg.contractDetails.m_summary.m_symbol
    #tt.OPEN (14) isn't coming with snapshot
    con.reqMktData(str(msg.rank), msg.contractDetails.m_summary, "", False)

def watcher(msg):
    #print (msg)
    msgs.append(msg)

def scanData(msg):
    snapshot(msg)

def scanDataEnd(msg):
    con.cancelScannerSubscription(qqq_id)

con = ibConnection(port=7497, clientId=888)
con.registerAll(watcher)
con.unregister(watcher, message.scannerData)
con.register(scanData, message.scannerData)
con.unregister(watcher, message.scannerDataEnd)
con.register(scanDataEnd, message.scannerDataEnd)
con.unregister(watcher, message.tickPrice)
con.register(tickPrice, message.tickPrice)

con.connect()

from ib.ext.ScannerSubscription import ScannerSubscription
qqq_id = 0
subscript = ScannerSubscription()
subscript.numberOfRows(15)
subscript.m_scanCode = 'HIGH_OPEN_GAP'
subscript.m_instrument = 'STK'
subscript.m_averageOptionVolumeAbove ='0'
subscript.m_abovePrice = '5'
subscript.m_aboveVolume = '100000'

con.reqScannerSubscription(qqq_id, subscript)

下午1时正=

代码语言:javascript
复制
        sym   open  close       calc
0       TAC   4.95   4.25  16.470588
1      CTRP  44.80  40.99   9.294950
2      IIIN  39.26  36.58   7.326408
3       LFC  14.60  13.63   7.116654
4       ACH  11.59  10.87   6.623735
5      KALV   9.01   8.38   7.517900
6      OMER  13.25  12.75   3.921569
7      DWTI  68.00  66.50   2.255639
8      WLDN  23.75  23.43   1.365770
9       BZQ  19.67  18.73   5.018687
10     JNUG   6.55   6.43   1.866252
11  GXP PRB  50.78  49.80   1.967871
12       AU  10.85  10.59   2.455146
13     USLV  13.07  12.81   2.029664
14      CBD  16.60  16.03   3.555833

我不知道他们为什么不按顺序来??

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40796035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档