pyqqq 0.12.197__py3-none-any.whl → 0.12.199__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyqqq might be problematic. Click here for more details.

@@ -1,15 +1,17 @@
1
+ import datetime as dtm
1
2
  from dataclasses import asdict
2
3
  from decimal import Decimal
4
+ from typing import Dict, List, Optional
5
+ from zoneinfo import ZoneInfo
6
+
7
+ import pandas as pd
8
+
3
9
  from pyqqq.brokerage.kis.oauth import KISAuth
4
10
  from pyqqq.brokerage.kis.overseas_stock import KISOverseasStock
5
11
  from pyqqq.data.overseas import get_ticker_info
6
12
  from pyqqq.datatypes import *
7
13
  from pyqqq.utils.limiter import CallLimiter
8
14
  from pyqqq.utils.local_cache import ttl_cache
9
- from typing import Dict, List, Optional
10
- from zoneinfo import ZoneInfo
11
- import datetime as dtm
12
- import pandas as pd
13
15
 
14
16
 
15
17
  class KISSimpleOverseasStock:
pyqqq/utils/backoff.py ADDED
@@ -0,0 +1,32 @@
1
+ import random
2
+
3
+
4
+ def exponential_backoff_with_jitter(
5
+ attempt: int,
6
+ base_wait_time: float = 1.0,
7
+ max_wait_time: float = 30.0,
8
+ jitter: bool = True,
9
+ ) -> float:
10
+ """
11
+ 지터와 최대 대기 시간을 포함한 지수 백오프 시간을 계산합니다.
12
+
13
+ Args:
14
+ attempt (int): 현재 재시도 횟수 (1부터 시작).
15
+ base_wait_time (float): 기본 대기 시간 (초).
16
+ max_wait_time (float): 최대 대기 시간 (초).
17
+ jitter (bool): 무작위 지터 추가 여부.
18
+
19
+ Returns:
20
+ float: 최종 백오프 대기 시간 (초).
21
+ """
22
+ # 기본 백오프 시간 계산
23
+ backoff_time = base_wait_time * (2 ** (attempt - 1))
24
+
25
+ # 지터 추가 (full jitter)
26
+ if jitter:
27
+ backoff_time = random.uniform(0, backoff_time)
28
+
29
+ # 최대 대기 시간 적용
30
+ final_wait_time = min(backoff_time, max_wait_time)
31
+
32
+ return final_wait_time
@@ -348,7 +348,7 @@ def get_trading_day_with_offset(from_date: Optional[datetime.date] = None, offse
348
348
  return offset_date
349
349
 
350
350
 
351
- @ttl_cache(maxsize=10, ttl=3600)
351
+ @ttl_cache(maxsize=1000, ttl=3600)
352
352
  def _fetch_market_scheldue(date: datetime.date, exchange: str) -> requests.Response | None:
353
353
  url = f"{c.PYQQQ_API_URL}/domestic-stock/market-schedules/{exchange}"
354
354
  params = {"date": date}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyqqq
3
- Version: 0.12.197
3
+ Version: 0.12.199
4
4
  Summary: Package for quantitative strategy development on the PyQQQ platform
5
5
  License: MIT
6
6
  Author: PyQQQ team
@@ -1,6 +1,6 @@
1
1
  pyqqq/__init__.py,sha256=s-r2WUo0H9OzuPiHSGtCjJMyEXfx8Cpt0hri8amUU2Y,1607
2
2
  pyqqq/backtest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- pyqqq/backtest/broker.py,sha256=ctChBDuvjuRc54ACjH-2r4akAYKHuO9__-Axt3YT8Qw,73821
3
+ pyqqq/backtest/broker.py,sha256=erLt83WG9zDzFZ9UoGk0sgllCzw3k5znngNjj09keiA,73986
4
4
  pyqqq/backtest/environment.py,sha256=cAvXKtRR4xBLFzUo-6xkuihlqRE_Jd0ZYAQ29K5qirg,10229
5
5
  pyqqq/backtest/logger.py,sha256=BmoEMjUU76z8rZtMCYCwbspD3AVaHJrdbbT1EAFgrAE,3294
6
6
  pyqqq/backtest/positionprovider.py,sha256=wrR7Bntg28Q5_vGQV6XNzxe-SYoO9_GLcV9gDVEDAN4,4164
@@ -15,11 +15,11 @@ pyqqq/brokerage/ebest/simple.py,sha256=Ade3m18yhGt1fyn7ZbN-LmyNKiFP2ahUMSLLqMXWc
15
15
  pyqqq/brokerage/ebest/tr_client.py,sha256=6vtod4xXr35yMAIji5qXUr_C3Bf4C_1NDLgELohDuks,7914
16
16
  pyqqq/brokerage/helper.py,sha256=6pDiHo2eqsppC5ObIUMJibeMZ7cq8V9pVzNLTsdAy1w,6675
17
17
  pyqqq/brokerage/kis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- pyqqq/brokerage/kis/domestic_stock.py,sha256=VgeSyFTtwL1bsOlOqHZPOXKbf9ICbxqQpVjqZH-jj5k,233886
18
+ pyqqq/brokerage/kis/domestic_stock.py,sha256=8ENXqEj66I0qUrXobw26_Vjc-zEy8444AGNqKBW9_UI,233326
19
19
  pyqqq/brokerage/kis/oauth.py,sha256=jA7QydFEe5NN8t0QSwEhFoFtQiwTP4fr2segcibOXVU,7805
20
- pyqqq/brokerage/kis/overseas_stock.py,sha256=9QUkEX13Lev5BcXMfK2GLve4xwFptOd1vXh4lDbrpYw,90096
20
+ pyqqq/brokerage/kis/overseas_stock.py,sha256=Jh79ruHjD-MP3qguN2PFeWHJFyKO4vgq8VGxw-g3kVE,88380
21
21
  pyqqq/brokerage/kis/simple.py,sha256=u0XdYtOL18urqQp9l4ekSDHDZBe-VRiO_cNcFdNu96c,43014
22
- pyqqq/brokerage/kis/simple_overseas.py,sha256=1DuQBuJosg0mJQV7Ey2N3UOY8F3uOhzPDay4ncothuc,50360
22
+ pyqqq/brokerage/kis/simple_overseas.py,sha256=hx18_RxFt5U72qUjiMuTtAjGXR9Qh05JMNZlx-QC3yU,50362
23
23
  pyqqq/brokerage/kis/tr_client.py,sha256=3n4ywdJva7V843ffhQVVFctazc-dNIvLAxUIU8GSrds,5636
24
24
  pyqqq/brokerage/multiprocess_tracker.py,sha256=Xx0hSpRZYITBGWjxclOEtNZdHV5agX94s34q1A8EE-Y,7283
25
25
  pyqqq/brokerage/tracker.py,sha256=CmbsdKcKrc9adnDpQ8dZBZZ_p2FdavAyyZ4FPJyvNa8,24799
@@ -39,6 +39,7 @@ pyqqq/executors/hook.py,sha256=xV9SVUpUwGm8AgEuz8aD7U4ema47lRoKn4KFthuLJwQ,36985
39
39
  pyqqq/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  pyqqq/utils/api_client.py,sha256=WLcvZ9sZp2b9YrTauZt2VkcikfByOhHxPHCvGXmgEzw,585
41
41
  pyqqq/utils/array.py,sha256=8E8JW-P1GWzluiqIDuKdUEALZ30AkKRtfxgdrWmu__Q,1747
42
+ pyqqq/utils/backoff.py,sha256=75xpSQM4faLQW4o7TWPlAAw23zifYosepqMVrOK3uRU,916
42
43
  pyqqq/utils/casting.py,sha256=nCHnJQ_F88R22xfnBg58fiJXwHYYnsnk3qSDw_rVIY8,135
43
44
  pyqqq/utils/compute.py,sha256=dk515lUvmYXbp9v6btpLSDnpc-zX0moD7EcJ4l4HCqU,5665
44
45
  pyqqq/utils/copycat.py,sha256=1cMuQKteOuzBbH3aAdsDCH7ZTxTyM6OyJ5Wii7gmBpk,10837
@@ -49,11 +50,11 @@ pyqqq/utils/kvstore.py,sha256=aAWQrs2IugHBPTRUkbYNxCKF9NZe2MCMD5nSj_lVbVw,4586
49
50
  pyqqq/utils/limiter.py,sha256=0zTJitT-14Ve5aeT0zcNEWQGPyY_3FENorF3HS7WPyQ,2643
50
51
  pyqqq/utils/local_cache.py,sha256=HvCyD1whixQWdVMxny5EPZwxKWQm-_Q34fKLXRvc3eU,2312
51
52
  pyqqq/utils/logger.py,sha256=GZzefjhdL8ms-5nPwJFuMtuHsuTuoPMADUhqcz93N4s,4843
52
- pyqqq/utils/market_schedule.py,sha256=NAzRmAc1Bnj5M99Ho7UN8JlVDW-16kgvPGrMNmydaBY,12899
53
+ pyqqq/utils/market_schedule.py,sha256=3y6uI172Kx1Jcj9nbAuqBHZruKp4_hm_1nAaQ1BgIEg,12901
53
54
  pyqqq/utils/mock_api.py,sha256=7EsaVQ9mOVZQAqtQW24isPnk9QTbJII7x3guhFyEMAE,10569
54
55
  pyqqq/utils/position_classifier.py,sha256=tIbZMm_baru0F0qv6QDc5b2-oJYNvmn9HyrRr3xaAXU,14975
55
56
  pyqqq/utils/retry.py,sha256=ENNvjRyswn6nwue5JSqyC82QlBJSAMlJYj_gj0kqutY,2187
56
57
  pyqqq/utils/singleton.py,sha256=m6NZ8fwVDpI6U-gUUihMPgVK_NkDh-Z1NSAtjisrpjY,810
57
- pyqqq-0.12.197.dist-info/METADATA,sha256=8XB8L9rMekKWzuvXR_f_8Sjvd1HB2FfEky4JWtEfiQw,1664
58
- pyqqq-0.12.197.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
59
- pyqqq-0.12.197.dist-info/RECORD,,
58
+ pyqqq-0.12.199.dist-info/METADATA,sha256=w0KawVhD0_oEhBDyGyB4jxD2Gky6O1lBzZbQZwrWGq8,1664
59
+ pyqqq-0.12.199.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
60
+ pyqqq-0.12.199.dist-info/RECORD,,