开云体育

ctrl + shift + ? for shortcuts
© 2025 开云体育

Custom Scanners?


 

Hey guys, I've been looking through this page and it seems the ability to create scanners in Python is very limited. To my understanding, we cannot pull our already made scanners in TWS into Python? And that the scanners "are being made in python" and use the basic list on that page and this page??which isnt much. I'm trying to make a gap scanner


 

Here is a list of available scancodes. I don't know if there are more.

TOP_PERC_GAIN,
? TOP_PERC_LOSE,
? MOST_ACTIVE,
? ALL_SYMBOLS_ASC,
? ALL_SYMBOLS_DESC,
? BOND_CUSIP_AZ,
? BOND_CUSIP_ZA,
? FAR_MATURITY_DATE,
? HALTED,
? HIGH_BOND_ASK_CURRENT_YIELD_ALL,
? HIGH_BOND_ASK_YIELD_ALL,
? HIGH_BOND_DEBT_2_BOOK_RATIO,
? HIGH_BOND_DEBT_2_EQUITY_RATIO,
? HIGH_BOND_DEBT_2_TAN_BOOK_RATIO,
? HIGH_BOND_EQUITY_2_BOOK_RATIO,
? HIGH_BOND_EQUITY_2_TAN_BOOK_RATIO,
? HIGH_BOND_NET_ASK_CURRENT_YIELD_ALL,
? HIGH_BOND_NET_ASK_YIELD_ALL,
? HIGH_BOND_NET_SPREAD_ALL,
? HIGH_BOND_SPREAD_ALL,
? HIGH_COUPON_RATE,
? HIGH_DIVIDEND_YIELD,
? HIGH_DIVIDEND_YIELD_IB,
? HIGHEST_SLB_BID,
? HIGH_GROWTH_RATE,
? HIGH_MOODY_RATING_ALL,
? HIGH_OPEN_GAP,
? HIGH_OPT_IMP_VOLAT,
? HIGH_OPT_IMP_VOLAT_OVER_HIST,
? HIGH_OPT_OPEN_INTEREST_PUT_CALL_RATIO,
? HIGH_OPT_VOLUME_PUT_CALL_RATIO,
? HIGH_PE_RATIO,
? HIGH_PRICE_2_BOOK_RATIO,
? HIGH_PRICE_2_TAN_BOOK_RATIO,
? HIGH_QUICK_RATIO,
? HIGH_RETURN_ON_EQUITY,
? HIGH_SYNTH_BID_REV_NAT_YIELD,
? HIGH_VS_13W_HL,
? HIGH_VS_26W_HL,
? HIGH_VS_52W_HL,
? HOT_BY_OPT_VOLUME,
? HOT_BY_PRICE,
? HOT_BY_PRICE_RANGE,
? HOT_BY_VOLUME,
? LIMIT_UP_DOWN,
? LOW_BOND_BID_CURRENT_YIELD_ALL,
? LOW_BOND_BID_YIELD_ALL,
? LOW_BOND_DEBT_2_BOOK_RATIO,
? LOW_BOND_DEBT_2_EQUITY_RATIO,
? LOW_BOND_DEBT_2_TAN_BOOK_RATIO,
? LOW_BOND_EQUITY_2_BOOK_RATIO,
? LOW_BOND_EQUITY_2_TAN_BOOK_RATIO,
? LOW_BOND_NET_BID_CURRENT_YIELD_ALL,
? LOW_BOND_NET_BID_YIELD_ALL,
? LOW_BOND_NET_SPREAD_ALL,
? LOW_BOND_SPREAD_ALL,
? LOW_COUPON_RATE,
? LOWEST_SLB_ASK,
? LOW_GROWTH_RATE,
? LOW_MOODY_RATING_ALL,
? LOW_OPEN_GAP,
? LOW_OPT_IMP_VOLAT,
? LOW_OPT_IMP_VOLAT_OVER_HIST,
? LOW_OPT_OPEN_INTEREST_PUT_CALL_RATIO,
? LOW_OPT_VOLUME_PUT_CALL_RATIO,
? LOW_PE_RATIO,
? LOW_PRICE_2_BOOK_RATIO,
? LOW_PRICE_2_TAN_BOOK_RATIO,
? LOW_QUICK_RATIO,
? LOW_RETURN_ON_EQUITY,
? LOW_SYNTH_ASK_REV_NAT_YIELD,
? LOW_VS_13W_HL,
? LOW_VS_26W_HL,
? LOW_VS_52W_HL,
? LOW_WAR_REL_IMP_VOLAT,
? MARKET_CAP_USD_ASC,
? MARKET_CAP_USD_DESC,
? MOST_ACTIVE_AVG_USD,
? MOST_ACTIVE_USD,
? NEAR_MATURITY_DATE,
? NOT_OPEN,
? OPT_OPEN_INTEREST_MOST_ACTIVE,
? OPT_VOLUME_MOST_ACTIVE,
? PMONITOR_AVAIL_CONTRACTS,
? PMONITOR_CTT,
? PMONITOR_IBOND,
? PMONITOR_RFQ,
? TOP_OPEN_PERC_GAIN,
? TOP_OPEN_PERC_LOSE,
? TOP_OPT_IMP_VOLAT_GAIN,
? TOP_OPT_IMP_VOLAT_LOSE,
? TOP_PRICE_RANGE,
? TOP_STOCK_BUY_IMBALANCE_ADV_RATIO,
? TOP_STOCK_SELL_IMBALANCE_ADV_RATIO,
? TOP_TRADE_COUNT,
? TOP_TRADE_RATE,
? TOP_VOLUME_RATE,
? WSH_NEXT_ANALYST_MEETING,
? WSH_NEXT_EARNINGS,
? WSH_NEXT_EVENT,
? WSH_NEXT_MAJOR_EVENT,
? WSH_PREV_ANALYST_MEETING,
? WSH_PREV_EARNINGS,
? WSH_PREV_EVENT
?


 

In addition here are the some specific filters:

ScannerSubscription scannerSubsctiption = new ScannerSubscription();
?
scannerSubsctiption.numberOfRows(scannerResultRows);
scannerSubsctiption.scanCode("HOT_BY_PRICE");
scannerSubsctiption.instrument("STK");
scannerSubsctiption.locationCode("STK.US.MAJOR");
scannerSubsctiption.stockTypeFilter("ALL");
scannerSubsctiption.abovePrice(abovePrice);
scannerSubsctiption.belowPrice(belowPrice);

? ? ? ? ? ? ? ? List<TagValue> scannerTagValues?= Arrays.asList(new TagValue("volumeRateAbove", "2000"));

? ? ? ? ? ? ? ? socket.reqScannerSubscription(scannerId, scannerSubsctiption, null,? scannerTagValues);



 

On Thu, Apr 29, 2021 at 07:08 AM, Despair wrote:

LOW_OPEN_GAP, HIGH_OPEN_GAP,

Look what you look for.
As stated below also if you make a call to reqScannerParameters()?
You will get back an XML with some specifics related to each classe of instruments
But I suspect that you do not need theses (while they can be helpfull by allowing finer screening based on corporate key factors like DIVYIELD, PRICE_2_SALES, PERATIO

In case you consider it, the answer is something like a series or entries alike this single one below (for STK)

Sorry the "Past" remove some '>' and '<' but you should get the idea.

?? ???? <Instrument
?? ???? ??? <name US Stocks /name>
?? ???? ??? <type STK /type>
?? ???? ??? <filters AFTERHRSCHANGEPERC,AVGOPTVOLUME,AVGPRICETARGET,AVGRATING,AVGTARGET2PRICERATIO,AVGVOLUME,AVGVOLUME_USD,CHANGEOPENPERC,CHANGEPERC,EMA_20,EMA_50,EMA_100,EMA_200,PRICE_VS_EMA_20,PRICE_VS_EMA_50,PRICE_VS_EMA_100,PRICE_VS_EMA_200,DIVIB,DIVYIELD,DIVYIELDIB,FEERATE,FIRSTTRADEDATE,GROWTHRATE,HALTED,HASOPTIONS,HISTDIVIB,HISTDIVYIELDIB,IMBALANCE,IMBALANCEADVRATIOPERC,IMPVOLAT,IMPVOLATOVERHIST,INSIDEROFFLOATPERC,INSTITUTIONALOFFLOATPERC,MACD,MACD_SIGNAL,MACD_HISTOGRAM,MKTCAP,MKTCAP_USD,NEXTDIVAMOUNT,NEXTDIVDATE,NUMPRICETARGETS,NUMRATINGS,NUMSHARESINSIDER,NUMSHARESINSTITUTIONAL,OPENGAPPERC,OPTVOLUME,OPTVOLUMEPCRATIO,PERATIO,PPO,PPO_SIGNAL,PPO_HISTOGRAM,PRICE,PRICE2BK,PRICE2TANBK,PRICERANGE,PRICE_USD,QUICKRATIO,REBATERATE,REGIMBALANCE,REGIMBALANCEADVRATIOPERC,RETEQUITY,SHORTABLESHARES,SHORTSALERESTRICTED,SIC,ISSUER_COUNTRY_CODE,SOCSACT,SOCSNET,STKTYPE,STVOLUME_3MIN,STVOLUME_5MIN,STVOLUME_10MIN,TRADECOUNT,TRADERATE,UNSHORTABLE,VOLUME,VOLUMERATE,VOLUME_USD,RCGLTCLASS,RCGLTENDDATE,RCGLTIVALUE,RCGLTTRADE,RCGITCLASS,RCGITENDDATE,RCGITIVALUE,RCGITTRADE,RCGSTCLASS,RCGSTENDDATE,RCGSTIVALUE,RCGSTTRADE,ESG_SCORE,ESG_COMBINED_SCORE,ESG_CONTROVERSIES_SCORE,ESG_RESOURCE_USE_SCORE,ESG_EMISSIONS_SCORE,ESG_ENV_INNOVATION_SCORE,ESG_WORKFORCE_SCORE,ESG_HUMAN_RIGHTS_SCORE,ESG_COMMUNITY_SCORE,ESG_PRODUCT_RESPONSIBILITY_SCORE,ESG_MANAGEMENT_SCORE,ESG_SHAREHOLDERS_SCORE,ESG_CSR_STRATEGY_SCORE,ESG_ENV_PILLAR_SCORE,ESG_SOCIAL_PILLAR_SCORE,ESG_CORP_GOV_PILLAR_SCORE,IV_RANK13,IV_RANK26,IV_RANK52,IV_PERCENTILE13,IV_PERCENTILE26,IV_PERCENTILE52,HV_RANK13,HV_RANK26,HV_RANK52,HV_PERCENTILE13,HV_PERCENTILE26,HV_PERCENTILE52,PRICE_2_SALES,EQUITY_PER_SHARE,UTILIZATION,SSCORE,SCHANGE,SVSCORE,SVCHANGE /filters>
?? ???? ??? <group STK.GLOBAL /group>
?? ???? ??? <shortName US /shortName>
?? ???? ??? <cloudScanNotSupported false /cloudScanNotSupported>
?? ???? </Instrument>


 

Patrick,

Re: "we cannot pull our already made scanners in TWS into Python?"
No, we can not, but we can look inside the already made scanner?to get all the associated attributes names etc.
Click on the floppy-disk icon in the top-right corner of the TWS classic scanner window and choose "Save template":

image.png

and store the file, then look inside that file and you'll see "internals" of your custom scanner:

image.png

Another place to have a sneak-peek inside your TWS scanners is to analyze TWS log lines around the time when you sent the scanner request. It will be serialized to one loong string with all the parameters and their values.

Cheers,
Dmitry Shevkoplyas


On Thu, Apr 29, 2021 at 3:14 PM hymagik via <hymagik=[email protected]> wrote:
On Thu, Apr 29, 2021 at 07:08 AM, Despair wrote:

LOW_OPEN_GAP, HIGH_OPEN_GAP,

Look what you look for.
As stated below also if you make a call to reqScannerParameters()?
You will get back an XML with some specifics related to each classe of instruments
But I suspect that you do not need theses (while they can be helpfull by allowing finer screening based on corporate key factors like DIVYIELD, PRICE_2_SALES, PERATIO

In case you consider it, the answer is something like a series or entries alike this single one below (for STK)

Sorry the "Past" remove some '>' and '<' but you should get the idea.

?? ???? <Instrument
?? ???? ??? <name US Stocks /name>
?? ???? ??? <type STK /type>
?? ???? ??? <filters AFTERHRSCHANGEPERC,AVGOPTVOLUME,AVGPRICETARGET,AVGRATING,AVGTARGET2PRICERATIO,AVGVOLUME,AVGVOLUME_USD,CHANGEOPENPERC,CHANGEPERC,EMA_20,EMA_50,EMA_100,EMA_200,PRICE_VS_EMA_20,PRICE_VS_EMA_50,PRICE_VS_EMA_100,PRICE_VS_EMA_200,DIVIB,DIVYIELD,DIVYIELDIB,FEERATE,FIRSTTRADEDATE,GROWTHRATE,HALTED,HASOPTIONS,HISTDIVIB,HISTDIVYIELDIB,IMBALANCE,IMBALANCEADVRATIOPERC,IMPVOLAT,IMPVOLATOVERHIST,INSIDEROFFLOATPERC,INSTITUTIONALOFFLOATPERC,MACD,MACD_SIGNAL,MACD_HISTOGRAM,MKTCAP,MKTCAP_USD,NEXTDIVAMOUNT,NEXTDIVDATE,NUMPRICETARGETS,NUMRATINGS,NUMSHARESINSIDER,NUMSHARESINSTITUTIONAL,OPENGAPPERC,OPTVOLUME,OPTVOLUMEPCRATIO,PERATIO,PPO,PPO_SIGNAL,PPO_HISTOGRAM,PRICE,PRICE2BK,PRICE2TANBK,PRICERANGE,PRICE_USD,QUICKRATIO,REBATERATE,REGIMBALANCE,REGIMBALANCEADVRATIOPERC,RETEQUITY,SHORTABLESHARES,SHORTSALERESTRICTED,SIC,ISSUER_COUNTRY_CODE,SOCSACT,SOCSNET,STKTYPE,STVOLUME_3MIN,STVOLUME_5MIN,STVOLUME_10MIN,TRADECOUNT,TRADERATE,UNSHORTABLE,VOLUME,VOLUMERATE,VOLUME_USD,RCGLTCLASS,RCGLTENDDATE,RCGLTIVALUE,RCGLTTRADE,RCGITCLASS,RCGITENDDATE,RCGITIVALUE,RCGITTRADE,RCGSTCLASS,RCGSTENDDATE,RCGSTIVALUE,RCGSTTRADE,ESG_SCORE,ESG_COMBINED_SCORE,ESG_CONTROVERSIES_SCORE,ESG_RESOURCE_USE_SCORE,ESG_EMISSIONS_SCORE,ESG_ENV_INNOVATION_SCORE,ESG_WORKFORCE_SCORE,ESG_HUMAN_RIGHTS_SCORE,ESG_COMMUNITY_SCORE,ESG_PRODUCT_RESPONSIBILITY_SCORE,ESG_MANAGEMENT_SCORE,ESG_SHAREHOLDERS_SCORE,ESG_CSR_STRATEGY_SCORE,ESG_ENV_PILLAR_SCORE,ESG_SOCIAL_PILLAR_SCORE,ESG_CORP_GOV_PILLAR_SCORE,IV_RANK13,IV_RANK26,IV_RANK52,IV_PERCENTILE13,IV_PERCENTILE26,IV_PERCENTILE52,HV_RANK13,HV_RANK26,HV_RANK52,HV_PERCENTILE13,HV_PERCENTILE26,HV_PERCENTILE52,PRICE_2_SALES,EQUITY_PER_SHARE,UTILIZATION,SSCORE,SCHANGE,SVSCORE,SVCHANGE /filters>
?? ???? ??? <group STK.GLOBAL /group>
?? ???? ??? <shortName US /shortName>
?? ???? ??? <cloudScanNotSupported false /cloudScanNotSupported>
?? ???? </Instrument>