opencode-pyneruntime 6.6.4__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.
Files changed (261) hide show
  1. opencode_pyneruntime-6.6.4.dist-info/METADATA +281 -0
  2. opencode_pyneruntime-6.6.4.dist-info/RECORD +261 -0
  3. opencode_pyneruntime-6.6.4.dist-info/WHEEL +5 -0
  4. opencode_pyneruntime-6.6.4.dist-info/entry_points.txt +6 -0
  5. opencode_pyneruntime-6.6.4.dist-info/licenses/LICENSE +201 -0
  6. opencode_pyneruntime-6.6.4.dist-info/licenses/NOTICE +21 -0
  7. opencode_pyneruntime-6.6.4.dist-info/top_level.txt +1 -0
  8. pynecore/__init__.py +6 -0
  9. pynecore/cli/__init__.py +2 -0
  10. pynecore/cli/app.py +238 -0
  11. pynecore/cli/commands/__init__.py +343 -0
  12. pynecore/cli/commands/benchmark.py +186 -0
  13. pynecore/cli/commands/compile.py +198 -0
  14. pynecore/cli/commands/data.py +857 -0
  15. pynecore/cli/commands/debug.py +63 -0
  16. pynecore/cli/commands/optimize.py +956 -0
  17. pynecore/cli/commands/plugin.py +242 -0
  18. pynecore/cli/commands/run.py +2006 -0
  19. pynecore/cli/pluggable.py +132 -0
  20. pynecore/cli/utils/__init__.py +0 -0
  21. pynecore/cli/utils/api_error_handler.py +168 -0
  22. pynecore/cli/utils/broker_picker.py +330 -0
  23. pynecore/cli/utils/error_hook.py +28 -0
  24. pynecore/cli/utils/keyreader.py +178 -0
  25. pynecore/cli/utils/provider_picker.py +19 -0
  26. pynecore/cli/utils/symbol_browser.py +1149 -0
  27. pynecore/core/__init__.py +0 -0
  28. pynecore/core/aggregator.py +257 -0
  29. pynecore/core/bar_magnifier.py +168 -0
  30. pynecore/core/broker/__init__.py +64 -0
  31. pynecore/core/broker/defaults.py +113 -0
  32. pynecore/core/broker/disappearance.py +927 -0
  33. pynecore/core/broker/emulator.py +345 -0
  34. pynecore/core/broker/exceptions.py +346 -0
  35. pynecore/core/broker/idempotency.py +401 -0
  36. pynecore/core/broker/intent_builder.py +334 -0
  37. pynecore/core/broker/journal.py +1785 -0
  38. pynecore/core/broker/models.py +1600 -0
  39. pynecore/core/broker/native_failsafe_manager.py +1436 -0
  40. pynecore/core/broker/one_way_emulator.py +1128 -0
  41. pynecore/core/broker/position.py +787 -0
  42. pynecore/core/broker/run_identity.py +126 -0
  43. pynecore/core/broker/software_entry_stop_engine.py +351 -0
  44. pynecore/core/broker/software_partial_bracket_engine.py +1379 -0
  45. pynecore/core/broker/spot_inventory.py +1327 -0
  46. pynecore/core/broker/storage.py +2655 -0
  47. pynecore/core/broker/store_helpers.py +2161 -0
  48. pynecore/core/broker/sync_engine.py +16070 -0
  49. pynecore/core/broker/validation.py +382 -0
  50. pynecore/core/class_property.py +7 -0
  51. pynecore/core/config.py +392 -0
  52. pynecore/core/csv_file.py +547 -0
  53. pynecore/core/currency.py +262 -0
  54. pynecore/core/data_converter.py +1002 -0
  55. pynecore/core/datetime.py +296 -0
  56. pynecore/core/download_info.py +71 -0
  57. pynecore/core/download_runner.py +274 -0
  58. pynecore/core/htf_aggregator.py +181 -0
  59. pynecore/core/import_hook.py +358 -0
  60. pynecore/core/instance_state.py +494 -0
  61. pynecore/core/live_ltf_collector.py +442 -0
  62. pynecore/core/live_ltf_window.py +189 -0
  63. pynecore/core/live_runner.py +1347 -0
  64. pynecore/core/module_property.py +26 -0
  65. pynecore/core/ohlcv_file.py +1888 -0
  66. pynecore/core/overload.py +371 -0
  67. pynecore/core/pine_cast.py +113 -0
  68. pynecore/core/pine_export.py +95 -0
  69. pynecore/core/pine_method.py +244 -0
  70. pynecore/core/pine_range.py +86 -0
  71. pynecore/core/pine_udt.py +69 -0
  72. pynecore/core/plugin/__init__.py +394 -0
  73. pynecore/core/plugin/broker.py +781 -0
  74. pynecore/core/plugin/cli.py +96 -0
  75. pynecore/core/plugin/live_provider.py +208 -0
  76. pynecore/core/plugin/provider.py +331 -0
  77. pynecore/core/provider_string.py +148 -0
  78. pynecore/core/random.py +40 -0
  79. pynecore/core/resampler.py +686 -0
  80. pynecore/core/safe_convert.py +64 -0
  81. pynecore/core/script.py +1011 -0
  82. pynecore/core/script_runner.py +3202 -0
  83. pynecore/core/security.py +1749 -0
  84. pynecore/core/security_process.py +1253 -0
  85. pynecore/core/security_shm.py +456 -0
  86. pynecore/core/series.py +417 -0
  87. pynecore/core/strategy_stats.py +669 -0
  88. pynecore/core/symbol_map.py +134 -0
  89. pynecore/core/syminfo.py +505 -0
  90. pynecore/core/viz.py +591 -0
  91. pynecore/lib/__init__.py +1771 -0
  92. pynecore/lib/_fixnan.py +32 -0
  93. pynecore/lib/_math_stateful.py +202 -0
  94. pynecore/lib/_timeframe_change.py +101 -0
  95. pynecore/lib/adjustment.py +6 -0
  96. pynecore/lib/alert.py +39 -0
  97. pynecore/lib/alert.pyi +14 -0
  98. pynecore/lib/array.py +1051 -0
  99. pynecore/lib/barmerge.py +60 -0
  100. pynecore/lib/barstate.py +30 -0
  101. pynecore/lib/box.py +415 -0
  102. pynecore/lib/chart.py +128 -0
  103. pynecore/lib/color.py +152 -0
  104. pynecore/lib/color.pyi +50 -0
  105. pynecore/lib/currency.py +62 -0
  106. pynecore/lib/dayofweek.py +36 -0
  107. pynecore/lib/dayofweek.pyi +18 -0
  108. pynecore/lib/display.py +8 -0
  109. pynecore/lib/dividends.py +9 -0
  110. pynecore/lib/earnings.py +11 -0
  111. pynecore/lib/extend.py +6 -0
  112. pynecore/lib/font.py +5 -0
  113. pynecore/lib/footprint.py +79 -0
  114. pynecore/lib/format.py +11 -0
  115. pynecore/lib/hline.py +67 -0
  116. pynecore/lib/hline.pyi +24 -0
  117. pynecore/lib/label.py +409 -0
  118. pynecore/lib/line.py +433 -0
  119. pynecore/lib/linefill.py +93 -0
  120. pynecore/lib/location.py +11 -0
  121. pynecore/lib/log.py +362 -0
  122. pynecore/lib/map.py +150 -0
  123. pynecore/lib/math.py +385 -0
  124. pynecore/lib/matrix.py +708 -0
  125. pynecore/lib/order.py +8 -0
  126. pynecore/lib/pivotpointtype.py +8 -0
  127. pynecore/lib/plot.py +95 -0
  128. pynecore/lib/plot.pyi +33 -0
  129. pynecore/lib/polyline.py +91 -0
  130. pynecore/lib/position.py +15 -0
  131. pynecore/lib/request.py +281 -0
  132. pynecore/lib/runtime.py +5 -0
  133. pynecore/lib/scale.py +9 -0
  134. pynecore/lib/session.py +267 -0
  135. pynecore/lib/session.pyi +12 -0
  136. pynecore/lib/shape.py +18 -0
  137. pynecore/lib/size.py +12 -0
  138. pynecore/lib/splits.py +4 -0
  139. pynecore/lib/strategy/__init__.py +4778 -0
  140. pynecore/lib/strategy/closedtrades.py +347 -0
  141. pynecore/lib/strategy/closedtrades.pyi +53 -0
  142. pynecore/lib/strategy/commission.py +9 -0
  143. pynecore/lib/strategy/direction.py +9 -0
  144. pynecore/lib/strategy/oca.py +13 -0
  145. pynecore/lib/strategy/opentrades.py +281 -0
  146. pynecore/lib/strategy/opentrades.pyi +49 -0
  147. pynecore/lib/strategy/risk.py +109 -0
  148. pynecore/lib/string.py +649 -0
  149. pynecore/lib/syminfo.py +84 -0
  150. pynecore/lib/ta.py +2230 -0
  151. pynecore/lib/table.py +290 -0
  152. pynecore/lib/text.py +17 -0
  153. pynecore/lib/ticker.py +207 -0
  154. pynecore/lib/timeframe.py +293 -0
  155. pynecore/lib/volume_row.py +67 -0
  156. pynecore/lib/xloc.py +4 -0
  157. pynecore/lib/yloc.py +5 -0
  158. pynecore/providers/__init__.py +0 -0
  159. pynecore/providers/ccxt.py +664 -0
  160. pynecore/providers/replay.py +187 -0
  161. pynecore/pynesys/__init__.py +0 -0
  162. pynecore/pynesys/api.py +498 -0
  163. pynecore/pynesys/compiler.py +112 -0
  164. pynecore/standalone.py +99 -0
  165. pynecore/testing/__init__.py +1 -0
  166. pynecore/testing/broker_lab/__init__.py +41 -0
  167. pynecore/testing/broker_lab/__main__.py +5 -0
  168. pynecore/testing/broker_lab/cli.py +87 -0
  169. pynecore/testing/broker_lab/generate.py +47 -0
  170. pynecore/testing/broker_lab/model.py +84 -0
  171. pynecore/testing/broker_lab/reference.py +645 -0
  172. pynecore/testing/broker_lab/runner.py +372 -0
  173. pynecore/testing/broker_lab/scheduler.py +50 -0
  174. pynecore/testing/broker_lab/subprocess.py +73 -0
  175. pynecore/transformers/__init__.py +0 -0
  176. pynecore/transformers/builtin_shadow.py +136 -0
  177. pynecore/transformers/closure_arguments_transformer.py +428 -0
  178. pynecore/transformers/display_rewrite.py +140 -0
  179. pynecore/transformers/dynamic_default.py +147 -0
  180. pynecore/transformers/function_isolation.py +757 -0
  181. pynecore/transformers/import_lifter.py +61 -0
  182. pynecore/transformers/import_normalizer.py +328 -0
  183. pynecore/transformers/inline_series_hoist.py +178 -0
  184. pynecore/transformers/input_transformer.py +175 -0
  185. pynecore/transformers/lib_series.py +201 -0
  186. pynecore/transformers/locations.py +70 -0
  187. pynecore/transformers/module_properties.json +3387 -0
  188. pynecore/transformers/module_property.py +221 -0
  189. pynecore/transformers/ne_guard.py +70 -0
  190. pynecore/transformers/persistent.py +320 -0
  191. pynecore/transformers/persistent_series.py +76 -0
  192. pynecore/transformers/safe_convert_transformer.py +97 -0
  193. pynecore/transformers/safe_division_transformer.py +95 -0
  194. pynecore/transformers/script_requirements.py +308 -0
  195. pynecore/transformers/security.py +752 -0
  196. pynecore/transformers/security_instantiation.py +274 -0
  197. pynecore/transformers/series.py +275 -0
  198. pynecore/transformers/slot_layout.py +381 -0
  199. pynecore/transformers/type_checking_stripper.py +25 -0
  200. pynecore/transformers/unused_series_detector.py +267 -0
  201. pynecore/types/__init__.py +21 -0
  202. pynecore/types/alert.py +5 -0
  203. pynecore/types/barmerge.py +5 -0
  204. pynecore/types/base.py +39 -0
  205. pynecore/types/box.py +37 -0
  206. pynecore/types/chart.py +17 -0
  207. pynecore/types/color.py +107 -0
  208. pynecore/types/currency.py +5 -0
  209. pynecore/types/datetime.py +6 -0
  210. pynecore/types/display.py +5 -0
  211. pynecore/types/dividends.py +5 -0
  212. pynecore/types/earnings.py +5 -0
  213. pynecore/types/extend.py +5 -0
  214. pynecore/types/font.py +5 -0
  215. pynecore/types/footprint.py +41 -0
  216. pynecore/types/format.py +5 -0
  217. pynecore/types/hline.py +24 -0
  218. pynecore/types/ib_persistent.py +8 -0
  219. pynecore/types/ib_persistent.pyi +10 -0
  220. pynecore/types/label.py +35 -0
  221. pynecore/types/line.py +32 -0
  222. pynecore/types/linefill.py +13 -0
  223. pynecore/types/location.py +5 -0
  224. pynecore/types/matrix.py +999 -0
  225. pynecore/types/na.py +237 -0
  226. pynecore/types/na.pyi +83 -0
  227. pynecore/types/ohlcv.py +12 -0
  228. pynecore/types/order.py +5 -0
  229. pynecore/types/persistent.py +8 -0
  230. pynecore/types/persistent.pyi +13 -0
  231. pynecore/types/pine_types.py +11 -0
  232. pynecore/types/pine_types.pyi +15 -0
  233. pynecore/types/pivotpointtype.py +5 -0
  234. pynecore/types/plot.py +12 -0
  235. pynecore/types/plot_meta.py +60 -0
  236. pynecore/types/polyline.py +40 -0
  237. pynecore/types/position.py +5 -0
  238. pynecore/types/scale.py +5 -0
  239. pynecore/types/script_type.py +15 -0
  240. pynecore/types/series.py +23 -0
  241. pynecore/types/series.pyi +19 -0
  242. pynecore/types/session.py +35 -0
  243. pynecore/types/shape.py +5 -0
  244. pynecore/types/size.py +5 -0
  245. pynecore/types/source.py +33 -0
  246. pynecore/types/splits.py +5 -0
  247. pynecore/types/strategy.py +45 -0
  248. pynecore/types/table.py +87 -0
  249. pynecore/types/text.py +13 -0
  250. pynecore/types/type_checker.py +7 -0
  251. pynecore/types/type_checker.pyi +48 -0
  252. pynecore/types/volume_row.py +36 -0
  253. pynecore/types/weekdays.py +11 -0
  254. pynecore/types/xloc.py +5 -0
  255. pynecore/types/yloc.py +5 -0
  256. pynecore/utils/__init__.py +0 -0
  257. pynecore/utils/file_utils.py +50 -0
  258. pynecore/utils/rich/__init__.py +0 -0
  259. pynecore/utils/rich/date_column.py +25 -0
  260. pynecore/utils/sequence_view.py +92 -0
  261. pynecore/utils/stdlib_checker.py +17 -0
@@ -0,0 +1,21 @@
1
+ from .persistent import Persistent
2
+ from .ib_persistent import IBPersistent, IBPersistentSeries
3
+ from .series import Series, PersistentSeries
4
+ from .na import NA, na_float
5
+ from .pine_types import PyneFloat, PyneInt, PyneStr, PyneBool
6
+
7
+ from .box import Box
8
+ from .chart import ChartPoint
9
+ from .color import Color
10
+ from .footprint import Footprint
11
+ from .currency import Currency
12
+ from .datetime import DayOfWeek
13
+ from .hline import HLine
14
+ from .label import Label
15
+ from .line import Line
16
+ from .linefill import LineFill
17
+ from .polyline import Polyline
18
+ from .table import Table
19
+ from .volume_row import VolumeRow
20
+ from .extend import Extend
21
+ from .matrix import Matrix
@@ -0,0 +1,5 @@
1
+ from .base import StrLiteral
2
+
3
+
4
+ class AlertEnum(StrLiteral):
5
+ ...
@@ -0,0 +1,5 @@
1
+ from ..types.base import IntEnum
2
+
3
+
4
+ class BarMerge(IntEnum):
5
+ ...
pynecore/types/base.py ADDED
@@ -0,0 +1,39 @@
1
+ class IntEnum(int):
2
+ """
3
+ IntEnum class that auto-increments values.
4
+ """
5
+
6
+ def __init_subclass__(cls, start: int = 0, **kwargs):
7
+ super().__init_subclass__(**kwargs)
8
+ cls._counter = start # Each subclass gets its own counter
9
+
10
+ def __new__(cls):
11
+ # Create new object with the current counter value
12
+ value = cls._counter
13
+ cls._counter += 1
14
+ # noinspection PyTypeChecker
15
+ return super().__new__(cls, value)
16
+
17
+
18
+ class StrLiteral(str):
19
+ """
20
+ StrLiteral class to store string literals.
21
+ """
22
+
23
+
24
+ # Monotonic id counter for drawing objects (line/label/box/table/polyline/linefill).
25
+ # Single-threaded runner, so a plain module-level integer needs no locking.
26
+ _vid_counter = 0
27
+
28
+
29
+ def next_vid() -> int:
30
+ """Return the next monotonically increasing drawing-object id."""
31
+ global _vid_counter
32
+ _vid_counter += 1
33
+ return _vid_counter
34
+
35
+
36
+ def reset_vid_counter() -> None:
37
+ """Reset the drawing-object id counter (new run / new script)."""
38
+ global _vid_counter
39
+ _vid_counter = 0
pynecore/types/box.py ADDED
@@ -0,0 +1,37 @@
1
+ from typing import Optional
2
+ from dataclasses import dataclass
3
+
4
+ from ..lib import (color as _color, extend as _extend, xloc as _xloc, size as _size, line as _line,
5
+ text as _text, font as _font)
6
+ from .na import NA
7
+ from .pine_types import PyneFloat, PyneInt
8
+
9
+
10
+ @dataclass(slots=True, eq=False)
11
+ class Box:
12
+ # Required parameters - coordinates (``na`` when set from a chart.point that lacks the
13
+ # corresponding coordinate for the active xloc)
14
+ left: PyneInt # Bar index or UNIX time
15
+ top: PyneFloat # Price of the top border
16
+ right: PyneInt # Bar index or UNIX time
17
+ bottom: PyneFloat # Price of the bottom border
18
+
19
+ # Optional parameters with defaults
20
+ border_color: Optional[_color.Color] = None
21
+ border_width: int = 1
22
+ border_style: Optional[_line.LineEnum] = None
23
+ extend: Optional[_extend.Extend] = None
24
+ xloc: Optional[_xloc.XLoc] = None
25
+ bgcolor: Optional[_color.Color] = None
26
+ text: str = ""
27
+ text_size: Optional[_size.Size] = None
28
+ text_color: Optional[_color.Color] = None
29
+ text_halign: Optional[_text.AlignEnum] = None
30
+ text_valign: Optional[_text.AlignEnum] = None
31
+ text_wrap: Optional[_text.WrapEnum] = None
32
+ text_font_family: Optional[_font.FontFamilyEnum] = None
33
+ text_formatting: Optional[_text.FormatEnum] = None
34
+
35
+ force_overlay: bool = False
36
+
37
+ vid: int = -1
@@ -0,0 +1,17 @@
1
+ from dataclasses import dataclass
2
+
3
+ from .pine_types import PyneFloat, PyneInt
4
+
5
+
6
+ @dataclass(slots=True)
7
+ class ChartPoint:
8
+ # The x-coordinate of the point, expressed as a bar index value (``na`` when the point
9
+ # was created from a time only, e.g. ``chart.point.from_time``)
10
+ index: PyneInt
11
+
12
+ # The x-coordinate of the point, expressed as a UNIX time value, in milliseconds (``na``
13
+ # when the point was created from an index only, e.g. ``chart.point.from_index``)
14
+ time: PyneInt
15
+
16
+ # The y-coordinate of the point
17
+ price: PyneFloat
@@ -0,0 +1,107 @@
1
+ class Color:
2
+ """
3
+ Color class that stores RGBA values in a single 32-bit integer.
4
+ The fmt is 0xRRGGBBAA where each component is 8 bits.
5
+ """
6
+
7
+ __slots__ = ('value',)
8
+
9
+ def __init__(self, hexstr: str) -> None:
10
+ # Remove leading '#' if present
11
+ hexstr = hexstr.lstrip('#').upper()
12
+
13
+ # Add default alpha if not provided
14
+ if len(hexstr) == 6:
15
+ hexstr += 'FF'
16
+
17
+ # Convert hex string to int
18
+ self.value = int(hexstr, 16)
19
+
20
+ def __repr__(self) -> str:
21
+ return f'Color("#{self.value:08X}")'
22
+
23
+ def __lt__(self, other: 'Color') -> bool:
24
+ return self.value < other.value
25
+
26
+ def __eq__(self, other: 'Color') -> bool:
27
+ return self.value == other.value
28
+
29
+ def __hash__(self) -> int:
30
+ # Value-based, consistent with __eq__. Defining __eq__ otherwise sets
31
+ # __hash__ to None (unhashable), which makes a Color an illegal
32
+ # dataclass field default (``@udt`` uses dataclass) and forbids use as a
33
+ # dict key / set member -- both of which Pine colors legitimately need.
34
+ return hash(self.value)
35
+
36
+ @property
37
+ def r(self) -> int:
38
+ """Red component (0-255)"""
39
+ return (self.value >> 24) & 0xFF
40
+
41
+ @property
42
+ def g(self) -> int:
43
+ """Green component (0-255)"""
44
+ return (self.value >> 16) & 0xFF
45
+
46
+ @property
47
+ def b(self) -> int:
48
+ """Blue component (0-255)"""
49
+ return (self.value >> 8) & 0xFF
50
+
51
+ @property
52
+ def a(self) -> int:
53
+ """Alpha component (0-255)"""
54
+ return self.value & 0xFF
55
+
56
+ @a.setter
57
+ def a(self, alpha: int) -> None:
58
+ """
59
+ Set alpha component (0-255)
60
+ 0: fully transparent
61
+ 255: fully opaque
62
+
63
+ :param alpha: Alpha value (0-255)
64
+ """
65
+ if not (0 <= alpha <= 255):
66
+ raise ValueError("Alpha must be between 0 and 255")
67
+ self.value = (self.value & 0xFFFFFF00) | alpha
68
+
69
+ @property
70
+ def t(self) -> float:
71
+ """
72
+ Transparency component (0-100)
73
+ 0: not transparent (fully opaque)
74
+ 100: invisible
75
+ """
76
+ return 100 - (self.value & 0xFF) / 255.0 * 100
77
+
78
+ @t.setter
79
+ def t(self, transp: float) -> None:
80
+ """
81
+ Set transparency component (0-100)
82
+ 0: not transparent (fully opaque)
83
+ 100: invisible
84
+
85
+ :param transp: Transparency percentage (0-100)
86
+ """
87
+ if not (0 <= transp <= 100):
88
+ raise ValueError("Transparency must be between 0 and 100")
89
+ self.value = (self.value & 0xFFFFFF00) | int((1 - transp / 100.0) * 255)
90
+
91
+ @classmethod
92
+ def rgb(cls, r: int, g: int, b: int, transp: float = 0) -> 'Color':
93
+ """
94
+ Create a Color object from RGB values and transparency.
95
+
96
+ :param r: Red component (0-255)
97
+ :param g: Green component (0-255)
98
+ :param b: Blue component (0-255)
99
+ :param transp: Transparency percentage (0-100, 0: not transparent, 100: invisible)
100
+ :return: Color object
101
+ """
102
+ # Pine accepts float channels (e.g. from math.random) and rounds them to
103
+ # the nearest integer, so normalise before the range check / hex format.
104
+ r, g, b = int(round(r)), int(round(g)), int(round(b))
105
+ if not (0 <= r <= 255 and 0 <= g <= 255 and 0 <= b <= 255):
106
+ raise ValueError("RGB values must be between 0 and 255")
107
+ return cls(f'#{r:02X}{g:02X}{b:02X}{int((1 - transp / 100.0) * 255):02X}')
@@ -0,0 +1,5 @@
1
+ from ..types.base import StrLiteral
2
+
3
+
4
+ class Currency(StrLiteral):
5
+ ...
@@ -0,0 +1,6 @@
1
+ from .base import IntEnum
2
+
3
+
4
+ class DayOfWeek(IntEnum, start=1):
5
+ """Pine Script weekday constants: Sun=1, Mon=2, ..., Sat=7."""
6
+ ...
@@ -0,0 +1,5 @@
1
+ from .base import IntEnum
2
+
3
+
4
+ class Display(IntEnum):
5
+ ...
@@ -0,0 +1,5 @@
1
+ from .base import StrLiteral
2
+
3
+
4
+ class Dividends(StrLiteral):
5
+ ...
@@ -0,0 +1,5 @@
1
+ from .base import StrLiteral
2
+
3
+
4
+ class Earnings(StrLiteral):
5
+ ...
@@ -0,0 +1,5 @@
1
+ from .base import StrLiteral
2
+
3
+
4
+ class Extend(StrLiteral):
5
+ ...
pynecore/types/font.py ADDED
@@ -0,0 +1,5 @@
1
+ from ..types.base import StrLiteral
2
+
3
+
4
+ class FontFamilyEnum(StrLiteral):
5
+ ...
@@ -0,0 +1,41 @@
1
+ from dataclasses import dataclass
2
+
3
+ from .volume_row import VolumeRow
4
+
5
+
6
+ @dataclass(slots=True)
7
+ class Footprint:
8
+ """
9
+ Stores volume footprint data for a bar, including total buy/sell volume,
10
+ delta, and key price level rows (VAH, VAL, POC).
11
+
12
+ Obtained via ``request.footprint()``.
13
+ """
14
+
15
+ def buy_volume(self) -> float:
16
+ """Total buy volume for the bar."""
17
+ raise NotImplementedError("Footprint.buy_volume() is not yet implemented in PyneCore")
18
+
19
+ def sell_volume(self) -> float:
20
+ """Total sell volume for the bar."""
21
+ raise NotImplementedError("Footprint.sell_volume() is not yet implemented in PyneCore")
22
+
23
+ def delta(self) -> float:
24
+ """Volume delta (buy - sell) for the bar."""
25
+ raise NotImplementedError("Footprint.delta() is not yet implemented in PyneCore")
26
+
27
+ def total_volume(self) -> float:
28
+ """Total volume (buy + sell) for the bar."""
29
+ raise NotImplementedError("Footprint.total_volume() is not yet implemented in PyneCore")
30
+
31
+ def vah(self) -> VolumeRow:
32
+ """Value Area High row."""
33
+ raise NotImplementedError("Footprint.vah() is not yet implemented in PyneCore")
34
+
35
+ def val(self) -> VolumeRow:
36
+ """Value Area Low row."""
37
+ raise NotImplementedError("Footprint.val() is not yet implemented in PyneCore")
38
+
39
+ def poc(self) -> VolumeRow:
40
+ """Point of Control row."""
41
+ raise NotImplementedError("Footprint.poc() is not yet implemented in PyneCore")
@@ -0,0 +1,5 @@
1
+ from ..types.base import StrLiteral
2
+
3
+
4
+ class Format(StrLiteral):
5
+ ...
@@ -0,0 +1,24 @@
1
+ from dataclasses import dataclass
2
+ from typing import Optional, Union
3
+
4
+ from .base import StrLiteral
5
+ from ..lib import color as _color, display as _display
6
+
7
+
8
+ class HLineEnum(StrLiteral):
9
+ ...
10
+
11
+
12
+ @dataclass(slots=True)
13
+ class HLine:
14
+ # Required parameter
15
+ price: Union[int, float] # Price value at which the object will be rendered
16
+
17
+ # Optional parameters
18
+ title: Optional[str] = None # Title of the object
19
+ color: Optional[_color.Color] = None # Color of the rendered line
20
+ linestyle: Optional[HLineEnum] = None # Style of the rendered line
21
+ linewidth: int = 1 # Width of the rendered line
22
+ editable: bool = True # If true then hline style will be editable in Format dialog
23
+ display: Optional[_display.Display] = None # Controls where the hline is displayed
24
+ id: Optional[str] = None # Registration id assigned by ``hline()``
@@ -0,0 +1,8 @@
1
+ from typing import TypeVar, TypeAlias
2
+ from pynecore.types.na import NA
3
+ from .series import Series
4
+
5
+ T = TypeVar('T')
6
+
7
+ IBPersistent: TypeAlias = T | NA[T] | Series[T]
8
+ IBPersistentSeries: TypeAlias = T | NA[T] | Series[T]
@@ -0,0 +1,10 @@
1
+ """
2
+ Transparent aliases for type checkers, same rationale as persistent.pyi:
3
+ NA-free static view, runtime module unchanged.
4
+ """
5
+ from typing import TypeVar, TypeAlias
6
+
7
+ T = TypeVar('T')
8
+
9
+ IBPersistent: TypeAlias = T
10
+ IBPersistentSeries: TypeAlias = T
@@ -0,0 +1,35 @@
1
+ from dataclasses import dataclass
2
+ from typing import Optional
3
+
4
+ from ..lib import color as _color, xloc as _xloc, yloc as _yloc, size as _size, text as _text, font as _font
5
+ from .base import StrLiteral
6
+ from .na import NA
7
+ from .pine_types import PyneFloat, PyneInt
8
+
9
+
10
+ class LabelStyleEnum(StrLiteral):
11
+ ...
12
+
13
+
14
+ @dataclass(slots=True, eq=False)
15
+ class Label:
16
+ # Required parameters (``na`` when set from a chart.point that lacks the corresponding
17
+ # coordinate for the active xloc)
18
+ x: PyneInt # Bar index or UNIX time
19
+ y: PyneInt | PyneFloat # Price of the label position
20
+ text: str = "" # Label text
21
+
22
+ # Optional parameters with defaults
23
+ xloc: Optional[_xloc.XLoc] = None
24
+ yloc: Optional[_yloc.YLoc] = None
25
+ color: Optional[_color.Color] = None
26
+ style: Optional[LabelStyleEnum] = None
27
+ textcolor: Optional[_color.Color] = None
28
+ size: Optional[_size.Size] = None
29
+ textalign: Optional[_text.AlignEnum] = None
30
+ tooltip: str = ""
31
+ text_font_family: Optional[_font.FontFamilyEnum] = None
32
+ force_overlay: bool = False
33
+ text_formatting: Optional[_text.FormatEnum] = None
34
+
35
+ vid: int = -1
pynecore/types/line.py ADDED
@@ -0,0 +1,32 @@
1
+ from dataclasses import dataclass
2
+ from typing import Optional
3
+
4
+ from ..lib import color as _color, extend as _extend, xloc as _xloc
5
+ from .base import StrLiteral
6
+ from .na import NA
7
+ from .pine_types import PyneFloat, PyneInt
8
+
9
+
10
+ class LineEnum(StrLiteral):
11
+ ...
12
+
13
+
14
+ @dataclass(slots=True, eq=False)
15
+ class Line:
16
+ # Required parameters - coordinates (``na`` when set from a chart.point that lacks the
17
+ # corresponding coordinate for the active xloc)
18
+ x1: PyneInt # Bar index or UNIX time
19
+ y1: PyneFloat # Price of the first point
20
+ x2: PyneInt # Bar index or UNIX time
21
+ y2: PyneFloat # Price of the second point
22
+
23
+ # Optional parameters with defaults
24
+ xloc: Optional[_xloc.XLoc] = None
25
+ extend: Optional[_extend.Extend] = None
26
+ color: Optional[_color.Color] = None
27
+ style: Optional[LineEnum] = None
28
+ width: int = 1
29
+
30
+ force_overlay: bool = False
31
+
32
+ vid: int = -1
@@ -0,0 +1,13 @@
1
+ from dataclasses import dataclass
2
+
3
+ from ..lib import color as _color
4
+ from .line import Line
5
+
6
+
7
+ @dataclass(slots=True, eq=False)
8
+ class LineFill:
9
+ line1: Line # First line object
10
+ line2: Line # Second line object
11
+ color: _color.Color # Fill color
12
+
13
+ vid: int = -1
@@ -0,0 +1,5 @@
1
+ from .base import StrLiteral
2
+
3
+
4
+ class Location(StrLiteral):
5
+ ...