Skip to content

Commit 21ca5e8

Browse files
authored
Fix/kline params (#3)
* refactor: use KlineType and PriceType enums for K-line API parameters * chore: bump version to 0.3.0
1 parent f582755 commit 21ca5e8

9 files changed

Lines changed: 121 additions & 39 deletions

File tree

README.md

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,24 @@ asyncio.run(main())
336336

337337
### Market Data
338338

339+
#### Available Enums
340+
341+
**KlineType (K-line intervals):**
342+
- `KlineType.MINUTE_1`, `KlineType.MINUTE_5`, `KlineType.MINUTE_15`, `KlineType.MINUTE_30`
343+
- `KlineType.HOUR_1`, `KlineType.HOUR_2`, `KlineType.HOUR_4`, `KlineType.HOUR_6`, `KlineType.HOUR_8`, `KlineType.HOUR_12`
344+
- `KlineType.DAY_1`, `KlineType.WEEK_1`, `KlineType.MONTH_1`
345+
346+
**PriceType (price types):**
347+
- `PriceType.LAST_PRICE` (default) - Latest market price
348+
- `PriceType.INDEX_PRICE` - Index price
349+
- `PriceType.ORACLE_PRICE` - Oracle price
350+
- `PriceType.ASK1_PRICE` - Best ask price
351+
- `PriceType.BID1_PRICE` - Best bid price
352+
- `PriceType.OPEN_INTEREST` - Open interest
353+
354+
339355
```python
340-
from edgex_sdk import Client, GetKLineParams, GetOrderBookDepthParams
356+
from edgex_sdk import Client, GetKLineParams, GetOrderBookDepthParams, KlineType, PriceType
341357

342358
# Get 24-hour market quotes for BNB2USDT (contract ID: 10000004)
343359
quote = await client.get_24_hour_quote("10000004")
@@ -346,9 +362,22 @@ print(f"Current price: {quote}")
346362
# Get K-line data for BTCUSDT (contract ID: 10000001)
347363
kline_params = GetKLineParams(
348364
contract_id="10000001", # BTCUSDT
349-
interval="1m",
350-
size="10"
365+
kline_type=KlineType.MINUTE_1,
366+
price_type=PriceType.LAST_PRICE,
367+
size=10
351368
)
369+
370+
# With time filters (optional)
371+
# kline_params = GetKLineParams(
372+
# contract_id="10000001",
373+
# kline_type=KlineType.HOUR_1,
374+
# price_type=PriceType.LAST_PRICE,
375+
# size=20,
376+
# filter_begin_kline_time_inclusive="1640995200000", # Start timestamp
377+
# filter_end_kline_time_exclusive="1640998800000" # End timestamp
378+
# )
379+
380+
352381
klines = await client.quote.get_k_line(kline_params)
353382
print(f"K-lines: {klines}")
354383

edgex_sdk/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
from .quote.client import (
2424
GetKLineParams,
2525
GetOrderBookDepthParams,
26-
GetMultiContractKLineParams
26+
GetMultiContractKLineParams,
27+
KlineType,
28+
PriceType
2729
)
2830
from .transfer.client import (
2931
GetTransferOutByIdParams,
@@ -40,7 +42,7 @@
4042
)
4143
from .ws.manager import Manager as WebSocketManager
4244

43-
__version__ = "0.2.0"
45+
__version__ = "0.3.0"
4446
__all__ = [
4547
"Client",
4648
"OrderType",
@@ -57,6 +59,8 @@
5759
"GetKLineParams",
5860
"GetOrderBookDepthParams",
5961
"GetMultiContractKLineParams",
62+
"KlineType",
63+
"PriceType",
6064
"GetTransferOutByIdParams",
6165
"GetTransferInByIdParams",
6266
"GetWithdrawAvailableAmountParams",

edgex_sdk/quote/client.py

Lines changed: 67 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,78 @@
11
from typing import Dict, Any, List
2+
from enum import Enum
23

34
from ..internal.async_client import AsyncClient
45

56

7+
class KlineType(Enum):
8+
"""K-line type enumeration."""
9+
UNKNOWN_KLINE_TYPE = 0
10+
MINUTE_1 = 1
11+
MINUTE_5 = 2
12+
MINUTE_15 = 3
13+
MINUTE_30 = 4
14+
HOUR_1 = 11
15+
HOUR_2 = 12
16+
HOUR_4 = 13
17+
HOUR_6 = 14
18+
HOUR_8 = 15
19+
HOUR_12 = 16
20+
DAY_1 = 21
21+
WEEK_1 = 31
22+
MONTH_1 = 41
23+
24+
25+
class PriceType(Enum):
26+
"""Price type enumeration."""
27+
UNKNOWN_PRICE_TYPE = 0
28+
ORACLE_PRICE = 1
29+
INDEX_PRICE = 2
30+
LAST_PRICE = 3
31+
ASK1_PRICE = 4
32+
BID1_PRICE = 5
33+
OPEN_INTEREST = 6
34+
35+
36+
37+
38+
39+
40+
41+
642
class GetKLineParams:
743
"""Parameters for getting K-line data."""
844

945
def __init__(
1046
self,
1147
contract_id: str,
12-
interval: str,
13-
size: str = "",
48+
kline_type: KlineType,
49+
price_type: PriceType = PriceType.LAST_PRICE,
50+
size: int = 100,
1451
offset_data: str = "",
15-
filter_start_time_inclusive: int = 0,
16-
filter_end_time_exclusive: int = 0
52+
filter_begin_kline_time_inclusive: str = "",
53+
filter_end_kline_time_exclusive: str = ""
1754
):
55+
"""
56+
Initialize K-line parameters.
57+
58+
Args:
59+
contract_id: Contract ID (string)
60+
kline_type: K-line type (KlineType enum)
61+
price_type: Price type (PriceType enum, defaults to LAST_PRICE)
62+
size: Number of records to fetch (int, defaults to 100)
63+
offset_data: Pagination offset data (string)
64+
filter_begin_kline_time_inclusive: Start time filter (string timestamp)
65+
filter_end_kline_time_exclusive: End time filter (string timestamp)
66+
"""
1867
self.contract_id = contract_id
19-
self.interval = interval
68+
self.kline_type = kline_type
69+
self.price_type = price_type
2070
self.size = size
2171
self.offset_data = offset_data
22-
self.filter_start_time_inclusive = filter_start_time_inclusive
23-
self.filter_end_time_exclusive = filter_end_time_exclusive
72+
self.filter_begin_kline_time_inclusive = filter_begin_kline_time_inclusive
73+
self.filter_end_kline_time_exclusive = filter_end_kline_time_exclusive
74+
75+
2476

2577

2678
class GetOrderBookDepthParams:
@@ -169,26 +221,22 @@ async def get_k_line(self, params: GetKLineParams) -> Dict[str, Any]:
169221
url = f"{self.async_client.base_url}/api/v1/public/quote/getKline"
170222
query_params = {
171223
"contractId": params.contract_id,
172-
"interval": params.interval
224+
"klineType": params.kline_type.name,
225+
"priceType": params.price_type.name,
226+
"size": str(params.size)
173227
}
174228

175-
# Add pagination parameters
176-
if params.size:
177-
query_params["size"] = params.size
229+
# Add optional parameters
178230
if params.offset_data:
179231
query_params["offsetData"] = params.offset_data
180-
181-
# Add time filters
182-
if params.filter_start_time_inclusive > 0:
183-
query_params["filterStartTimeInclusive"] = str(params.filter_start_time_inclusive)
184-
if params.filter_end_time_exclusive > 0:
185-
query_params["filterEndTimeExclusive"] = str(params.filter_end_time_exclusive)
232+
if params.filter_begin_kline_time_inclusive:
233+
query_params["filterBeginKlineTimeInclusive"] = params.filter_begin_kline_time_inclusive
234+
if params.filter_end_kline_time_exclusive:
235+
query_params["filterEndKlineTimeExclusive"] = params.filter_end_kline_time_exclusive
186236

187237
# Public endpoint - use simple GET request
188238
await self.async_client._ensure_session()
189239

190-
url = f"{self.async_client.base_url}/api/v1/public/quote/getKline"
191-
192240
try:
193241
async with self.async_client.session.get(url, params=query_params) as response:
194242
if response.status != 200:

examples/advanced_usage.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,16 +501,16 @@ async def get_order_fill_transactions(
501501
async def get_k_line(
502502
self,
503503
contract_id: str,
504-
interval: str,
505-
size: str = "100",
504+
kline_type: 'KlineType',
505+
size: int = 100,
506506
offset_data: str = ""
507507
) -> Dict[str, Any]:
508508
"""
509509
Get K-line data.
510-
510+
511511
Args:
512512
contract_id: The contract ID
513-
interval: The K-line interval
513+
kline_type: The K-line type (KlineType enum)
514514
size: The page size
515515
offset_data: The offset data for pagination
516516
@@ -524,7 +524,7 @@ async def get_k_line(
524524
# Create parameters
525525
params = GetKLineParams(
526526
contract_id=contract_id,
527-
interval=interval,
527+
kline_type=kline_type,
528528
size=size,
529529
offset_data=offset_data
530530
)

examples/basic_usage.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
OrderSide,
1919
GetKLineParams,
2020
GetOrderBookDepthParams,
21+
KlineType,
2122
WebSocketManager
2223
)
2324

@@ -58,8 +59,8 @@ async def main():
5859
# Get K-line data for BTCUSDT (contract ID: 10000001)
5960
kline_params = GetKLineParams(
6061
contract_id="10000001", # BTCUSDT
61-
interval="1m",
62-
size="10"
62+
kline_type=KlineType.MINUTE_1,
63+
size=10
6364
)
6465
klines = await client.quote.get_k_line(kline_params)
6566
print(f"K-lines: {klines}")

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "edgex-python-sdk"
7-
version = "0.2.0"
7+
version = "0.3.0"
88
description = "A Python SDK for interacting with the EdgeX Exchange API"
99
readme = "README.md"
1010
license = {text = "MIT"}

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def read_readme():
77

88
setup(
99
name="edgex-python-sdk",
10-
version="0.2.0",
10+
version="0.3.0",
1111
description="A Python SDK for interacting with the EdgeX Exchange API",
1212
long_description=read_readme(),
1313
long_description_content_type="text/markdown",

tests/integration/public/test_quote.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import unittest
44
import logging
55

6-
from edgex_sdk import GetKLineParams, GetOrderBookDepthParams, GetMultiContractKLineParams
6+
from edgex_sdk import GetKLineParams, GetOrderBookDepthParams, GetMultiContractKLineParams, KlineType
77
from tests.integration.public.base_test import BasePublicEndpointTest
88

99
# Configure logging
@@ -40,8 +40,8 @@ def test_get_k_line(self):
4040
# Create parameters
4141
params = GetKLineParams(
4242
contract_id=TEST_CONTRACT_ID,
43-
interval="HOUR_1",
44-
size="10"
43+
kline_type=KlineType.HOUR_1,
44+
size=10
4545
)
4646

4747
# Get K-line data

tests/integration/test_quote.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import logging
55
from typing import Dict, Any
66

7-
from edgex_sdk import GetKLineParams, GetOrderBookDepthParams, GetMultiContractKLineParams
7+
from edgex_sdk import GetKLineParams, GetOrderBookDepthParams, GetMultiContractKLineParams, KlineType
88
from tests.integration.base_test import BaseIntegrationTest
99
from tests.integration.config import TEST_CONTRACT_ID
1010

@@ -45,8 +45,8 @@ def test_get_k_line(self):
4545
# Create parameters
4646
params = GetKLineParams(
4747
contract_id=TEST_CONTRACT_ID,
48-
interval="1m",
49-
size="10"
48+
kline_type=KlineType.MINUTE_1,
49+
size=10
5050
)
5151

5252
# Get K-line data

0 commit comments

Comments
 (0)