Skip to content

Commit c0ba69a

Browse files
committed
warrant filter and quote
1 parent a3f5db4 commit c0ba69a

File tree

4 files changed

+125
-18
lines changed

4 files changed

+125
-18
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/quote/domain/filter.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,11 @@ def __repr__(self):
200200

201201

202202
class WarrantFilterItem:
203-
def __init__(self, page=None, total_page=None, total_count=None, items=None, bounds=None):
203+
def __init__(self, items=None, page=None, total_page=None, total_count=None, bounds=None):
204+
self.items = items
204205
self.page = page
205206
self.total_page = total_page
206207
self.total_count = total_count
207-
self.items = items
208208
self.bounds = bounds
209209

210210
def __repr__(self):
@@ -214,15 +214,17 @@ def __repr__(self):
214214
class WarrantFilterBounds:
215215
def __init__(self, issuer_name=None, expire_date=None, lot_size=None, entitlement_ratio=None,
216216
leverage_ratio=None, strike=None, premium=None, outstanding_ratio=None,
217-
implied_volatility=None, effective_leverage=None, call_price=None):
218-
if entitlement_ratio is None:
219-
entitlement_ratio = []
220-
if lot_size is None:
221-
lot_size = []
217+
implied_volatility=None, effective_leverage=None, call_price=None, state=None):
218+
222219
if expire_date is None:
223-
expire_date = []
220+
expire_date = set()
224221
if issuer_name is None:
225-
issuer_name = []
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+
226228
self.issuer_name = issuer_name
227229
self.expire_date = expire_date
228230
self.lot_size = lot_size

tigeropen/quote/quote_client.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,13 +1570,36 @@ def get_warrant_briefs(self, symbols):
15701570
else:
15711571
raise ApiException(response.code, response.message)
15721572

1573-
def get_warrant_filter(self, symbol, ):
1573+
def get_warrant_filter(self, symbol, page=None, page_size=None, sort_field_name=None, sort_dir=None,
1574+
filter_params=None):
15741575
"""
1576+
:param sort_dir: tigeropen.common.consts.SortDirection, e.g. SortDirection.DESC
1577+
:param filter_params: tigeropen.quote.request.model.WarrantFilterParams
15751578
:return:
15761579
"""
15771580
params = WarrantFilterParams()
15781581
params.lang = get_enum_value(self._lang)
1579-
params.symbol = symbol
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+
15801603
request = OpenApiRequest(WARRANT_FILTER, biz_model=params)
15811604
response_content = self.__fetch_data(request)
15821605
if response_content:

tigeropen/quote/request/model.py

Lines changed: 83 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
@author: gaoan
66
"""
77
from tigeropen.common.model import BaseParams
8+
from tigeropen.common.util.string_utils import underline_to_camel
89

910

1011
class MarketParams(BaseParams):
@@ -1068,12 +1069,12 @@ def __init__(self):
10681069
# sort directions
10691070
self._sort_dir = None
10701071
# 1:Call, 2: Put, 3: Bull,4: Bear, 0: All
1071-
self._warrant_type = None
1072+
self._warrant_type: set[int] = set()
10721073
self._issuer_name = None
10731074
# expiry date: yyyy-MM
10741075
self._expire_ym = None
10751076
# 0 All, 1 Normal, 2 Terminate Trades, 3 Waiting to be listed
1076-
self._state = None
1077+
self._state: int = None
10771078
# -1:out the money, 1: in the money
10781079
self._in_out_price: set[int] = set()
10791080
self._lot_size: set[int] = set()
@@ -1088,6 +1089,51 @@ def __init__(self):
10881089
self._outstanding_ratio: tuple[float, float] = tuple()
10891090
self._implied_volatility: tuple[int, int] = tuple()
10901091

1092+
def set_state(self, value):
1093+
self._state = value
1094+
1095+
def set_issuer_name(self, value):
1096+
self._issuer_name = value
1097+
1098+
def set_expire_ym(self, value):
1099+
self._expire_ym = value
1100+
1101+
def add_warrant_type(self, value):
1102+
self._warrant_type.add(value)
1103+
1104+
def add_in_out_price(self, value):
1105+
self._in_out_price.add(value)
1106+
1107+
def add_lot_size(self, value):
1108+
self._lot_size.add(value)
1109+
1110+
def add_entitlement_ratio(self, value):
1111+
self._entitlement_ratio.add(value)
1112+
1113+
def set_strike_range(self, min_value, max_value):
1114+
self._strike = (min_value, max_value)
1115+
1116+
def set_effective_leverage_range(self, min_value, max_value):
1117+
self._effective_leverage = (min_value, max_value)
1118+
1119+
def set_leverage_ratio_range(self, min_value, max_value):
1120+
self._leverage_ratio = (min_value, max_value)
1121+
1122+
def set_call_price_range(self, min_value, max_value):
1123+
self._call_price = (min_value, max_value)
1124+
1125+
def set_volume_range(self, min_value, max_value):
1126+
self._volume = (min_value, max_value)
1127+
1128+
def set_premium_range(self, min_value, max_value):
1129+
self._premium = (min_value, max_value)
1130+
1131+
def set_outstanding_ratio_range(self, min_value, max_value):
1132+
self._outstanding_ratio = (min_value, max_value)
1133+
1134+
def set_implied_volatility_range(self, min_value, max_value):
1135+
self._implied_volatility = (min_value, max_value)
1136+
10911137
@property
10921138
def symbol(self):
10931139
return self._symbol
@@ -1160,6 +1206,30 @@ def state(self):
11601206
def state(self, value):
11611207
self._state = value
11621208

1209+
@property
1210+
def in_out_price(self):
1211+
return self._in_out_price
1212+
1213+
@in_out_price.setter
1214+
def in_out_price(self, value):
1215+
self._in_out_price = value
1216+
1217+
@property
1218+
def lot_size(self):
1219+
return self._lot_size
1220+
1221+
@lot_size.setter
1222+
def lot_size(self, value):
1223+
self._lot_size = value
1224+
1225+
@property
1226+
def entitlement_ratio(self):
1227+
return self._entitlement_ratio
1228+
1229+
@entitlement_ratio.setter
1230+
def entitlement_ratio(self, value):
1231+
self._entitlement_ratio = value
1232+
11631233
@property
11641234
def strike(self):
11651235
return self._strike
@@ -1225,9 +1295,9 @@ def implied_volatility(self, value):
12251295
self._implied_volatility = value
12261296

12271297
def convert_range_param(self, value: tuple):
1228-
if value and len(value) == 2:
1298+
if (isinstance(value, tuple) or isinstance(value, list)) and len(value) == 2:
12291299
return {'min': value[0], 'max': value[1]}
1230-
return None
1300+
return value
12311301

12321302
def to_openapi_dict(self):
12331303
params = super().to_openapi_dict()
@@ -1238,15 +1308,21 @@ def to_openapi_dict(self):
12381308
if self.page_size:
12391309
params['page_size'] = self.page_size
12401310
if self.sort_field_name:
1241-
params['sort_field_name'] = self.sort_field_name
1311+
params['sort_field_name'] = underline_to_camel(self.sort_field_name)
12421312
if self.sort_dir:
12431313
params['sort_dir'] = self.sort_dir
1244-
if self.warrant_type:
1245-
params['warrant_type'] = self.warrant_type
12461314
if self.issuer_name:
12471315
params['issuer_name'] = self.issuer_name
12481316
if self.expire_ym:
12491317
params['expire_ym'] = self.expire_ym
1318+
if self.in_out_price:
1319+
params['in_out_price'] = list(self.in_out_price)
1320+
if self.lot_size:
1321+
params['lot_size'] = list(self.lot_size)
1322+
if self.entitlement_ratio:
1323+
params['entitlement_ratio'] = list(self.entitlement_ratio)
1324+
if self.warrant_type:
1325+
params['warrant_type'] = list(self.warrant_type)
12501326
if self.state:
12511327
params['state'] = self.state
12521328
# tuple params

0 commit comments

Comments
 (0)