Skip to content

Commit 255ea6d

Browse files
committed
Merge branch 'feat_warrent_filter' into 'dev'
Feat warrent filter See merge request server/openapi/openapi-python-sdk!169
2 parents 01e632b + c0ba69a commit 255ea6d

File tree

8 files changed

+460
-5
lines changed

8 files changed

+460
-5
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 2.3.6 (2023-04-11)
2+
### New
3+
- QuoteClient 新增窝轮牛熊证筛选接口 `QuoteClient.get_warrant_filter`, 窝轮牛熊证实时行情接口 `QuoteClient.get_warrant_briefs`
4+
- `QuoteClient.get_option_bars` 期权k线接口新增参数 `limit`
5+
6+
17
## 2.3.5 (2023-03-28)
28
### New
39
- TradeClient 新增不同品种(股票SEC/期货FUT/基金FUND)账户间资金划转接口

tigeropen/common/consts/service_types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
STOCK_BROKER = "stock_broker" # 港股股票实时经纪队列
6666
CAPITAL_DISTRIBUTION = "capital_distribution" # 股票当日资金分布
6767
CAPITAL_FLOW = "capital_flow" # 股票资金流向
68+
WARRANT_FILTER = "warrant_filter"
69+
WARRANT_REAL_TIME_QUOTE = "warrant_real_time_quote"
6870

6971
# 期权行情
7072
OPTION_EXPIRATION = "option_expiration"

tigeropen/quote/domain/filter.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,3 +197,46 @@ def _build_items(self, items):
197197

198198
def __repr__(self):
199199
return "ScannerResult(%s)" % self.__dict__
200+
201+
202+
class WarrantFilterItem:
203+
def __init__(self, items=None, page=None, total_page=None, total_count=None, bounds=None):
204+
self.items = items
205+
self.page = page
206+
self.total_page = total_page
207+
self.total_count = total_count
208+
self.bounds = bounds
209+
210+
def __repr__(self):
211+
return "WarrantFilterItem(%s)" % self.__dict__
212+
213+
214+
class WarrantFilterBounds:
215+
def __init__(self, issuer_name=None, expire_date=None, lot_size=None, entitlement_ratio=None,
216+
leverage_ratio=None, strike=None, premium=None, outstanding_ratio=None,
217+
implied_volatility=None, effective_leverage=None, call_price=None, state=None):
218+
219+
if expire_date is None:
220+
expire_date = set()
221+
if issuer_name is None:
222+
issuer_name = set()
223+
if entitlement_ratio is None:
224+
entitlement_ratio = set()
225+
if lot_size is None:
226+
lot_size = set()
227+
228+
self.issuer_name = issuer_name
229+
self.expire_date = expire_date
230+
self.lot_size = lot_size
231+
self.entitlement_ratio = entitlement_ratio
232+
self.leverage_ratio = leverage_ratio
233+
self.strike = strike
234+
self.premium = premium
235+
self.outstanding_ratio = outstanding_ratio
236+
self.implied_volatility = implied_volatility
237+
self.effective_leverage = effective_leverage
238+
self.call_price = call_price
239+
240+
def __repr__(self):
241+
return "FilterBounds(%s)" % self.__dict__
242+

tigeropen/quote/quote_client.py

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from tigeropen.common.consts.filter_fields import FieldBelongType
1717
from tigeropen.common.consts.service_types import GRAB_QUOTE_PERMISSION, QUOTE_DELAY, GET_QUOTE_PERMISSION, \
1818
HISTORY_TIMELINE, FUTURE_CONTRACT_BY_CONTRACT_CODE, TRADING_CALENDAR, FUTURE_CONTRACTS, MARKET_SCANNER, \
19-
STOCK_BROKER, CAPITAL_FLOW, CAPITAL_DISTRIBUTION
19+
STOCK_BROKER, CAPITAL_FLOW, CAPITAL_DISTRIBUTION, WARRANT_REAL_TIME_QUOTE, WARRANT_FILTER
2020
from tigeropen.common.consts.service_types import MARKET_STATE, ALL_SYMBOLS, ALL_SYMBOL_NAMES, BRIEF, \
2121
TIMELINE, KLINE, TRADE_TICK, OPTION_EXPIRATION, OPTION_CHAIN, FUTURE_EXCHANGE, OPTION_BRIEF, \
2222
OPTION_KLINE, OPTION_TRADE_TICK, FUTURE_KLINE, FUTURE_TICK, FUTURE_CONTRACT_BY_EXCHANGE_CODE, \
@@ -40,7 +40,7 @@
4040
from tigeropen.quote.request.model import MarketParams, MultipleQuoteParams, MultipleContractParams, \
4141
FutureQuoteParams, FutureExchangeParams, FutureContractParams, FutureTradingTimeParams, SingleContractParams, \
4242
SingleOptionQuoteParams, DepthQuoteParams, OptionChainParams, TradingCalendarParams, MarketScannerParams, \
43-
StockBrokerParams, CapitalParams
43+
StockBrokerParams, CapitalParams, WarrantFilterParams
4444
from tigeropen.quote.response.capital_distribution_response import CapitalDistributionResponse
4545
from tigeropen.quote.response.capital_flow_response import CapitalFlowResponse
4646
from tigeropen.quote.response.future_briefs_response import FutureBriefsResponse
@@ -72,6 +72,8 @@
7272
from tigeropen.quote.response.symbol_names_response import SymbolNamesResponse
7373
from tigeropen.quote.response.symbols_response import SymbolsResponse
7474
from tigeropen.quote.response.trading_calendar_response import TradingCalendarResponse
75+
from tigeropen.quote.response.warrant_briefs_response import WarrantBriefsResponse
76+
from tigeropen.quote.response.warrant_filter_response import WarrantFilterResponse
7577
from tigeropen.tiger_open_client import TigerOpenClient
7678
from tigeropen.tiger_open_config import LANGUAGE
7779

@@ -733,7 +735,7 @@ def get_option_briefs(self, identifiers):
733735

734736
return None
735737

736-
def get_option_bars(self, identifiers, begin_time=-1, end_time=4070880000000, period=BarPeriod.DAY):
738+
def get_option_bars(self, identifiers, begin_time=-1, end_time=4070880000000, period=BarPeriod.DAY, limit=None):
737739
"""
738740
获取期权日K数据
739741
:param identifiers: 期权代码列表
@@ -742,6 +744,7 @@ def get_option_bars(self, identifiers, begin_time=-1, end_time=4070880000000, pe
742744
:param end_time: 结束时间. 格式同 begin_time
743745
:param period: 时间间隔. 可选值: DAY("day"), ONE_MINUTE("1min"), FIVE_MINUTES("5min"), HALF_HOUR("30min"),
744746
ONE_HOUR("60min");
747+
:param limit: 每个期权的返回k线数量
745748
:return: pandas.DataFrame, 各 column 含义如下:
746749
time: 毫秒级时间戳
747750
open: 开盘价
@@ -768,6 +771,7 @@ def get_option_bars(self, identifiers, begin_time=-1, end_time=4070880000000, pe
768771
param.period = get_enum_value(period)
769772
param.begin_time = date_str_to_timestamp(begin_time, self._timezone)
770773
param.end_time = date_str_to_timestamp(end_time, self._timezone)
774+
param.limit = limit
771775
contracts.append(param)
772776
params.contracts = contracts
773777
request = OpenApiRequest(OPTION_KLINE, biz_model=params)
@@ -1542,6 +1546,65 @@ def get_capital_distribution(self, symbol, market, lang=None):
15421546
if response_content:
15431547
response = CapitalDistributionResponse()
15441548
response.parse_response_content(response_content)
1549+
if response.is_success():
1550+
return response.result
1551+
else:
1552+
raise ApiException(response.code, response.message)
1553+
1554+
def get_warrant_briefs(self, symbols):
1555+
"""
1556+
get warrant/iopt quote
1557+
:param symbols:
1558+
:return:
1559+
"""
1560+
params = MultipleQuoteParams()
1561+
params.symbols = symbols if isinstance(symbols, list) else [symbols]
1562+
params.lang = get_enum_value(self._lang)
1563+
request = OpenApiRequest(WARRANT_REAL_TIME_QUOTE, biz_model=params)
1564+
response_content = self.__fetch_data(request)
1565+
if response_content:
1566+
response = WarrantBriefsResponse()
1567+
response.parse_response_content(response_content)
1568+
if response.is_success():
1569+
return response.result
1570+
else:
1571+
raise ApiException(response.code, response.message)
1572+
1573+
def get_warrant_filter(self, symbol, page=None, page_size=None, sort_field_name=None, sort_dir=None,
1574+
filter_params=None):
1575+
"""
1576+
:param sort_dir: tigeropen.common.consts.SortDirection, e.g. SortDirection.DESC
1577+
:param filter_params: tigeropen.quote.request.model.WarrantFilterParams
1578+
:return:
1579+
"""
1580+
params = WarrantFilterParams()
1581+
params.lang = get_enum_value(self._lang)
1582+
params.symbol = symbol or (filter_params.symbol if filter_params else None)
1583+
params.page = page or (filter_params.page if filter_params else None)
1584+
params.page_size = page_size or (filter_params.page_size if filter_params else None)
1585+
params.sort_field_name = sort_field_name or (filter_params.sort_field_name if filter_params else None)
1586+
params.sort_dir = get_enum_value(sort_dir or (filter_params.sort_dir if filter_params else None))
1587+
if filter_params:
1588+
params.warrant_type = filter_params.warrant_type
1589+
params.in_out_price = filter_params.in_out_price
1590+
params.issuer_name = filter_params.issuer_name
1591+
params.expire_ym = filter_params.expire_ym
1592+
params.lot_size = filter_params.lot_size
1593+
params.entitlement_ratio = filter_params.entitlement_ratio
1594+
params.leverage_ratio = filter_params.leverage_ratio
1595+
params.strike = filter_params.strike
1596+
params.premium = filter_params.premium
1597+
params.outstanding_ratio = filter_params.outstanding_ratio
1598+
params.implied_volatility = filter_params.implied_volatility
1599+
params.effective_leverage = filter_params.effective_leverage
1600+
params.call_price = filter_params.call_price
1601+
params.state = filter_params.state
1602+
1603+
request = OpenApiRequest(WARRANT_FILTER, biz_model=params)
1604+
response_content = self.__fetch_data(request)
1605+
if response_content:
1606+
response = WarrantFilterResponse()
1607+
response.parse_response_content(response_content)
15451608
if response.is_success():
15461609
return response.result
15471610
else:

0 commit comments

Comments
 (0)