Skip to content

Commit 7226996

Browse files
feat(client): add futures_mark_price_klines, futures_index_price_klines, futures_premium_index_klines (sammchardy#1498)
* feat(module): add futures mark price klines * add tests * add indexPriceKlines * extend enum and complete _klines * add futures_premium_index_klines * complete klines * add skipped test * format files --------- Co-authored-by: carlosmiei <43336371+carlosmiei@users.noreply.github.com>
1 parent f5c63e1 commit 7226996

File tree

6 files changed

+144
-2
lines changed

6 files changed

+144
-2
lines changed

binance/async_client.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,14 @@ async def _klines(
402402
return await self.futures_klines(**params)
403403
elif HistoricalKlinesType.FUTURES_COIN == klines_type:
404404
return await self.futures_coin_klines(**params)
405+
elif HistoricalKlinesType.FUTURES_MARK_PRICE == klines_type:
406+
return await self.futures_mark_price_klines(**params)
407+
elif HistoricalKlinesType.FUTURES_INDEX_PRICE == klines_type:
408+
return await self.futures_index_price_klines(**params)
409+
elif HistoricalKlinesType.FUTURES_COIN_MARK_PRICE == klines_type:
410+
return await self.futures_coin_mark_price_klines(**params)
411+
elif HistoricalKlinesType.FUTURES_COIN_INDEX_PRICE == klines_type:
412+
return await self.futures_coin_index_price_klines(**params)
405413
else:
406414
raise NotImplementedException(klines_type)
407415

@@ -1667,6 +1675,21 @@ async def futures_aggregate_trades(self, **params):
16671675
async def futures_klines(self, **params):
16681676
return await self._request_futures_api("get", "klines", data=params)
16691677

1678+
async def futures_mark_price_klines(self, **params):
1679+
return await self._request_futures_api("get", "markPriceKlines", data=params)
1680+
1681+
futures_mark_price_klines.__doc__ = Client.futures_mark_price_klines.__doc__
1682+
1683+
async def futures_index_price_klines(self, **params):
1684+
return await self._request_futures_api("get", "indexPriceKlines", data=params)
1685+
1686+
futures_index_price_klines.__doc__ = Client.futures_index_price_klines.__doc__
1687+
1688+
async def futures_premium_index_klines(self, **params):
1689+
return await self._request_futures_api("get", "premiumIndexKlines", data=params)
1690+
1691+
futures_premium_index_klines.__doc__ = Client.futures_index_price_klines.__doc__
1692+
16701693
async def futures_continous_klines(self, **params):
16711694
return await self._request_futures_api("get", "continuousKlines", data=params)
16721695

@@ -1992,6 +2015,17 @@ async def futures_coin_mark_price_klines(self, **params):
19922015
"get", "markPriceKlines", data=params
19932016
)
19942017

2018+
futures_coin_mark_price_klines.__doc__ = Client.futures_mark_price_klines.__doc__
2019+
2020+
async def futures_coin_premium_index_klines(self, **params):
2021+
return await self._request_futures_coin_api(
2022+
"get", "premiumIndexKlines", data=params
2023+
)
2024+
2025+
futures_coin_premium_index_klines.__doc__ = (
2026+
Client.futures_premium_index_klines.__doc__
2027+
)
2028+
19952029
async def futures_coin_mark_price(self, **params):
19962030
return await self._request_futures_coin_api("get", "premiumIndex", data=params)
19972031

@@ -3803,4 +3837,6 @@ async def options_account_get_block_trades(self, **params):
38033837
"get", "block/user-trades", signed=True, data=params
38043838
)
38053839

3806-
options_account_get_block_trades.__doc__ = Client.options_account_get_block_trades.__doc__
3840+
options_account_get_block_trades.__doc__ = (
3841+
Client.options_account_get_block_trades.__doc__
3842+
)

binance/client.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,14 @@ def _klines(
698698
return self.futures_klines(**params)
699699
elif HistoricalKlinesType.FUTURES_COIN == klines_type:
700700
return self.futures_coin_klines(**params)
701+
elif HistoricalKlinesType.FUTURES_MARK_PRICE == klines_type:
702+
return self.futures_mark_price_klines(**params)
703+
elif HistoricalKlinesType.FUTURES_INDEX_PRICE == klines_type:
704+
return self.futures_index_price_klines(**params)
705+
elif HistoricalKlinesType.FUTURES_COIN_MARK_PRICE == klines_type:
706+
return self.futures_coin_mark_price_klines(**params)
707+
elif HistoricalKlinesType.FUTURES_COIN_INDEX_PRICE == klines_type:
708+
return self.futures_coin_index_price_klines(**params)
701709
else:
702710
raise NotImplementedException(klines_type)
703711

@@ -7092,6 +7100,30 @@ def futures_klines(self, **params):
70927100
"""
70937101
return self._request_futures_api("get", "klines", data=params)
70947102

7103+
def futures_mark_price_klines(self, **params):
7104+
"""Kline/candlestick bars for the mark price of a symbol. Klines are uniquely identified by their open time.
7105+
7106+
https://binance-docs.github.io/apidocs/futures/en/#mark-price-kline-candlestick-data
7107+
7108+
"""
7109+
return self._request_futures_api("get", "markPriceKlines", data=params)
7110+
7111+
def futures_index_price_klines(self, **params):
7112+
"""Kline/candlestick bars for the index price of a symbol. Klines are uniquely identified by their open time.
7113+
7114+
https://binance-docs.github.io/apidocs/futures/en/#index-price-kline-candlestick-data
7115+
7116+
"""
7117+
return self._request_futures_api("get", "indexPriceKlines", data=params)
7118+
7119+
def futures_premium_index_klines(self, **params):
7120+
"""Premium index kline bars of a symbol.l. Klines are uniquely identified by their open time.
7121+
7122+
https://binance-docs.github.io/apidocs/futures/en/#premium-index-kline-data
7123+
7124+
"""
7125+
return self._request_futures_api("get", "premiumIndexKlines", data=params)
7126+
70957127
def futures_continous_klines(self, **params):
70967128
"""Kline/candlestick bars for a specific contract type. Klines are uniquely identified by their open time.
70977129
@@ -7128,6 +7160,34 @@ def futures_historical_klines(
71287160
klines_type=HistoricalKlinesType.FUTURES,
71297161
)
71307162

7163+
def futures_historical_mark_price_klines(
7164+
self, symbol, interval, start_str, end_str=None, limit=500
7165+
):
7166+
"""Get historical futures mark price klines from Binance
7167+
7168+
:param symbol: Name of symbol pair e.g. BNBBTC
7169+
:type symbol: str
7170+
:param interval: Binance Kline interval
7171+
:type interval: str
7172+
:param start_str: Start date string in UTC format or timestamp in milliseconds
7173+
:type start_str: str|int
7174+
:param end_str: optional - end date string in UTC format or timestamp in milliseconds (default will fetch everything up to now)
7175+
:type end_str: str|int
7176+
:param limit: Default 500; max 1000.
7177+
:type limit: int
7178+
7179+
:return: list of OHLCV values (Open time, Open, High, Low, Close, Volume, Close time, Quote asset volume, Number of trades, Taker buy base asset volume, Taker buy quote asset volume, Ignore)
7180+
7181+
"""
7182+
return self._historical_klines(
7183+
symbol,
7184+
interval,
7185+
start_str,
7186+
end_str=end_str,
7187+
limit=limit,
7188+
klines_type=HistoricalKlinesType.FUTURES_MARK_PRICE,
7189+
)
7190+
71317191
def futures_historical_klines_generator(
71327192
self, symbol, interval, start_str, end_str=None
71337193
):
@@ -7769,6 +7829,14 @@ def futures_coin_index_price_klines(self, **params):
77697829
"""
77707830
return self._request_futures_coin_api("get", "indexPriceKlines", data=params)
77717831

7832+
def futures_coin_premium_index_klines(self, **params):
7833+
"""Kline/candlestick bars for the index price of a pair..
7834+
7835+
https://binance-docs.github.io/apidocs/delivery/en/#premium-index-kline-data
7836+
7837+
"""
7838+
return self._request_futures_coin_api("get", "premiumIndexKlines", data=params)
7839+
77727840
def futures_coin_mark_price_klines(self, **params):
77737841
"""Kline/candlestick bars for the index price of a pair..
77747842

binance/enums.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ class HistoricalKlinesType(Enum):
7070
SPOT = 1
7171
FUTURES = 2
7272
FUTURES_COIN = 3
73+
FUTURES_MARK_PRICE = 4
74+
FUTURES_INDEX_PRICE = 5
75+
FUTURES_COIN_MARK_PRICE = 6
76+
FUTURES_COIN_INDEX_PRICE = 7
7377

7478

7579
class FuturesType(Enum):

tests/test_async_client.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,23 @@ async def test_get_klines(clientAsync):
5757
await clientAsync.get_klines(symbol="BTCUSDT", interval="1d")
5858

5959

60+
async def test_futures_mark_price_klines(clientAsync):
61+
await clientAsync.futures_mark_price_klines(symbol="BTCUSDT", interval="1h")
62+
63+
64+
async def test_futures_index_price_klines(clientAsync):
65+
await clientAsync.futures_index_price_klines(pair="BTCUSDT", interval="1h")
66+
67+
68+
async def test_futures_premium_index_klines(clientAsync):
69+
await clientAsync.futures_premium_index_klines(symbol="BTCUSDT", interval="1h")
70+
71+
72+
@pytest.mark.skip(reason="network error")
73+
async def test_futures_coin_premium_index_klines(clientAsync):
74+
await clientAsync.futures_coin_premium_index_klines(symbol="BTCUSD", interval="1h")
75+
76+
6077
async def test_get_avg_price(clientAsync):
6178
await clientAsync.get_avg_price(symbol="BTCUSDT")
6279

tests/test_async_client_futures.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,4 +598,6 @@ async def test_futures_coin_account_trade_history_download(futuresClientAsync):
598598

599599
@pytest.mark.skip(reason="No sandbox support")
600600
async def test_futures_coin_account_trade_download_id(futuresClientAsync):
601-
await futuresClientAsync.futures_coin_account_trade_history_download_link(downloadId="123")
601+
await futuresClientAsync.futures_coin_account_trade_history_download_link(
602+
downloadId="123"
603+
)

tests/test_client_futures.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,18 @@ def test_futures_klines(futuresClient):
4040
futuresClient.futures_klines(symbol="BTCUSDT", interval="1h")
4141

4242

43+
def test_futures_mark_price_klines(futuresClient):
44+
futuresClient.futures_mark_price_klines(symbol="BTCUSDT", interval="1h")
45+
46+
47+
def test_futures_index_price_klines(futuresClient):
48+
futuresClient.futures_index_price_klines(pair="BTCUSDT", interval="1h")
49+
50+
51+
def test_futures_premium_index_klines(futuresClient):
52+
futuresClient.futures_premium_index_klines(symbol="BTCUSDT", interval="1h")
53+
54+
4355
def test_futures_continous_klines(futuresClient):
4456
futuresClient.futures_continous_klines(
4557
pair="BTCUSDT", contractType="PERPETUAL", interval="1h"
@@ -567,10 +579,12 @@ def test_futures_coin_stream_close(futuresClient):
567579
listen_key = futuresClient.futures_coin_stream_get_listen_key()
568580
futuresClient.futures_coin_stream_close(listenKey=listen_key)
569581

582+
570583
########################################################
571584
# Test block trades
572585
########################################################
573586

587+
574588
@pytest.mark.skip(reason="No sandbox support")
575589
def test_futures_coin_account_order_history_download(futuresClient):
576590
futuresClient.futures_coin_account_order_download()
@@ -632,6 +646,7 @@ def test_futures_coin_account_order_download_id_mock(futuresClient):
632646
)
633647
assert response == expected_response
634648

649+
635650
def test_futures_coin_account_trade_history_download_id_mock(futuresClient):
636651
expected_response = {
637652
"avgCostTimestampOfLast30d": 7241837,

0 commit comments

Comments
 (0)