programgarden-finance 0.1.9__tar.gz

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.
Files changed (163) hide show
  1. programgarden_finance-0.1.9/PKG-INFO +320 -0
  2. programgarden_finance-0.1.9/README.md +297 -0
  3. programgarden_finance-0.1.9/programgarden_finance/__init__.py +121 -0
  4. programgarden_finance-0.1.9/programgarden_finance/ls/__init__.py +208 -0
  5. programgarden_finance-0.1.9/programgarden_finance/ls/config.py +64 -0
  6. programgarden_finance-0.1.9/programgarden_finance/ls/models.py +239 -0
  7. programgarden_finance-0.1.9/programgarden_finance/ls/oauth/__init__.py +6 -0
  8. programgarden_finance-0.1.9/programgarden_finance/ls/oauth/generate_token/__init__.py +38 -0
  9. programgarden_finance-0.1.9/programgarden_finance/ls/oauth/generate_token/token/__init__.py +140 -0
  10. programgarden_finance-0.1.9/programgarden_finance/ls/oauth/generate_token/token/blocks.py +93 -0
  11. programgarden_finance-0.1.9/programgarden_finance/ls/oauth/revoke_token/__init__.py +0 -0
  12. programgarden_finance-0.1.9/programgarden_finance/ls/oauth/revoke_token/revoke/__init__.py +0 -0
  13. programgarden_finance-0.1.9/programgarden_finance/ls/oauth/revoke_token/revoke/blocks.py +79 -0
  14. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/__init__.py +73 -0
  15. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ01400/__init__.py +102 -0
  16. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ01400/blocks.py +233 -0
  17. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ01500/__init__.py +103 -0
  18. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ01500/blocks.py +493 -0
  19. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ01800/__init__.py +101 -0
  20. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ01800/blocks.py +392 -0
  21. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ02400/__init__.py +101 -0
  22. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ02400/blocks.py +454 -0
  23. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ03000/__init__.py +101 -0
  24. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ03000/blocks.py +255 -0
  25. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ05300/__init__.py +108 -0
  26. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDBQ05300/blocks.py +347 -0
  27. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDEQ00800/__init__.py +101 -0
  28. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/CIDEQ00800/blocks.py +334 -0
  29. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/accno/__init__.py +283 -0
  30. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/__init__.py +195 -0
  31. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3103/__init__.py +114 -0
  32. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3103/blocks.py +149 -0
  33. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3108/__init__.py +111 -0
  34. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3108/blocks.py +173 -0
  35. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3117/__init__.py +113 -0
  36. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3117/blocks.py +143 -0
  37. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3139/__init__.py +112 -0
  38. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/chart/o3139/blocks.py +160 -0
  39. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/__init__.py +605 -0
  40. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3101/__init__.py +96 -0
  41. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3101/blocks.py +282 -0
  42. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3104/__init__.py +96 -0
  43. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3104/blocks.py +184 -0
  44. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3105/__init__.py +103 -0
  45. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3105/blocks.py +214 -0
  46. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3106/__init__.py +103 -0
  47. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3106/blocks.py +198 -0
  48. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3107/__init__.py +95 -0
  49. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3107/blocks.py +140 -0
  50. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3116/__init__.py +130 -0
  51. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3116/blocks.py +149 -0
  52. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3121/__init__.py +120 -0
  53. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3121/blocks.py +170 -0
  54. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3123/__init__.py +196 -0
  55. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3123/blocks.py +156 -0
  56. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3125/__init__.py +184 -0
  57. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3125/blocks.py +216 -0
  58. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3126/__init__.py +184 -0
  59. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3126/blocks.py +196 -0
  60. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3127/__init__.py +130 -0
  61. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3127/blocks.py +130 -0
  62. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3128/__init__.py +196 -0
  63. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3128/blocks.py +165 -0
  64. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3136/__init__.py +195 -0
  65. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3136/blocks.py +142 -0
  66. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3137/__init__.py +203 -0
  67. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/market/o3137/blocks.py +148 -0
  68. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/order/CIDBT00100/__init__.py +121 -0
  69. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/order/CIDBT00100/blocks.py +368 -0
  70. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/order/CIDBT00900/__init__.py +120 -0
  71. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/order/CIDBT00900/blocks.py +389 -0
  72. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/order/CIDBT01000/__init__.py +111 -0
  73. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/order/CIDBT01000/blocks.py +291 -0
  74. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/order/__init__.py +152 -0
  75. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/OVC/__init__.py +17 -0
  76. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/OVC/blocks.py +128 -0
  77. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/OVC/client.py +25 -0
  78. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/OVH/__init__.py +17 -0
  79. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/OVH/blocks.py +116 -0
  80. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/OVH/client.py +25 -0
  81. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC1/__init__.py +17 -0
  82. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC1/blocks.py +100 -0
  83. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC1/client.py +20 -0
  84. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC2/__init__.py +17 -0
  85. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC2/blocks.py +108 -0
  86. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC2/client.py +20 -0
  87. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC3/__init__.py +17 -0
  88. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC3/blocks.py +164 -0
  89. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/TC3/client.py +20 -0
  90. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/WOC/__init__.py +17 -0
  91. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/WOC/blocks.py +92 -0
  92. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/WOC/client.py +25 -0
  93. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/WOH/__init__.py +17 -0
  94. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/WOH/blocks.py +142 -0
  95. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/WOH/client.py +25 -0
  96. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_futureoption/real/__init__.py +242 -0
  97. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/__init__.py +77 -0
  98. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSAQ00102/__init__.py +120 -0
  99. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSAQ00102/blocks.py +737 -0
  100. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSAQ01400/__init__.py +136 -0
  101. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSAQ01400/blocks.py +432 -0
  102. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSOQ00201/__init__.py +121 -0
  103. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSOQ00201/blocks.py +668 -0
  104. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSOQ02701/__init__.py +130 -0
  105. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/COSOQ02701/blocks.py +364 -0
  106. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/accno/__init__.py +202 -0
  107. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/__init__.py +185 -0
  108. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3103/__init__.py +122 -0
  109. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3103/blocks.py +212 -0
  110. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3202/__init__.py +172 -0
  111. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3202/blocks.py +303 -0
  112. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3203/__init__.py +175 -0
  113. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3203/blocks.py +228 -0
  114. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3204/__init__.py +173 -0
  115. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/chart/g3204/blocks.py +232 -0
  116. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/__init__.py +221 -0
  117. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3101/__init__.py +106 -0
  118. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3101/blocks.py +179 -0
  119. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3102/__init__.py +130 -0
  120. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3102/blocks.py +186 -0
  121. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3104/__init__.py +99 -0
  122. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3104/blocks.py +208 -0
  123. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3106/__init__.py +98 -0
  124. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3106/blocks.py +295 -0
  125. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3190/__init__.py +130 -0
  126. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/market/g3190/blocks.py +230 -0
  127. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSAT00301/__init__.py +99 -0
  128. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSAT00301/blocks.py +325 -0
  129. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSAT00311/__init__.py +99 -0
  130. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSAT00311/blocks.py +324 -0
  131. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSAT00400/__init__.py +99 -0
  132. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSAT00400/blocks.py +200 -0
  133. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSMT00300/__init__.py +103 -0
  134. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/COSMT00300/blocks.py +202 -0
  135. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/order/__init__.py +208 -0
  136. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS0/__init__.py +17 -0
  137. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS0/blocks.py +246 -0
  138. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS0/client.py +20 -0
  139. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS1/__init__.py +17 -0
  140. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS1/blocks.py +284 -0
  141. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS1/client.py +20 -0
  142. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS2/__init__.py +17 -0
  143. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS2/blocks.py +286 -0
  144. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS2/client.py +20 -0
  145. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS3/__init__.py +17 -0
  146. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS3/blocks.py +283 -0
  147. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS3/client.py +20 -0
  148. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS4/__init__.py +17 -0
  149. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS4/blocks.py +272 -0
  150. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/AS4/client.py +20 -0
  151. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/GSC/__init__.py +17 -0
  152. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/GSC/blocks.py +120 -0
  153. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/GSC/client.py +25 -0
  154. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/GSH/__init__.py +17 -0
  155. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/GSH/blocks.py +170 -0
  156. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/GSH/client.py +25 -0
  157. programgarden_finance-0.1.9/programgarden_finance/ls/overseas_stock/real/__init__.py +242 -0
  158. programgarden_finance-0.1.9/programgarden_finance/ls/real_base.py +583 -0
  159. programgarden_finance-0.1.9/programgarden_finance/ls/status.py +25 -0
  160. programgarden_finance-0.1.9/programgarden_finance/ls/token_manager.py +125 -0
  161. programgarden_finance-0.1.9/programgarden_finance/ls/tr_base.py +442 -0
  162. programgarden_finance-0.1.9/programgarden_finance/ls/tr_helpers.py +294 -0
  163. programgarden_finance-0.1.9/pyproject.toml +26 -0
@@ -0,0 +1,320 @@
1
+ Metadata-Version: 2.3
2
+ Name: programgarden-finance
3
+ Version: 0.1.9
4
+ Summary: 프로그램 동산 운영진이 관리하는 증권사 데이터 오픈소스
5
+ Author: 프로그램동산
6
+ Author-email: coding@programgarden.com
7
+ Requires-Python: >=3.9
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.9
10
+ Classifier: Programming Language :: Python :: 3.10
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Requires-Dist: aiohttp (>=3.10.0,<4.0.0)
15
+ Requires-Dist: programgarden-core (>=0.1.8,<0.2.0)
16
+ Requires-Dist: pydantic (>=2.11.7,<3.0.0)
17
+ Requires-Dist: python-dotenv (>=1.1.1,<2.0.0)
18
+ Requires-Dist: redis (>=6.4.0,<7.0.0)
19
+ Requires-Dist: requests (>=2.32.4,<3.0.0)
20
+ Requires-Dist: websockets (>=15.0.1,<16.0.0)
21
+ Description-Content-Type: text/markdown
22
+
23
+ # Programgarden Finance
24
+
25
+ Programgarden Finance는 AI 시대에 맞춰 파이썬을 모르는 투자자도 개인화된 시스템 트레이딩을 자동으로 수행할 수 있게 돕는 오픈소스입니다. 본 라이브러리는 LS증권 OpenAPI를 간소화하여 해외 주식 및 해외 선물옵션 거래를 쉽게 자동화할 수 있도록 설계되었습니다.
26
+
27
+ 비전공 투자자도 사용하기 쉽도록 설계되었으며, 동시성, 증권 데이터 업데이트 등의 백그라운드 작업은 Program Garden에서 관리하고 있으므로 투자자는 손쉽게 사용만 하면 됩니다.
28
+
29
+ - 문서(비개발자 빠른 시작): https://programgarden.gitbook.io/docs/invest/non_dev_quick_guide
30
+ - 문서(Finance 가이드): https://programgarden.gitbook.io/docs/develop/finance_guide
31
+ - 문서(개발자 구조 안내): https://programgarden.gitbook.io/docs/develop/structure
32
+ - 유튜브: https://www.youtube.com/@programgarden
33
+ - 실시간소통 오픈톡방: https://open.kakao.com/o/gKVObqUh
34
+
35
+ ## 주요 특징
36
+
37
+ - **간편한 LS증권 API 통합**: LS증권 OpenAPI의 복잡한 스펙을 간소화하여 몇 줄의 코드로 시작 가능
38
+ - **해외 주식 & 선물옵션 지원**: 해외 주식 및 해외 선물옵션 시장의 실시간 데이터 조회, 주문, 잔고 관리 등 통합 지원
39
+ - **실시간 WebSocket 스트리밍**: 실시간 시세, 체결, 호가 데이터를 WebSocket으로 간편하게 구독 가능
40
+ - **비동기 처리**: 모든 API 요청은 비동기와 동기로 분리하여 처리해서 높은 성능과 동시성 제공
41
+ - **토큰 자동 관리**: OAuth 토큰 발급 및 갱신을 자동으로 처리하여 인증 관리 부담 최소화
42
+ - **타입 안전성**: Pydantic 기반의 타입 검증으로 IDE 친화적이고 안전한 코드 작성 지원
43
+ - **풍부한 예제**: `example/` 폴더에 해외 주식, 선물옵션 각 기능별 실행 가능한 예제 제공
44
+
45
+ ## 설치
46
+
47
+ ```bash
48
+ # PyPI에 게시된 경우
49
+ pip install programgarden-finance
50
+
51
+ # Poetry 사용 시 (개발 환경)
52
+ poetry add programgarden-finance
53
+ ```
54
+
55
+ 요구 사항: Python 3.9+
56
+
57
+ ## 빠른 시작
58
+
59
+ ### 1. 토큰 발급
60
+
61
+ LS증권 API를 사용하려면 먼저 OAuth 토큰을 발급받아야 합니다.
62
+
63
+ ```python
64
+ import asyncio
65
+ from programgarden_finance import LS
66
+ from programgarden_finance.ls.oauth.generate_token import GenerateToken
67
+ from programgarden_finance.ls.oauth.generate_token.token.blocks import TokenInBlock
68
+
69
+ async def get_token():
70
+ response = GenerateToken().token(
71
+ TokenInBlock(
72
+ appkey="YOUR_APPKEY",
73
+ appsecretkey="YOUR_APPSECRET",
74
+ )
75
+ )
76
+ result = await response.req_async()
77
+ print(f"Access Token: {result.block.access_token}")
78
+
79
+ asyncio.run(get_token())
80
+ ```
81
+
82
+ ### 2. 해외 주식 현재가 조회
83
+
84
+ ```python
85
+ import asyncio
86
+ import os
87
+ from programgarden_finance import LS, g3101
88
+ from programgarden_core import pg_logger
89
+ from dotenv import load_dotenv
90
+
91
+ load_dotenv()
92
+
93
+ async def get_stock_price():
94
+ ls = LS()
95
+
96
+ # 로그인
97
+ if not ls.login(
98
+ appkey=os.getenv("APPKEY"),
99
+ appsecretkey=os.getenv("APPSECRET")
100
+ ):
101
+ pg_logger.error("로그인 실패")
102
+ return
103
+
104
+ # TSLA 현재가 조회
105
+ result = ls.overseas_stock().market().현재가조회(
106
+ g3101.G3101InBlock(
107
+ delaygb="R",
108
+ keysymbol="82TSLA",
109
+ exchcd="82",
110
+ symbol="TSLA"
111
+ )
112
+ )
113
+
114
+ response = await result.req_async()
115
+ pg_logger.debug(f"TSLA 현재가: {response}")
116
+
117
+ asyncio.run(get_stock_price())
118
+ ```
119
+
120
+ ### 3. 실시간 시세 구독 (WebSocket)
121
+
122
+ ```python
123
+ import asyncio
124
+ import os
125
+ from programgarden_finance import LS
126
+ from programgarden_core import pg_logger
127
+ from dotenv import load_dotenv
128
+
129
+ load_dotenv()
130
+
131
+ async def subscribe_realtime():
132
+ ls = LS()
133
+
134
+ if not ls.login(
135
+ appkey=os.getenv("APPKEY"),
136
+ appsecretkey=os.getenv("APPSECRET")
137
+ ):
138
+ pg_logger.error("로그인 실패")
139
+ return
140
+
141
+ # 실시간 데이터 콜백
142
+ def on_message(resp):
143
+ print(f"실시간 데이터: {resp}")
144
+
145
+ # WebSocket 연결
146
+ client = ls.overseas_stock().real()
147
+ await client.connect()
148
+
149
+ # GSC(해외주식 실시간 시세) 구독
150
+ gsc = client.GSC()
151
+ gsc.add_gsc_symbols(symbols=["81SOXL", "82TSLA"])
152
+ gsc.on_gsc_message(on_message)
153
+
154
+ asyncio.run(subscribe_realtime())
155
+ ```
156
+
157
+ ### 4. 해외 선물옵션 마스터 조회
158
+
159
+ ```python
160
+ import asyncio
161
+ import os
162
+ from programgarden_finance import LS, o3101
163
+ from programgarden_core import pg_logger
164
+ from dotenv import load_dotenv
165
+
166
+ load_dotenv()
167
+
168
+ async def get_futures_master():
169
+ ls = LS()
170
+
171
+ if not ls.login(
172
+ appkey=os.getenv("APPKEY_FUTURE"),
173
+ appsecretkey=os.getenv("APPSECRET_FUTURE")
174
+ ):
175
+ pg_logger.error("로그인 실패")
176
+ return
177
+
178
+ # 해외선물 마스터 조회
179
+ result = ls.overseas_futureoption().market().해외선물마스터조회(
180
+ body=o3101.O3101InBlock(gubun="1")
181
+ )
182
+
183
+ response = await result.req_async()
184
+ print(response)
185
+
186
+ asyncio.run(get_futures_master())
187
+ ```
188
+
189
+ ## 주요 모듈 구조
190
+
191
+ ### LS 클래스
192
+ LS증권 API의 진입점이 되는 메인 클래스입니다.
193
+
194
+ ```python
195
+ from programgarden_finance import LS
196
+
197
+ ls = LS()
198
+ ls.login(appkey="...", appsecretkey="...")
199
+
200
+ # 해외 주식 API
201
+ stock = ls.overseas_stock()
202
+ stock.market() # 시장 정보 조회
203
+ stock.chart() # 차트 데이터 조회
204
+ stock.accno() # 계좌 정보 조회
205
+ stock.order() # 주문 처리
206
+ stock.real() # 실시간 데이터
207
+
208
+ # 해외 선물옵션 API
209
+ futures = ls.overseas_futureoption()
210
+ futures.market() # 시장 정보 조회
211
+ futures.chart() # 차트 데이터 조회
212
+ futures.accno() # 계좌 정보 조회
213
+ futures.order() # 주문 처리
214
+ futures.real() # 실시간 데이터
215
+ ```
216
+
217
+ ### 제공되는 주요 TR 코드
218
+
219
+ #### 해외 주식
220
+ - **시장 정보**: `g3101`(현재가), `g3102`(해외지수), `g3104`(거래소마스터), `g3106`(환율), `g3190`(뉴스)
221
+ - **차트**: `g3103`(일별), `g3202`(분봉), `g3203`(틱봉), `g3204`(시간외)
222
+ - **계좌**: `COSAQ00102`(예수금), `COSAQ01400`(해외잔고), `COSOQ00201`(체결내역), `COSOQ02701`(미체결)
223
+ - **주문**: `COSAT00301`(정정주문), `COSAT00311`(신규주문), `COSMT00300`(취소주문), `COSAT00400`(예약주문)
224
+ - **실시간**: `GSC`(체결), `GSH`(호가), `AS0`~`AS4`(각종 실시간 시세)
225
+
226
+ #### 해외 선물옵션
227
+ - **시장 정보**: `o3101`(선물마스터), `o3104`~`o3107`(거래소/통화/가격단위/정산환율), `o3116`(옵션마스터), `o3121`~`o3128`(각종 시장 정보), `o3136`, `o3137`(추가 시장 정보)
228
+ - **차트**: `o3103`(일별), `o3108`(분봉), `o3117`(틱봉), `o3139`(시간외)
229
+ - **계좌**: `CIDBQ01400`(예수금), `CIDBQ01500`(잔고), `CIDBQ01800`(체결내역), `CIDBQ02400`(미체결), `CIDBQ03000`(일별손익), `CIDBQ05300`(청산가능수량), `CIDEQ00800`(예탁증거금)
230
+ - **주문**: `CIDBT00100`(신규), `CIDBT00900`(정정), `CIDBT01000`(취소)
231
+ - **실시간**: `OVC`(체결), `OVH`(호가), `TC1`~`TC3`, `WOC`, `WOH`(각종 실시간 데이터)
232
+
233
+ ## 예제 코드
234
+
235
+ `example/` 폴더에 다양한 실행 가능한 예제가 포함되어 있습니다.
236
+
237
+ ### 예제 폴더 구조
238
+
239
+ ```
240
+ example/
241
+ ├── token/ # OAuth 토큰 발급 예제
242
+ │ └── run_token.py
243
+ ├── overseas_stock/ # 해외 주식 예제
244
+ │ ├── run_g3101.py # 현재가 조회
245
+ │ ├── run_g3102.py # 해외지수 조회
246
+ │ ├── run_COSAT00311.py # 신규주문
247
+ │ ├── real_GSC.py # 실시간 체결 구독
248
+ │ ├── real_GSH.py # 실시간 호가 구독
249
+ │ └── ...
250
+ └── overseas_futureoption/ # 해외 선물옵션 예제
251
+ ├── run_o3101.py # 선물마스터 조회
252
+ ├── run_CIDBT00100.py # 신규주문
253
+ ├── real_OVC.py # 실시간 체결 구독
254
+ ├── real_OVH.py # 실시간 호가 구독
255
+ └── ...
256
+ ```
257
+
258
+ ### 예제 실행 방법
259
+
260
+ 1. `.env` 파일 생성:
261
+ LS증권에서 API 키를 발급 받아서 `.env` 파일에 다음과 같이 설정합니다.
262
+ ```bash
263
+ APPKEY=your_stock_appkey
264
+ APPSECRET=your_stock_appsecret
265
+ APPKEY_FUTURE=your_futures_appkey
266
+ APPSECRET_FUTURE=your_futures_appsecret
267
+ ```
268
+
269
+ 2. 예제 실행:
270
+ ```bash
271
+ # 해외 주식 현재가 조회
272
+ python example/overseas_stock/run_g3101.py
273
+
274
+ # 해외 선물 마스터 조회
275
+ python example/overseas_futureoption/run_o3101.py
276
+
277
+ # 실시간 시세 구독
278
+ python example/overseas_stock/real_GSC.py
279
+ ```
280
+
281
+ ## API 참조
282
+
283
+ 패키지 루트에서 주요 심볼들을 재노출합니다:
284
+
285
+ ```python
286
+ from programgarden_finance import (
287
+ # 메인 클래스
288
+ LS,
289
+
290
+ # 모듈
291
+ oauth,
292
+ TokenManager,
293
+ overseas_stock,
294
+ overseas_futureoption,
295
+
296
+ # 해외 주식 TR
297
+ g3101, g3102, g3103, g3104, g3106, g3190, # 시장/차트
298
+ g3202, g3203, g3204, # 차트
299
+ COSAQ00102, COSAQ01400, # 계좌 조회
300
+ COSOQ00201, COSOQ02701, # 체결/미체결
301
+ COSAT00301, COSAT00311, # 주문
302
+ COSMT00300, COSAT00400, # 취소/예약
303
+ GSC, GSH, AS0, AS1, AS2, AS3, AS4, # 실시간
304
+
305
+ # 해외 선물옵션 TR
306
+ o3101, o3104, o3105, o3106, o3107, # 시장 정보
307
+ o3116, o3121, o3123, o3125, o3126, # 시장 정보
308
+ o3127, o3128, o3136, o3137, # 시장 정보
309
+ o3103, o3108, o3117, o3139, # 차트
310
+ CIDBQ01400, CIDBQ01500, CIDBQ01800, # 계좌
311
+ CIDBQ02400, CIDBQ03000, CIDBQ05300, # 계좌
312
+ CIDEQ00800, # 계좌
313
+ CIDBT00100, CIDBT00900, CIDBT01000, # 주문
314
+ OVC, OVH, TC1, TC2, TC3, WOC, WOH, # 실시간
315
+
316
+ # 예외 처리
317
+ exceptions,
318
+ )
319
+ ```
320
+
@@ -0,0 +1,297 @@
1
+ # Programgarden Finance
2
+
3
+ Programgarden Finance는 AI 시대에 맞춰 파이썬을 모르는 투자자도 개인화된 시스템 트레이딩을 자동으로 수행할 수 있게 돕는 오픈소스입니다. 본 라이브러리는 LS증권 OpenAPI를 간소화하여 해외 주식 및 해외 선물옵션 거래를 쉽게 자동화할 수 있도록 설계되었습니다.
4
+
5
+ 비전공 투자자도 사용하기 쉽도록 설계되었으며, 동시성, 증권 데이터 업데이트 등의 백그라운드 작업은 Program Garden에서 관리하고 있으므로 투자자는 손쉽게 사용만 하면 됩니다.
6
+
7
+ - 문서(비개발자 빠른 시작): https://programgarden.gitbook.io/docs/invest/non_dev_quick_guide
8
+ - 문서(Finance 가이드): https://programgarden.gitbook.io/docs/develop/finance_guide
9
+ - 문서(개발자 구조 안내): https://programgarden.gitbook.io/docs/develop/structure
10
+ - 유튜브: https://www.youtube.com/@programgarden
11
+ - 실시간소통 오픈톡방: https://open.kakao.com/o/gKVObqUh
12
+
13
+ ## 주요 특징
14
+
15
+ - **간편한 LS증권 API 통합**: LS증권 OpenAPI의 복잡한 스펙을 간소화하여 몇 줄의 코드로 시작 가능
16
+ - **해외 주식 & 선물옵션 지원**: 해외 주식 및 해외 선물옵션 시장의 실시간 데이터 조회, 주문, 잔고 관리 등 통합 지원
17
+ - **실시간 WebSocket 스트리밍**: 실시간 시세, 체결, 호가 데이터를 WebSocket으로 간편하게 구독 가능
18
+ - **비동기 처리**: 모든 API 요청은 비동기와 동기로 분리하여 처리해서 높은 성능과 동시성 제공
19
+ - **토큰 자동 관리**: OAuth 토큰 발급 및 갱신을 자동으로 처리하여 인증 관리 부담 최소화
20
+ - **타입 안전성**: Pydantic 기반의 타입 검증으로 IDE 친화적이고 안전한 코드 작성 지원
21
+ - **풍부한 예제**: `example/` 폴더에 해외 주식, 선물옵션 각 기능별 실행 가능한 예제 제공
22
+
23
+ ## 설치
24
+
25
+ ```bash
26
+ # PyPI에 게시된 경우
27
+ pip install programgarden-finance
28
+
29
+ # Poetry 사용 시 (개발 환경)
30
+ poetry add programgarden-finance
31
+ ```
32
+
33
+ 요구 사항: Python 3.9+
34
+
35
+ ## 빠른 시작
36
+
37
+ ### 1. 토큰 발급
38
+
39
+ LS증권 API를 사용하려면 먼저 OAuth 토큰을 발급받아야 합니다.
40
+
41
+ ```python
42
+ import asyncio
43
+ from programgarden_finance import LS
44
+ from programgarden_finance.ls.oauth.generate_token import GenerateToken
45
+ from programgarden_finance.ls.oauth.generate_token.token.blocks import TokenInBlock
46
+
47
+ async def get_token():
48
+ response = GenerateToken().token(
49
+ TokenInBlock(
50
+ appkey="YOUR_APPKEY",
51
+ appsecretkey="YOUR_APPSECRET",
52
+ )
53
+ )
54
+ result = await response.req_async()
55
+ print(f"Access Token: {result.block.access_token}")
56
+
57
+ asyncio.run(get_token())
58
+ ```
59
+
60
+ ### 2. 해외 주식 현재가 조회
61
+
62
+ ```python
63
+ import asyncio
64
+ import os
65
+ from programgarden_finance import LS, g3101
66
+ from programgarden_core import pg_logger
67
+ from dotenv import load_dotenv
68
+
69
+ load_dotenv()
70
+
71
+ async def get_stock_price():
72
+ ls = LS()
73
+
74
+ # 로그인
75
+ if not ls.login(
76
+ appkey=os.getenv("APPKEY"),
77
+ appsecretkey=os.getenv("APPSECRET")
78
+ ):
79
+ pg_logger.error("로그인 실패")
80
+ return
81
+
82
+ # TSLA 현재가 조회
83
+ result = ls.overseas_stock().market().현재가조회(
84
+ g3101.G3101InBlock(
85
+ delaygb="R",
86
+ keysymbol="82TSLA",
87
+ exchcd="82",
88
+ symbol="TSLA"
89
+ )
90
+ )
91
+
92
+ response = await result.req_async()
93
+ pg_logger.debug(f"TSLA 현재가: {response}")
94
+
95
+ asyncio.run(get_stock_price())
96
+ ```
97
+
98
+ ### 3. 실시간 시세 구독 (WebSocket)
99
+
100
+ ```python
101
+ import asyncio
102
+ import os
103
+ from programgarden_finance import LS
104
+ from programgarden_core import pg_logger
105
+ from dotenv import load_dotenv
106
+
107
+ load_dotenv()
108
+
109
+ async def subscribe_realtime():
110
+ ls = LS()
111
+
112
+ if not ls.login(
113
+ appkey=os.getenv("APPKEY"),
114
+ appsecretkey=os.getenv("APPSECRET")
115
+ ):
116
+ pg_logger.error("로그인 실패")
117
+ return
118
+
119
+ # 실시간 데이터 콜백
120
+ def on_message(resp):
121
+ print(f"실시간 데이터: {resp}")
122
+
123
+ # WebSocket 연결
124
+ client = ls.overseas_stock().real()
125
+ await client.connect()
126
+
127
+ # GSC(해외주식 실시간 시세) 구독
128
+ gsc = client.GSC()
129
+ gsc.add_gsc_symbols(symbols=["81SOXL", "82TSLA"])
130
+ gsc.on_gsc_message(on_message)
131
+
132
+ asyncio.run(subscribe_realtime())
133
+ ```
134
+
135
+ ### 4. 해외 선물옵션 마스터 조회
136
+
137
+ ```python
138
+ import asyncio
139
+ import os
140
+ from programgarden_finance import LS, o3101
141
+ from programgarden_core import pg_logger
142
+ from dotenv import load_dotenv
143
+
144
+ load_dotenv()
145
+
146
+ async def get_futures_master():
147
+ ls = LS()
148
+
149
+ if not ls.login(
150
+ appkey=os.getenv("APPKEY_FUTURE"),
151
+ appsecretkey=os.getenv("APPSECRET_FUTURE")
152
+ ):
153
+ pg_logger.error("로그인 실패")
154
+ return
155
+
156
+ # 해외선물 마스터 조회
157
+ result = ls.overseas_futureoption().market().해외선물마스터조회(
158
+ body=o3101.O3101InBlock(gubun="1")
159
+ )
160
+
161
+ response = await result.req_async()
162
+ print(response)
163
+
164
+ asyncio.run(get_futures_master())
165
+ ```
166
+
167
+ ## 주요 모듈 구조
168
+
169
+ ### LS 클래스
170
+ LS증권 API의 진입점이 되는 메인 클래스입니다.
171
+
172
+ ```python
173
+ from programgarden_finance import LS
174
+
175
+ ls = LS()
176
+ ls.login(appkey="...", appsecretkey="...")
177
+
178
+ # 해외 주식 API
179
+ stock = ls.overseas_stock()
180
+ stock.market() # 시장 정보 조회
181
+ stock.chart() # 차트 데이터 조회
182
+ stock.accno() # 계좌 정보 조회
183
+ stock.order() # 주문 처리
184
+ stock.real() # 실시간 데이터
185
+
186
+ # 해외 선물옵션 API
187
+ futures = ls.overseas_futureoption()
188
+ futures.market() # 시장 정보 조회
189
+ futures.chart() # 차트 데이터 조회
190
+ futures.accno() # 계좌 정보 조회
191
+ futures.order() # 주문 처리
192
+ futures.real() # 실시간 데이터
193
+ ```
194
+
195
+ ### 제공되는 주요 TR 코드
196
+
197
+ #### 해외 주식
198
+ - **시장 정보**: `g3101`(현재가), `g3102`(해외지수), `g3104`(거래소마스터), `g3106`(환율), `g3190`(뉴스)
199
+ - **차트**: `g3103`(일별), `g3202`(분봉), `g3203`(틱봉), `g3204`(시간외)
200
+ - **계좌**: `COSAQ00102`(예수금), `COSAQ01400`(해외잔고), `COSOQ00201`(체결내역), `COSOQ02701`(미체결)
201
+ - **주문**: `COSAT00301`(정정주문), `COSAT00311`(신규주문), `COSMT00300`(취소주문), `COSAT00400`(예약주문)
202
+ - **실시간**: `GSC`(체결), `GSH`(호가), `AS0`~`AS4`(각종 실시간 시세)
203
+
204
+ #### 해외 선물옵션
205
+ - **시장 정보**: `o3101`(선물마스터), `o3104`~`o3107`(거래소/통화/가격단위/정산환율), `o3116`(옵션마스터), `o3121`~`o3128`(각종 시장 정보), `o3136`, `o3137`(추가 시장 정보)
206
+ - **차트**: `o3103`(일별), `o3108`(분봉), `o3117`(틱봉), `o3139`(시간외)
207
+ - **계좌**: `CIDBQ01400`(예수금), `CIDBQ01500`(잔고), `CIDBQ01800`(체결내역), `CIDBQ02400`(미체결), `CIDBQ03000`(일별손익), `CIDBQ05300`(청산가능수량), `CIDEQ00800`(예탁증거금)
208
+ - **주문**: `CIDBT00100`(신규), `CIDBT00900`(정정), `CIDBT01000`(취소)
209
+ - **실시간**: `OVC`(체결), `OVH`(호가), `TC1`~`TC3`, `WOC`, `WOH`(각종 실시간 데이터)
210
+
211
+ ## 예제 코드
212
+
213
+ `example/` 폴더에 다양한 실행 가능한 예제가 포함되어 있습니다.
214
+
215
+ ### 예제 폴더 구조
216
+
217
+ ```
218
+ example/
219
+ ├── token/ # OAuth 토큰 발급 예제
220
+ │ └── run_token.py
221
+ ├── overseas_stock/ # 해외 주식 예제
222
+ │ ├── run_g3101.py # 현재가 조회
223
+ │ ├── run_g3102.py # 해외지수 조회
224
+ │ ├── run_COSAT00311.py # 신규주문
225
+ │ ├── real_GSC.py # 실시간 체결 구독
226
+ │ ├── real_GSH.py # 실시간 호가 구독
227
+ │ └── ...
228
+ └── overseas_futureoption/ # 해외 선물옵션 예제
229
+ ├── run_o3101.py # 선물마스터 조회
230
+ ├── run_CIDBT00100.py # 신규주문
231
+ ├── real_OVC.py # 실시간 체결 구독
232
+ ├── real_OVH.py # 실시간 호가 구독
233
+ └── ...
234
+ ```
235
+
236
+ ### 예제 실행 방법
237
+
238
+ 1. `.env` 파일 생성:
239
+ LS증권에서 API 키를 발급 받아서 `.env` 파일에 다음과 같이 설정합니다.
240
+ ```bash
241
+ APPKEY=your_stock_appkey
242
+ APPSECRET=your_stock_appsecret
243
+ APPKEY_FUTURE=your_futures_appkey
244
+ APPSECRET_FUTURE=your_futures_appsecret
245
+ ```
246
+
247
+ 2. 예제 실행:
248
+ ```bash
249
+ # 해외 주식 현재가 조회
250
+ python example/overseas_stock/run_g3101.py
251
+
252
+ # 해외 선물 마스터 조회
253
+ python example/overseas_futureoption/run_o3101.py
254
+
255
+ # 실시간 시세 구독
256
+ python example/overseas_stock/real_GSC.py
257
+ ```
258
+
259
+ ## API 참조
260
+
261
+ 패키지 루트에서 주요 심볼들을 재노출합니다:
262
+
263
+ ```python
264
+ from programgarden_finance import (
265
+ # 메인 클래스
266
+ LS,
267
+
268
+ # 모듈
269
+ oauth,
270
+ TokenManager,
271
+ overseas_stock,
272
+ overseas_futureoption,
273
+
274
+ # 해외 주식 TR
275
+ g3101, g3102, g3103, g3104, g3106, g3190, # 시장/차트
276
+ g3202, g3203, g3204, # 차트
277
+ COSAQ00102, COSAQ01400, # 계좌 조회
278
+ COSOQ00201, COSOQ02701, # 체결/미체결
279
+ COSAT00301, COSAT00311, # 주문
280
+ COSMT00300, COSAT00400, # 취소/예약
281
+ GSC, GSH, AS0, AS1, AS2, AS3, AS4, # 실시간
282
+
283
+ # 해외 선물옵션 TR
284
+ o3101, o3104, o3105, o3106, o3107, # 시장 정보
285
+ o3116, o3121, o3123, o3125, o3126, # 시장 정보
286
+ o3127, o3128, o3136, o3137, # 시장 정보
287
+ o3103, o3108, o3117, o3139, # 차트
288
+ CIDBQ01400, CIDBQ01500, CIDBQ01800, # 계좌
289
+ CIDBQ02400, CIDBQ03000, CIDBQ05300, # 계좌
290
+ CIDEQ00800, # 계좌
291
+ CIDBT00100, CIDBT00900, CIDBT01000, # 주문
292
+ OVC, OVH, TC1, TC2, TC3, WOC, WOH, # 실시간
293
+
294
+ # 예외 처리
295
+ exceptions,
296
+ )
297
+ ```