programgarden-community 2.2.0__tar.gz → 2.3.1__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_community-2.2.0 → programgarden_community-2.3.1}/PKG-INFO +2 -2
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/nodes/messaging/telegram.py +20 -5
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/pyproject.toml +2 -2
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/nodes/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/nodes/analysis/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/nodes/analysis/performance_report.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/nodes/messaging/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/nodes_registry.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/_position_qty.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/_ta_common.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/adx/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/aroon/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/atr/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/beta_hedge/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/bollinger_bands/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/bollinger_bands/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/breakout_retest/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/calendar_spread/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/calmar_ratio/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/cci/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/cmf/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/cmo/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/connors_rsi/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/contango_backwardation/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/coppock_curve/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/correlation_analysis/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/correlation_guard/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/dcf_fair_value/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/doji/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/drawdown_protection/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/dual_momentum/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/dual_momentum/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/dynamic_stop_loss/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/elder_ray/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/engulfing/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/ev_ebitda_screen/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/fisher_transform/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/golden_ratio/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/graham_number/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/hammer_shooting_star/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/heikin_ashi/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/hurst_exponent/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/ichimoku_cloud/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/kdj/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/kelly_criterion/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/keltner_channel/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/level_touch/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/ma_cross/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/ma_cross/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/macd/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/macd/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/magic_formula/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/market_internals/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/max_position_limit/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/mean_reversion/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/mfi/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/momentum_rank/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/morning_evening_star/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/multi_timeframe_confirmation/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/obv/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/pair_trading/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/parabolic_sar/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/partial_take_profit/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/piotroski_f_score/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/pivot_point/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/portfolio_optimizer/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/price_channel/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/profit_target/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/profit_target/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/qqe/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/regime_detection/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/relative_strength/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/risk_parity/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/roll_management/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/rsi/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/rsi/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/rsi_divergence/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/schaff_trend_cycle/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/seasonal_filter/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/sharpe_ratio_monitor/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/sortino_ratio/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/squeeze_momentum/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/stochastic/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/stop_loss/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/stop_loss/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/supertrend/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/support_resistance_levels/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/tactical_asset_allocation/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/three_line_strike/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/time_based_exit/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/time_series_momentum/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/trailing_stop/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/trailing_stop/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/trix/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/turtle_breakout/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/ultimate_oscillator/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/var_cvar_monitor/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/volatility_breakout/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/volatility_position_sizing/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/volume_spike/README.md +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/volume_spike/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/vortex_indicator/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/vwap/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/williams_r/__init__.py +0 -0
- {programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/plugins/z_score/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: programgarden-community
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.1
|
|
4
4
|
Summary: ProgramGarden Community - 전략 플러그인 모음
|
|
5
5
|
License-Expression: AGPL-3.0-or-later
|
|
6
6
|
Author: 프로그램동산
|
|
@@ -18,7 +18,7 @@ Provides-Extra: portfolio
|
|
|
18
18
|
Provides-Extra: quant-all
|
|
19
19
|
Provides-Extra: xlsx
|
|
20
20
|
Requires-Dist: packaging (>=23) ; extra == "portfolio" or extra == "quant-all"
|
|
21
|
-
Requires-Dist: programgarden-core (>=2.
|
|
21
|
+
Requires-Dist: programgarden-core (>=2.5.1,<3.0.0)
|
|
22
22
|
Requires-Dist: pypdf (>=4.0.0)
|
|
23
23
|
Requires-Dist: pyportfolioopt (>=1.6,<2) ; (python_version < "3.15") and (extra == "portfolio" or extra == "quant-all")
|
|
24
24
|
Requires-Dist: quantstats (>=0.0.81,<0.1) ; extra == "perf" or extra == "quant-all"
|
|
@@ -46,7 +46,20 @@ class TelegramNode(BaseMessagingNode):
|
|
|
46
46
|
"""
|
|
47
47
|
|
|
48
48
|
type: Literal["TelegramNode"] = "TelegramNode"
|
|
49
|
-
|
|
49
|
+
|
|
50
|
+
# 연결(자격증명) 선언 — 챗봇/편집기/검증기 공용. 텔레그램 봇 토큰은 발송에 필요하다.
|
|
51
|
+
# missing="ask" (오너 결정 2026-09-28): 봇 토큰이 없으면 챗봇이 먼저 등록을 묻고,
|
|
52
|
+
# 사용자가 "봇 없이 진행" 이라고 명시할 때만 초안으로 저장한다("draft" 의 조용한 자동 초안과 구분).
|
|
53
|
+
_connection: ClassVar[Dict[str, Any]] = {
|
|
54
|
+
"purpose": "notify",
|
|
55
|
+
"need": "run",
|
|
56
|
+
"when": "always",
|
|
57
|
+
"label_key": "connection.TelegramNode.label",
|
|
58
|
+
"presets": [],
|
|
59
|
+
"missing": "ask",
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
description: str = "Send Telegram messages using a registered bot token and receiving chat ID; the chatbot asks the user to register the bot before build and only saves a key-free draft when the user says to proceed without it."
|
|
50
63
|
|
|
51
64
|
# 노드 아이콘 (텔레그램 로고)
|
|
52
65
|
_img_url: ClassVar[str] = "https://upload.wikimedia.org/wikipedia/commons/8/82/Telegram_logo.svg"
|
|
@@ -221,10 +234,12 @@ class TelegramNode(BaseMessagingNode):
|
|
|
221
234
|
),
|
|
222
235
|
]
|
|
223
236
|
|
|
224
|
-
_version: ClassVar[str] = "1.
|
|
225
|
-
_updated_at: ClassVar[str] = "2026-
|
|
226
|
-
_change_note: ClassVar[Optional[str]] =
|
|
227
|
-
|
|
237
|
+
_version: ClassVar[str] = "1.1.0"
|
|
238
|
+
_updated_at: ClassVar[str] = "2026-09-28"
|
|
239
|
+
_change_note: ClassVar[Optional[str]] = (
|
|
240
|
+
"connection.missing='ask' — chatbot asks the user to register the Telegram bot before build"
|
|
241
|
+
)
|
|
242
|
+
|
|
228
243
|
@classmethod
|
|
229
244
|
def get_field_schema(cls) -> Dict[str, "FieldSchema"]:
|
|
230
245
|
"""
|
|
@@ -5,7 +5,7 @@ authors = [
|
|
|
5
5
|
homepage = "https://programgarden.com"
|
|
6
6
|
requires-python = ">=3.12"
|
|
7
7
|
name = "programgarden-community"
|
|
8
|
-
version = "2.
|
|
8
|
+
version = "2.3.1"
|
|
9
9
|
license = "AGPL-3.0-or-later"
|
|
10
10
|
description = "ProgramGarden Community - 전략 플러그인 모음"
|
|
11
11
|
readme = "README.md"
|
|
@@ -16,7 +16,7 @@ packages = [
|
|
|
16
16
|
]
|
|
17
17
|
|
|
18
18
|
[tool.poetry.dependencies]
|
|
19
|
-
programgarden-core = "^2.
|
|
19
|
+
programgarden-core = "^2.5.1"
|
|
20
20
|
pypdf = ">=4.0.0"
|
|
21
21
|
# Optional heavy quant deps (extras). 3.14 wheels validated (plan §1.3).
|
|
22
22
|
# Only pyportfolioopt carries a python<3.15 marker to fence scikit-base (hard-capped
|
|
File without changes
|
{programgarden_community-2.2.0 → programgarden_community-2.3.1}/programgarden_community/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|