programgarden-core 1.28.2__tar.gz → 1.29.0__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.
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/PKG-INFO +9 -1
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/README.md +8 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/listener.py +3 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/workflow.py +39 -1
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/broker.py +4 -3
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/pyproject.toml +1 -1
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/client.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/components.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/mixins.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/products.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/sql.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/storage.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/code_node.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/exceptions.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/expression/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/expression/evaluator.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/i18n/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/i18n/locales/en.json +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/i18n/locales/ko.json +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/i18n/translator.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/korea_alias.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/connection_rule.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/credential.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/edge.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/event.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/exchange.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/field_binding.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/job.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/order_diagnostics.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/plugin_resource.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/resilience.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/resource.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/validation.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/account_futures.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/account_korea_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/account_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/ai.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/backtest.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/backtest_futures.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/backtest_korea_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/backtest_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/base.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/calculation.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/code.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/condition.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/data.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/data_futures.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/data_korea_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/data_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/display.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/event.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/fundamental_korea_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/fundamental_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/infra.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/market_external.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/market_status.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/open_orders_futures.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/open_orders_korea_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/open_orders_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/order.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/portfolio.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/realtime_futures.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/realtime_korea_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/realtime_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/risk.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/symbol.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/symbol_futures.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/symbol_korea_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/symbol_stock.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/trigger.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/news_analyst.json +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/risk_manager.json +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/strategist.json +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/technical_analyst.json +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/registry/__init__.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/registry/credential_registry.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/registry/node_registry.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/registry/plugin_registry.py +0 -0
- {programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/retry_executor.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: programgarden-core
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.29.0
|
|
4
4
|
Summary: ProgramGarden Core - 노드 기반 DSL 핵심 타입 정의
|
|
5
5
|
License-Expression: AGPL-3.0-or-later
|
|
6
6
|
Author: 프로그램동산
|
|
@@ -123,3 +123,11 @@ unknown currency stays null. Futures monetary values and portfolio MDD require
|
|
|
123
123
|
accounting evidence absent from this ledger and remain null. Consumers must
|
|
124
124
|
preserve null/status and use the latest cumulative observation, not sum dates.
|
|
125
125
|
|
|
126
|
+
## Workflow account boundary
|
|
127
|
+
|
|
128
|
+
Each workflow allows one account and one product through at most one broker
|
|
129
|
+
connection. Additional connections produce `DUPLICATE_BROKER_NODE`, including
|
|
130
|
+
unbound or cross-product nodes. Reuse one broker for all consumers. Account-free
|
|
131
|
+
workflows and unrelated credentials remain supported. See
|
|
132
|
+
[the shared contract](../../docs/workflow_account_policy.md).
|
|
133
|
+
|
|
@@ -107,3 +107,11 @@ Stock realized amounts are stored long-only FIFO gross values excluding fees;
|
|
|
107
107
|
unknown currency stays null. Futures monetary values and portfolio MDD require
|
|
108
108
|
accounting evidence absent from this ledger and remain null. Consumers must
|
|
109
109
|
preserve null/status and use the latest cumulative observation, not sum dates.
|
|
110
|
+
|
|
111
|
+
## Workflow account boundary
|
|
112
|
+
|
|
113
|
+
Each workflow allows one account and one product through at most one broker
|
|
114
|
+
connection. Additional connections produce `DUPLICATE_BROKER_NODE`, including
|
|
115
|
+
unbound or cross-product nodes. Reuse one broker for all consumers. Account-free
|
|
116
|
+
workflows and unrelated credentials remain supported. See
|
|
117
|
+
[the shared contract](../../docs/workflow_account_policy.md).
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/listener.py
RENAMED
|
@@ -412,6 +412,9 @@ class WorkflowPnLEvent:
|
|
|
412
412
|
# Open-position money, independent of closed-trade personal metrics.
|
|
413
413
|
account_valuation: Optional[Dict[str, Any]] = None
|
|
414
414
|
workflow_valuation: Optional[Dict[str, Any]] = None
|
|
415
|
+
# Dated account assets/flows, separate from workflow holdings or official scoring.
|
|
416
|
+
account_snapshot: Optional[Dict[str, Any]] = None
|
|
417
|
+
account_daily_snapshots: Optional[Dict[str, Any]] = None
|
|
415
418
|
|
|
416
419
|
|
|
417
420
|
# ============================================================
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/workflow.py
RENAMED
|
@@ -13,6 +13,44 @@ from programgarden_core.models.edge import Edge
|
|
|
13
13
|
from programgarden_core.models.resource import ResourceLimits
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
def validate_broker_connections(nodes: List[Dict[str, Any]]) -> List["ErrorInfo"]:
|
|
17
|
+
"""Allow at most one account/product connection, including unbound brokers.
|
|
18
|
+
|
|
19
|
+
Inspect registered connection ports so aliases and custom broker node types
|
|
20
|
+
use the same rule. Reusing one connection through multiple edges is allowed;
|
|
21
|
+
account-free workflows and unrelated credential types remain unaffected.
|
|
22
|
+
"""
|
|
23
|
+
from programgarden_core.registry import NodeTypeRegistry
|
|
24
|
+
from programgarden_core.models.validation import ErrorCode, ErrorLocation, build_error
|
|
25
|
+
|
|
26
|
+
registry = NodeTypeRegistry()
|
|
27
|
+
brokers = []
|
|
28
|
+
for node in nodes:
|
|
29
|
+
schema = registry.get_schema(node.get("type"))
|
|
30
|
+
if schema and any(port.get("type") == "broker_connection" for port in schema.outputs):
|
|
31
|
+
brokers.append(node)
|
|
32
|
+
if len(brokers) <= 1:
|
|
33
|
+
return []
|
|
34
|
+
|
|
35
|
+
broker_ids = [node.get("id") for node in brokers]
|
|
36
|
+
return [
|
|
37
|
+
build_error(
|
|
38
|
+
ErrorCode.DUPLICATE_BROKER_NODE,
|
|
39
|
+
"Duplicate broker connection: a workflow allows only one account and one product",
|
|
40
|
+
location=ErrorLocation(node_id=node.get("id"), node_type=node.get("type")),
|
|
41
|
+
suggestion=(
|
|
42
|
+
"Reuse the existing broker node for every consumer. Create a separate "
|
|
43
|
+
"workflow for another account or product; do not add another broker."
|
|
44
|
+
),
|
|
45
|
+
details={
|
|
46
|
+
"existing": broker_ids[0], "duplicate": node.get("id"),
|
|
47
|
+
"broker_node_ids": broker_ids, "max_broker_connections": 1,
|
|
48
|
+
},
|
|
49
|
+
)
|
|
50
|
+
for node in brokers[1:]
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
|
|
16
54
|
class InputType(str, Enum):
|
|
17
55
|
"""워크플로우 입력 타입"""
|
|
18
56
|
|
|
@@ -220,7 +258,7 @@ class WorkflowDefinition(BaseModel):
|
|
|
220
258
|
build_error,
|
|
221
259
|
)
|
|
222
260
|
|
|
223
|
-
errors: List[ErrorInfo] =
|
|
261
|
+
errors: List[ErrorInfo] = validate_broker_connections(self.nodes)
|
|
224
262
|
|
|
225
263
|
# 1. Duplicate node IDs
|
|
226
264
|
node_ids = self.get_node_ids()
|
|
@@ -111,7 +111,7 @@ class OverseasStockBrokerNode(BaseBrokerNode):
|
|
|
111
111
|
{
|
|
112
112
|
"pattern": "Wiring a single broker across overseas_stock and overseas_futures nodes",
|
|
113
113
|
"reason": "Product scope is a hard separator — overseas_futures nodes ignore stock-broker connections and the executor's auto-inject picks the wrong credential.",
|
|
114
|
-
"alternative": "
|
|
114
|
+
"alternative": "Use a separate workflow for overseas futures. Each workflow allows only one account and one product; reuse its existing broker node.",
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
"pattern": "Omitting OverseasStockBrokerNode when using overseas_stock nodes",
|
|
@@ -207,7 +207,7 @@ class OverseasStockBrokerNode(BaseBrokerNode):
|
|
|
207
207
|
],
|
|
208
208
|
"pitfalls": [
|
|
209
209
|
"paper_trading must be false — overseas_stock has no LS-Sec paper trading channel",
|
|
210
|
-
"
|
|
210
|
+
"A workflow allows at most one broker connection across all products and accounts, including unbound nodes; reuse that node for all consumers",
|
|
211
211
|
"Credential type must be `broker_ls_overseas_stock` exactly; `broker_ls_overseas_futureoption` will not match",
|
|
212
212
|
],
|
|
213
213
|
}
|
|
@@ -367,7 +367,7 @@ class OverseasFuturesBrokerNode(BaseBrokerNode):
|
|
|
367
367
|
"pitfalls": [
|
|
368
368
|
"Credential type must be `broker_ls_overseas_futureoption`",
|
|
369
369
|
"paper_trading=True is not a full sandbox — some TRs still hit the real datafeed; always double-check order nodes before production",
|
|
370
|
-
"
|
|
370
|
+
"Use one account and one product per workflow. Trade stocks in a separate workflow instead of adding a second broker",
|
|
371
371
|
],
|
|
372
372
|
}
|
|
373
373
|
|
|
@@ -547,6 +547,7 @@ class KoreaStockBrokerNode(BaseBrokerNode):
|
|
|
547
547
|
],
|
|
548
548
|
"pitfalls": [
|
|
549
549
|
"Credential type must be `broker_ls_korea_stock` — overseas credentials will not match even though the fields are identical",
|
|
550
|
+
"Use one account and one product per workflow; reuse this broker for every domestic consumer instead of adding a second connection",
|
|
550
551
|
"Every live order counts — always gate order nodes behind IfNode or ConditionNode when experimenting",
|
|
551
552
|
"Use `dry_run=True` in ExecutionContext for sandbox runs (paper trading is not available at the LS-Sec level)",
|
|
552
553
|
],
|
|
@@ -5,7 +5,7 @@ authors = [
|
|
|
5
5
|
homepage = "https://programgarden.com"
|
|
6
6
|
requires-python = ">=3.12"
|
|
7
7
|
name = "programgarden-core"
|
|
8
|
-
version = "1.
|
|
8
|
+
version = "1.29.0"
|
|
9
9
|
license = "AGPL-3.0-or-later"
|
|
10
10
|
description = "ProgramGarden Core - 노드 기반 DSL 핵심 타입 정의"
|
|
11
11
|
readme = "README.md"
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/components.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/bases/products.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/expression/__init__.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/expression/evaluator.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/i18n/locales/en.json
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/i18n/locales/ko.json
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/i18n/translator.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/__init__.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/connection_rule.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/credential.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/exchange.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/field_binding.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/plugin_resource.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/resilience.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/resource.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/models/validation.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/__init__.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/account_futures.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/account_stock.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/backtest.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/backtest_futures.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/backtest_stock.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/calculation.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/condition.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/data_futures.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/data_korea_stock.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/data_stock.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/market_external.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/market_status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/portfolio.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/realtime_futures.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/realtime_stock.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/symbol_futures.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/nodes/symbol_stock.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/__init__.py
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/news_analyst.json
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/risk_manager.json
RENAMED
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/presets/strategist.json
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/registry/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/registry/node_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{programgarden_core-1.28.2 → programgarden_core-1.29.0}/programgarden_core/retry_executor.py
RENAMED
|
File without changes
|