feat: 리밸런싱 엔진 V1 + GAS 버그 수정 (2026-06-13)
주요 변경: - tools/build_rebalance_engine_v1.py: REBALANCE_ENGINE_V1 신규 * account_snapshot 직접 합산(_build_snap_position_map) → 소수주 분리 행 병합 * 레짐 소스 macro.REGIME_PRELIM 최우선 (GAS 와 동일) - src/gas_adapter_parts/gdf_06_rebalance.gs: runRebalanceSheet_() 신규 * Logger.log / getSpreadsheet_() 로 run_all 연동 수정 - src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs * _mergePositionRecord_(): 소수주 중복 행 합산 신규 * parseInt → parseFloat (qty, availQty) - src/gas_adapter_parts/gdf_01_price_metrics.gs * 미보유 종목 SELL_READY → WATCH_EXIT_SIGNAL - spec/41_release_dag.yaml: build_rebalance_sheet 노드 추가 (step_count 63) - spec/51_formula_lifecycle_registry.yaml: REBALANCE_ENGINE_V1 등록 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
formula_id: ACTIVE_ARTIFACT_MANIFEST_V2
|
||||
generated_at: '2026-06-07T09:32:23.434604+00:00'
|
||||
is_active: true
|
||||
supersedes: ACTIVE_ARTIFACT_MANIFEST_V1
|
||||
superseded_by: null
|
||||
input_hash: 296103ac8bf8e1e570838d0a58ec91630cda687b58a59550e80db7b8fb98e28d
|
||||
source_snapshot_hash: 755d17e5bd5211108f9ac872ca42b622d2e1c1bcb7b97219f335b465f0fc8113
|
||||
active_count_per_formula: 1
|
||||
legacy_reference_render_blocked_count: 0
|
||||
report_active_artifact_match_pct: 100.0
|
||||
authority_collision_count: 0
|
||||
stale_artifact_count: 0
|
||||
canonical_source: Temp/final_decision_packet_active.json
|
||||
active_aliases:
|
||||
final_decision_packet_active: Temp/final_decision_packet_active.json
|
||||
source_precedence:
|
||||
- final_decision_packet_active
|
||||
- final_execution_decision_v2
|
||||
- smart_cash_recovery_v7
|
||||
- smart_cash_recovery_v6
|
||||
- smart_cash_recovery_v5
|
||||
- engine_audit_v1
|
||||
- sell_engine_audit_v1
|
||||
report_authority_diff_count: 0
|
||||
single_truth_conflict_count: 0
|
||||
manifest_rows:
|
||||
- formula_id: cash_shortfall_min_krw
|
||||
active_artifact: Temp/final_decision_packet_active.json
|
||||
value: 36092555.0
|
||||
- formula_id: final_execution_gate
|
||||
active_artifact: Temp/final_execution_decision_v2.json
|
||||
value: AUDIT_ONLY
|
||||
- formula_id: prediction_match_rate_pct
|
||||
active_artifact: Temp/prediction_accuracy_harness_v2.json
|
||||
value: 54.76
|
||||
- formula_id: single_truth_ledger
|
||||
active_artifact: Temp/single_truth_ledger_v2.json
|
||||
value: Temp/final_decision_packet_active.json
|
||||
- formula_id: canonical_artifact_resolver
|
||||
active_artifact: Temp/canonical_artifact_resolver_v1.json
|
||||
value: Temp/smart_cash_recovery_v7.json
|
||||
- formula_id: smart_cash_recovery_v7
|
||||
active_artifact: Temp/smart_cash_recovery_v9.json
|
||||
value: 57841575
|
||||
@@ -0,0 +1,39 @@
|
||||
formula_id: AUDIT_REPOSITORY_ENTROPY_V1
|
||||
status: OK
|
||||
created_at: '2026-06-07T02:37:49+09:00'
|
||||
root: C:\Temp\data_feed
|
||||
source_zip_sha256: f5ce3c4c7f5b0f778a6bbcc967b0e764f2032efa809a3442e10d7c5a752b9095
|
||||
total_file_count: 1717
|
||||
top_directory_counts:
|
||||
Temp: 402
|
||||
tools: 316
|
||||
src: 303
|
||||
schemas: 160
|
||||
tests: 159
|
||||
runtime: 154
|
||||
spec: 113
|
||||
artifacts: 35
|
||||
governance: 24
|
||||
.: 16
|
||||
prompts: 9
|
||||
docs: 8
|
||||
examples: 8
|
||||
suggest: 6
|
||||
dist: 3
|
||||
.claude: 1
|
||||
extension_counts:
|
||||
.gs: 7
|
||||
.js: 1
|
||||
.json: 731
|
||||
.jsonl: 2
|
||||
.log: 1
|
||||
.md: 42
|
||||
.ps1: 4
|
||||
.py: 752
|
||||
.pyc: 17
|
||||
.txt: 6
|
||||
.xlsx: 1
|
||||
.yaml: 153
|
||||
package_script_count: 191
|
||||
version_duplicate_group_count: 0
|
||||
changed_files_without_change_request_count: 0
|
||||
@@ -0,0 +1,24 @@
|
||||
active_manifest_rows:
|
||||
- active_artifact: Temp/final_decision_packet_active.json
|
||||
formula_id: cash_shortfall_min_krw
|
||||
value: 36092555.0
|
||||
- active_artifact: Temp/final_execution_decision_v2.json
|
||||
formula_id: final_execution_gate
|
||||
value: AUDIT_ONLY
|
||||
- active_artifact: Temp/prediction_accuracy_harness_v2.json
|
||||
formula_id: prediction_match_rate_pct
|
||||
value: 54.76
|
||||
- active_artifact: Temp/single_truth_ledger_v2.json
|
||||
formula_id: single_truth_ledger
|
||||
value: Temp/final_decision_packet_active.json
|
||||
- active_artifact: Temp/canonical_artifact_resolver_v1.json
|
||||
formula_id: canonical_artifact_resolver
|
||||
value: Temp/smart_cash_recovery_v7.json
|
||||
- active_artifact: Temp/smart_cash_recovery_v7.json
|
||||
formula_id: smart_cash_recovery_v7
|
||||
value: 57841575
|
||||
canonical_metrics_hash: e3307a34227e13ade1f078e62302ca4bd6ca64ed0a6343eaabbe3ffc3c1ad657
|
||||
formula_id: REFACTOR_BASELINE_MANIFEST_V2
|
||||
lock_temp_edits: true
|
||||
source_zip_sha256: c8d214d3c880392b176c26947367d832a55fd9f4a107bad69c7f272cd4c6b01e
|
||||
total_files: 1456
|
||||
@@ -0,0 +1,281 @@
|
||||
schema_version: gas_migration_wave1.v1
|
||||
generated_at: '2026-06-10'
|
||||
playbook_ref: suggest/quant_engine_refactor_playbook_v1.yaml#P5-T01
|
||||
total_findings: 103
|
||||
wave: 1
|
||||
wave_size: 25
|
||||
remaining_waves: 4
|
||||
wave1_status: IN_PROGRESS
|
||||
|
||||
classification_guide:
|
||||
ADAPTER_OK: GAS reads Python-computed value and passes to sheet/next step. No business logic.
|
||||
MIGRATE_TO_PYTHON: GAS computes a score/decision that should live in Python.
|
||||
DELETE_DUPLICATE: Logic already exists in Python; GAS version is redundant.
|
||||
COMMENT_FALSE_POSITIVE: Comment or doc line flagged by keyword match, not actual logic.
|
||||
|
||||
wave1_items:
|
||||
- idx: 0
|
||||
file: gas_apex_alpha_watch.gs
|
||||
line: 174
|
||||
text: "macro_risk_score: score,"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling output object from Python-provided score, not computing it.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 1
|
||||
file: gas_apex_alpha_watch.gs
|
||||
line: 223
|
||||
text: "var totalScore = mesResult.macro_risk_score || 0;"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading macro_risk_score from Python MES result JSON.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 2
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 34
|
||||
text: "hApex.macro_risk_score = mesResult.macro_risk_score;"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Passing Python result field through to apex harness struct.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 3
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 103
|
||||
text: "// macro_risk_score (max 100)"
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Comment line describing the field; contains keyword but no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 4
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 153
|
||||
text: "macro_risk_score: macroRiskScore,"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling output packet with Python-derived score.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 5
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 185
|
||||
text: "var macroRiskScore = toNumber_(mes.macro_risk_score) || 0;"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reads Python result; toNumber_ is a type coercion helper, not business logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 6
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 237
|
||||
text: "micro_risk_score: l1,"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling risk level packet from Python-provided values.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 7
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 238
|
||||
text: "macro_risk_score_normalized: l2,"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling risk level packet; normalized value from Python.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 8
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 239
|
||||
text: "global_risk_score: l3,"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling risk level packet from Python-provided values.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 9
|
||||
file: gas_apex_runtime_core.gs
|
||||
line: 240
|
||||
text: "event_risk_score: l4,"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling risk level packet from Python-provided values.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 10
|
||||
file: gas_data_collect.gs
|
||||
line: 1038
|
||||
text: "Number.isFinite(alpha[\"late_chase_risk_score\"]) ? alpha[\"late_chase_risk_score\"]"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading late_chase_risk_score from Python alpha JSON; conditional is null-guard.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 11
|
||||
file: gas_data_collect.gs
|
||||
line: 1068
|
||||
text: '"Volume_Ratio_5D","Flow_Credit","RSI14_At_Entry","Late_Chase_Risk_Score"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list for sheet header; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 12
|
||||
file: gas_data_collect.gs
|
||||
line: 1069
|
||||
text: '"Breakout_Score","Rebound_Preservation_Score","Setup_Decision","Exit_Reason"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list for sheet header; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 13
|
||||
file: gas_data_collect.gs
|
||||
line: 2016
|
||||
text: "// TAKE_PROFIT_LADDER_V1"
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Comment referencing a spec item; no code logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 14
|
||||
file: gas_data_collect.gs
|
||||
line: 2036
|
||||
text: '"Final_Action","Action_Priority","Priority_Score","Final_Rank","Decision_Source"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list for sheet header; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 15
|
||||
file: gas_data_collect.gs
|
||||
line: 2704
|
||||
text: "// entry sizing, breakout/anti-climax/leader/RW gates,"
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Documentation comment describing Python-computed fields to be collected.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 16
|
||||
file: gas_data_collect.gs
|
||||
line: 2894
|
||||
text: "// TAKE_PROFIT_LADDER_V1"
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Section comment; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 17
|
||||
file: gas_data_collect.gs
|
||||
line: 2986
|
||||
text: "// Decision: F1-F3 timing, sell decision, allowed/final action"
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Section comment; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 18
|
||||
file: gas_data_collect.gs
|
||||
line: 3178
|
||||
text: '"TAKE_PROFIT_TIER1":"TP1 description"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Label map for sheet display; references a Python decision value, not computing it.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 19
|
||||
file: gas_data_collect.gs
|
||||
line: 3502
|
||||
text: '"Candidate_Quality_Grade","T1_Forced_Sell_Risk_Score"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 20
|
||||
file: gas_data_collect.gs
|
||||
line: 3602
|
||||
text: "lateChaseRiskScore: sellRow_ ? sellRow_[\"Late_Chase_Risk_Score\"] : \"\","
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python-computed Late_Chase_Risk_Score from sheet row; null-safe read.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 21
|
||||
file: gas_data_collect.gs
|
||||
line: 3603
|
||||
text: "distributionRiskScore: sellRow_ ? sellRow_[\"Distribution_Risk_Score\"] : \"\","
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python-computed Distribution_Risk_Score from sheet row; null-safe read.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 22
|
||||
file: gas_data_collect.gs
|
||||
line: 3746
|
||||
text: '"Candidate_Quality_Grade","T1_Forced_Sell_Risk_Score"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 23
|
||||
file: gas_data_feed.gs
|
||||
line: 186
|
||||
text: "SP_TAKE_PROFIT: 10, // Profit_Pct >= 10%"
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: Threshold constant defined in GAS; should be in spec/calibration_registry.yaml.
|
||||
python_path: spec/calibration_registry.yaml
|
||||
formula_id: TAKE_PROFIT_LADDER_V2
|
||||
migration_action: Add to calibration_registry.yaml as threshold id=SP_TAKE_PROFIT value=10 source=SPEC_DERIVED.
|
||||
|
||||
- idx: 24
|
||||
file: gas_data_feed.gs
|
||||
line: 559
|
||||
text: "// sell_signal_priority level 2: REGIME_RISK_OFF (spec/exit/stop_loss.yaml)"
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Comment citing spec file; no business logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
wave2_preview:
|
||||
- idx: 25
|
||||
file: gas_data_feed.gs
|
||||
line: 656
|
||||
tentative_classification: MIGRATE_TO_PYTHON
|
||||
text: "priceBasis = TAKE_PROFIT_TIER2_PRICE fallback"
|
||||
- idx: 55
|
||||
file: gas_data_feed.gs
|
||||
line: 6688
|
||||
tentative_classification: DELETE_DUPLICATE
|
||||
text: "distribution_risk_score = Math.min(100, Math.max(0, score))"
|
||||
- idx: 57
|
||||
file: gas_data_feed.gs
|
||||
line: 6774
|
||||
tentative_classification: DELETE_DUPLICATE
|
||||
text: "late_chase_risk_score = Math.min(100, Math.max(0, Math.round(lateChaseRisk)))"
|
||||
|
||||
wave1_summary:
|
||||
ADAPTER_OK: 17
|
||||
COMMENT_FALSE_POSITIVE: 7
|
||||
MIGRATE_TO_PYTHON: 1
|
||||
DELETE_DUPLICATE: 0
|
||||
total_wave1: 25
|
||||
|
||||
wave1_action_items:
|
||||
- id: SP_TAKE_PROFIT_SPEC_MIGRATION
|
||||
type: SPEC_REGISTRATION
|
||||
file: spec/calibration_registry.yaml
|
||||
action: Register SP_TAKE_PROFIT=10 as threshold_id with source=SPEC_DERIVED, owner_formula=TAKE_PROFIT_LADDER_V2
|
||||
status: TODO
|
||||
|
||||
remaining_findings_classification:
|
||||
note: Wave 2-4 will address the remaining 78 findings
|
||||
high_priority:
|
||||
- gas_data_feed L6688 distribution_risk_score computation (DELETE_DUPLICATE - Python has DISTRIBUTION_RISK_SCORE_V1)
|
||||
- gas_data_feed L6774 late_chase_risk_score computation (DELETE_DUPLICATE - Python has late_chase_risk_score formula)
|
||||
- gas_data_feed L1577 score += THRESHOLDS["SP_TAKE_PROFIT"] (MIGRATE_TO_PYTHON - threshold scoring)
|
||||
- gas_data_feed L656-683 priceBasis fallback logic (MIGRATE_TO_PYTHON - price determination)
|
||||
- gas_data_feed L5920 STOP_LOSS decision (DELETE_DUPLICATE - Python has stop_loss logic)
|
||||
@@ -0,0 +1,814 @@
|
||||
schema_version: gas_migration_wave2_4.v1
|
||||
generated_at: '2026-06-10'
|
||||
playbook_ref: suggest/quant_engine_refactor_playbook_v1.yaml#P5-T01
|
||||
total_findings: 103
|
||||
wave: "2-4"
|
||||
wave_size: 78
|
||||
wave_items:
|
||||
|
||||
- idx: 25
|
||||
file: gas_data_feed.gs
|
||||
line: 656
|
||||
text: 'priceBasis = Number.isFinite(tp2Price) ? "TAKE_PROFIT_TIER2_PRICE" : "PRIOR_CLOSE_X_0.998";'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: GAS determines price basis label and fallback in take-profit dispatch logic. Python should select and return priceBasis as part of TAKE_PROFIT_LADDER_V2 output.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: TAKE_PROFIT_LADDER_V2
|
||||
|
||||
- idx: 26
|
||||
file: gas_data_feed.gs
|
||||
line: 665
|
||||
text: 'priceBasis = Number.isFinite(tp2Price) ? "TAKE_PROFIT_TIER2_PRICE" : "PRIOR_CLOSE_X_0.998";'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: Duplicate of idx=25 in adjacent branch; same priceBasis fallback decision.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: TAKE_PROFIT_LADDER_V2
|
||||
|
||||
- idx: 27
|
||||
file: gas_data_feed.gs
|
||||
line: 674
|
||||
text: 'priceBasis = Number.isFinite(tp1Price) ? "TAKE_PROFIT_TIER1_PRICE" : "PRIOR_CLOSE_X_0.998";'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: Tier1 variant of priceBasis fallback; same migration target as idx=25.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: TAKE_PROFIT_LADDER_V2
|
||||
|
||||
- idx: 28
|
||||
file: gas_data_feed.gs
|
||||
line: 678
|
||||
text: 'action = "TAKE_PROFIT_TIER1";'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: GAS directly assigns action string — this is a decision outcome that should come from Python.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: TAKE_PROFIT_LADDER_V2
|
||||
|
||||
- idx: 29
|
||||
file: gas_data_feed.gs
|
||||
line: 683
|
||||
text: 'priceBasis = Number.isFinite(tp1Price) ? "TAKE_PROFIT_TIER1_PRICE" : "PRIOR_CLOSE_X_0.998";'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: Another branch of same priceBasis fallback; TAKE_PROFIT_LADDER_V2 migration target.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: TAKE_PROFIT_LADDER_V2
|
||||
|
||||
- idx: 30
|
||||
file: gas_data_feed.gs
|
||||
line: 741
|
||||
text: '// SL003_PRIORITY_MATRIX: 복수 손절 조건 동시 발동 시 max(prices) 적용 — spec/exit/stop_loss.yaml'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Comment referencing spec/exit/stop_loss.yaml; no code logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 31
|
||||
file: gas_data_feed.gs
|
||||
line: 742
|
||||
text: '// TP 계열(PROFIT_TRIM_*, TAKE_PROFIT_TIER1)은 별도 프레임워크이므로 이 블록 적용 제외'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Documentation comment only.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 32
|
||||
file: gas_data_feed.gs
|
||||
line: 1577
|
||||
text: 'score += THRESHOLDS["SP_TAKE_PROFIT"];'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: GAS computes a score by adding the SP_TAKE_PROFIT threshold. Score computation must move to Python.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: SELL_PRIORITY_SCORING_V1
|
||||
|
||||
- idx: 33
|
||||
file: gas_data_feed.gs
|
||||
line: 1578
|
||||
text: 'breakdown.push(`take_profit:+${THRESHOLDS["SP_TAKE_PROFIT"]}`);'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: "Part of the same score breakdown accumulation as idx=32. Migration target: Python returns the breakdown list."
|
||||
python_path: src/quant_engine/
|
||||
formula_id: SELL_PRIORITY_SCORING_V1
|
||||
|
||||
- idx: 34
|
||||
file: gas_data_feed.gs
|
||||
line: 2164
|
||||
text: 'TAKE_PROFIT_BASE: 10,'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: Threshold constant defined inline in GAS constants object. Should be in spec/calibration_registry.yaml (source=SPEC_DERIVED, owner_formula=TAKE_PROFIT_LADDER_V2).
|
||||
python_path: spec/calibration_registry.yaml
|
||||
formula_id: TAKE_PROFIT_LADDER_V2
|
||||
migration_action: Register TAKE_PROFIT_BASE=10 in calibration_registry.yaml.
|
||||
|
||||
- idx: 35
|
||||
file: gas_data_feed.gs
|
||||
line: 2259
|
||||
text: "+ ' h5.decisions=' + ((h5 && h5[\"decisions\"]) ? h5[\"decisions\"].length : 0)"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Log line reading length of Python decisions array; no business logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 36
|
||||
file: gas_data_feed.gs
|
||||
line: 2330
|
||||
text: 'var routeCount = ((h5 && h5["decisions"]) ? h5["decisions"].length : 0);'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python decisions count for logging/routing. No decision made.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 37
|
||||
file: gas_data_feed.gs
|
||||
line: 2339
|
||||
text: "+ ' | decisions=' + routeCount"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Log string interpolation; no business logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 38
|
||||
file: gas_data_feed.gs
|
||||
line: 2343
|
||||
text: "Logger.log('[LOG_METRIC_MISMATCH_WARN] decisions>0 이지만 sellCandidates=0');"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Warning log only; no score or decision computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 39
|
||||
file: gas_data_feed.gs
|
||||
line: 3172
|
||||
text: "formula_id: 'ROUTING_DECISION_EXPLAIN_LOCK_V1',"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Setting formula_id field in output packet using a string constant; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 40
|
||||
file: gas_data_feed.gs
|
||||
line: 3285
|
||||
text: "formula_id: 'ROUTING_SERVING_DECISION_TRACE_V2'"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Formula ID tag in output struct; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 41
|
||||
file: gas_data_feed.gs
|
||||
line: 3399
|
||||
text: "* spec/exit/take_profit.yaml:secular_leader_profit_lock.activation_required_all 완전 구현."
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: JSDoc comment referencing spec; no code logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 42
|
||||
file: gas_data_feed.gs
|
||||
line: 5246
|
||||
text: 'var profitLockBase = SP["TAKE_PROFIT_BASE"];'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading TAKE_PROFIT_BASE from SP constants object to pass downstream. The constant itself (idx=34) is the migration target; this read is adapter use.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 43
|
||||
file: gas_data_feed.gs
|
||||
line: 5472
|
||||
text: '* TAKE_PROFIT_LADDER_V2 (tier1/tier2) → TICK_NORMALIZER_V1'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: JSDoc comment describing data flow; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 44
|
||||
file: gas_data_feed.gs
|
||||
line: 5551
|
||||
text: '// ── TAKE_PROFIT_LADDER_V2 ─────────────────────────────────────────────'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Section header comment only.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 45
|
||||
file: gas_data_feed.gs
|
||||
line: 5571
|
||||
text: '// spec/exit/take_profit.yaml:profit_lock_ratchet.ratchet_table 기준'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Comment citing spec; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 46
|
||||
file: gas_data_feed.gs
|
||||
line: 5714
|
||||
text: '* spec/09_decision_flow.yaml 핵심 경로 GAS 구현'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: JSDoc comment; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 47
|
||||
file: gas_data_feed.gs
|
||||
line: 5895
|
||||
text: 'return { ["decisions"]: routes, traces: traces, lock: true };'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: GAS function returns a decisions array it built (routes). Decision routing belongs in Python; GAS should receive this as input.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: ROUTING_SERVING_DECISION_TRACE_V2
|
||||
|
||||
- idx: 48
|
||||
file: gas_data_feed.gs
|
||||
line: 5920
|
||||
text: "if (holding && holding.stopBreach) return 'STOP_LOSS';"
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: GAS evaluates stopBreach condition and returns 'STOP_LOSS' — this is a sell decision in GAS that must live in Python stop_loss logic.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: STOP_LOSS_TRIGGER_V1
|
||||
|
||||
- idx: 49
|
||||
file: gas_data_feed.gs
|
||||
line: 5941
|
||||
text: "var h5RouteRows_ = (h5 && h5[\"decisions\"]) ? h5[\"decisions\"] : [];"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python decisions array with null-guard; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 50
|
||||
file: gas_data_feed.gs
|
||||
line: 5992
|
||||
text: "} else if (orderType === 'STOP_LOSS') {"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Dispatching on Python-provided orderType string; routing-only, not making the stop_loss decision.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 51
|
||||
file: gas_data_feed.gs
|
||||
line: 6028
|
||||
text: '["take_profit_price_krw"]: validation === "PASS" ? (priceRow.tp1_price || null) : null,'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python-provided tp1_price with validation gate check. No price computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 52
|
||||
file: gas_data_feed.gs
|
||||
line: 6029
|
||||
text: '["take_profit_quantity"]: validation === "PASS" ? (priceRow.tp1_qty || null) : null,'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python-provided tp1_qty; same pattern as idx=51.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 53
|
||||
file: gas_data_feed.gs
|
||||
line: 6058
|
||||
text: "if (ot !== 'SELL' && ot !== 'STOP_LOSS') {"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Filtering on Python-provided order type string; dispatch logic only.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 54
|
||||
file: gas_data_feed.gs
|
||||
line: 6206
|
||||
text: "|| (row.order_type || '').toString().toUpperCase() === 'STOP_LOSS';"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading order_type from Python-provided row; string comparison for filtering.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 55
|
||||
file: gas_data_feed.gs
|
||||
line: 6688
|
||||
text: '["distribution_risk_score"]: Math.min(100, Math.max(0, score)),'
|
||||
classification: DELETE_DUPLICATE
|
||||
rationale: GAS computes distribution_risk_score; Python already has DISTRIBUTION_RISK_SCORE_V1. Remove GAS computation, read Python output instead.
|
||||
python_path: src/quant_engine/compute_formula_outputs.py
|
||||
formula_id: DISTRIBUTION_RISK_SCORE_V1
|
||||
migration_action: Delete GAS computation block (L6658-6700 approx), read Python result from sheet row.
|
||||
|
||||
- idx: 56
|
||||
file: gas_data_feed.gs
|
||||
line: 6692
|
||||
text: "formula_id: 'DISTRIBUTION_RISK_SCORE_V1'"
|
||||
classification: DELETE_DUPLICATE
|
||||
rationale: Part of same GAS computation block as idx=55; remove with the block.
|
||||
python_path: src/quant_engine/compute_formula_outputs.py
|
||||
formula_id: DISTRIBUTION_RISK_SCORE_V1
|
||||
|
||||
- idx: 57
|
||||
file: gas_data_feed.gs
|
||||
line: 6774
|
||||
text: '["late_chase_risk_score"]: Math.min(100, Math.max(0, Math.round(lateChaseRisk))),'
|
||||
classification: DELETE_DUPLICATE
|
||||
rationale: GAS computes late_chase_risk_score; Python has this via LATE_CHASE_RISK_SCORE_V1. Remove GAS block, read Python output.
|
||||
python_path: src/quant_engine/compute_formula_outputs.py
|
||||
formula_id: LATE_CHASE_RISK_SCORE_V1
|
||||
migration_action: Delete GAS computation block (L6740-6780 approx), read Python result from alpha sheet row.
|
||||
|
||||
- idx: 58
|
||||
file: gas_data_feed.gs
|
||||
line: 6902
|
||||
text: 'var distributionRiskScore = distRow && typeof distRow["distribution_risk_score"] === "number" ? distRow["distribution_risk_score"]...'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading distribution_risk_score from a sheet row (Python output); null-safe read.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 59
|
||||
file: gas_data_feed.gs
|
||||
line: 6903
|
||||
text: 'var lateChaseRiskScore = alphaRow && typeof alphaRow["late_chase_risk_score"] === "number" ? alphaRow["late_chase_risk_score"]...'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading late_chase_risk_score from alphaRow (Python output); null-safe read.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 60
|
||||
file: gas_data_feed.gs
|
||||
line: 7285
|
||||
text: 'if (bqRow.breakout_quality_gate === "BLOCKED_LATE_CHASE" || alphaRow["late_chase_risk_score"] >= 70)'
|
||||
classification: MIGRATE_TO_PYTHON
|
||||
rationale: GAS applies a score threshold (>=70) to make a gate decision. This threshold comparison should live in Python as part of the anti-late-entry gate.
|
||||
python_path: src/quant_engine/
|
||||
formula_id: ANTI_LATE_ENTRY_GATE_V2
|
||||
migration_action: Move threshold check to Python; GAS reads gate result string.
|
||||
|
||||
- idx: 61
|
||||
file: gas_data_feed.gs
|
||||
line: 7315
|
||||
text: '["late_chase_risk_score"]: alphaRow["late_chase_risk_score"] != null ? alphaRow["late_chase_risk_score"]...'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Null-guarded read from alphaRow; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 62
|
||||
file: gas_data_feed.gs
|
||||
line: 7995
|
||||
text: '* 외국인 순매도 연속일·USD/KRW·FOMC·VIX 등 거시 변수를 macro_risk_score로 환산.'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: JSDoc comment describing inputs; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 63
|
||||
file: gas_data_feed.gs
|
||||
line: 8877
|
||||
text: '// stop_loss: final_stop_price/stop_price(없는 키) → protected_stop_price/auto_trailing_stop.'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Comment describing field mapping; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 64
|
||||
file: gas_data_feed.gs
|
||||
line: 8891
|
||||
text: '["stop_loss"]: [pp0.auto_trailing_stop, pp0.protected_stop_price, pp0.profit_preservation_state]'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling stop_loss fields from Python-computed pp0 object; no decision logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 65
|
||||
file: gas_data_feed.gs
|
||||
line: 8968
|
||||
text: "{ id: 'Stage_04_macro', key: 'macro_risk_score' },"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Stage config entry referencing a Python-provided key; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 66
|
||||
file: gas_data_feed.gs
|
||||
line: 9047
|
||||
text: "{ yaml: 'TAKE_PROFIT_LADDER_V1', gs: 'calcTpQuantityLadder_' },"
|
||||
classification: ADAPTER_OK
|
||||
rationale: GAS/YAML function mapping table entry; registration metadata, not logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 67
|
||||
file: gas_data_feed.gs
|
||||
line: 9133
|
||||
text: "{ yaml: 'ROUTING_SERVING_DECISION_TRACE_V2', gs: 'buildRoutingServingTraceV2_' },"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Function mapping table entry; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 68
|
||||
file: gas_data_feed.gs
|
||||
line: 9138
|
||||
text: "{ yaml: 'ROUTING_DECISION_EXPLAIN_LOCK_V1', gs: 'calcRoutingExplainLockV1_' },"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Function mapping table entry; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 69
|
||||
file: gas_data_feed.gs
|
||||
line: 9508
|
||||
text: '["stop_loss_calc"]: bp["stop_loss"] || df["stop_loss_price"] || null,'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python-provided stop_loss with fallback to df field; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 70
|
||||
file: gas_data_feed.gs
|
||||
line: 9509
|
||||
text: '["take_profit_calc"]: bp["take_profit"] || df["tp1_price"] || null,'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python-provided take_profit/tp1_price with null fallback; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 71
|
||||
file: gas_harness_rows.gs
|
||||
line: 3
|
||||
text: '// Pure output assembly - no decision logic. Rarely changes after V stabilizes.'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: File-level comment; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 72
|
||||
file: gas_harness_rows.gs
|
||||
line: 60
|
||||
text: '* source_manifest_json, decision_trace_json 등에 사용.'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: JSDoc comment; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 73
|
||||
file: gas_harness_rows.gs
|
||||
line: 166
|
||||
text: 'var p6DecisionMap = {};'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Initializing a lookup map to organize Python decisions for sheet writing; no business logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 74
|
||||
file: gas_harness_rows.gs
|
||||
line: 167
|
||||
text: '(h5.decisions || []).forEach(function(row) { p6DecisionMap[row.ticker] = row; });'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Building ticker→decision lookup map from Python h5.decisions array; pure organization.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 75
|
||||
file: gas_harness_rows.gs
|
||||
line: 187
|
||||
text: 'Object.keys(p6DecisionMap).forEach(function(t) { p6Tickers[t] = true; });'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Building ticker set from Python decisions for iteration; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 76
|
||||
file: gas_harness_rows.gs
|
||||
line: 193
|
||||
text: 'var da = p6DecisionMap[a] || {};'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Null-safe lookup of Python decision by ticker; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 77
|
||||
file: gas_harness_rows.gs
|
||||
line: 194
|
||||
text: 'var db = p6DecisionMap[b] || {};'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Null-safe lookup of Python decision by ticker; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 78
|
||||
file: gas_harness_rows.gs
|
||||
line: 200
|
||||
text: "if (action.indexOf('SELL') >= 0 || action.indexOf('TRIM') >= 0 || action.indexOf('EXIT') >= 0 || act..."
|
||||
classification: ADAPTER_OK
|
||||
rationale: Sorting rows by Python-provided action string category for sheet display order; presentation logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 79
|
||||
file: gas_harness_rows.gs
|
||||
line: 227
|
||||
text: 'var d = p6DecisionMap[ticker] || {};'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Null-safe lookup from Python decisions map.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 80
|
||||
file: gas_harness_rows.gs
|
||||
line: 235
|
||||
text: "if (finalAction.indexOf('SELL') >= 0 || finalAction.indexOf('TRIM') >= 0 || finalAction.indexOf('EXI..."
|
||||
classification: ADAPTER_OK
|
||||
rationale: Categorizing Python-provided finalAction string for sheet rendering; display logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 81
|
||||
file: gas_harness_rows.gs
|
||||
line: 265
|
||||
text: "} else if (finalAction.indexOf('TAKE_PROFIT') >= 0 || orderType.indexOf('TAKE_PROFIT') >= 0) {"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Categorizing Python-provided finalAction for display; presentation routing.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 82
|
||||
file: gas_harness_rows.gs
|
||||
line: 464
|
||||
text: "['decisions_json', JSON.stringify(h5.decisions)],"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Serializing Python h5.decisions to sheet; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 83
|
||||
file: gas_harness_rows.gs
|
||||
line: 465
|
||||
text: "['decision_trace_json', (function() { ..."
|
||||
classification: ADAPTER_OK
|
||||
rationale: Serializing Python decision_trace to sheet cell; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 84
|
||||
file: gas_harness_rows.gs
|
||||
line: 475
|
||||
text: "['decision_lock', 'true'],"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Writing static lock flag to sheet; no business logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 85
|
||||
file: gas_harness_rows.gs
|
||||
line: 489
|
||||
text: "['decision_trace_checksum', computeStringChecksum_(JSON.stringify(h5.traces))],"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Computing integrity checksum of Python trace data for audit; sheet-writing utility, not business logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 86
|
||||
file: gas_harness_rows.gs
|
||||
line: 699
|
||||
text: "'ALPHA_LEAD_SCORE_V1,FOLLOW_THROUGH_CONFIRM_V1,DISTRIBUTION_RISK_SCORE_V1,'"
|
||||
classification: ADAPTER_OK
|
||||
rationale: String literal listing formula IDs for a manifest field; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 87
|
||||
file: gas_harness_rows.gs
|
||||
line: 728
|
||||
text: "['macro_risk_score', (hApex || {}).macro_risk_score !== undefined ? String(...)..."
|
||||
classification: ADAPTER_OK
|
||||
rationale: Reading Python macro_risk_score from hApex for sheet writing; null-safe adapter.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 88
|
||||
file: gas_harness_rows.gs
|
||||
line: 1133
|
||||
text: "+ '▶ 재계산 금지: sell_priority_lock·quantities_lock·prices_lock·decision_lock...'"
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: UI warning string constant embedded in a log/display message; not decision logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 89
|
||||
file: gas_harness_rows.gs
|
||||
line: 1267
|
||||
text: "['routing_decision_explain_json', JSON.stringify((hApex || {}).routing_decision_explain_json || {})]"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Serializing Python routing explanation to sheet; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 90
|
||||
file: gas_harness_rows.gs
|
||||
line: 1299
|
||||
text: "'decision_lock', 'blueprint_row_count', 'blueprint_checksum', 'blueprint_hash_algo',"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list for sheet schema definition; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 91
|
||||
file: gas_harness_rows.gs
|
||||
line: 1300
|
||||
text: "'source_manifest_checksum', 'decision_trace_checksum', 'checksum_hash_algo',"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 92
|
||||
file: gas_harness_rows.gs
|
||||
line: 1305
|
||||
text: "'prices_json', 'decisions_json', 'decision_trace_json',"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 93
|
||||
file: gas_harness_rows.gs
|
||||
line: 1419
|
||||
text: "'cashflow_stability_json','routing_decision_explain_json'"
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column name list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 94
|
||||
file: gas_lib.gs
|
||||
line: 145
|
||||
text: '"Setup_Decision","Exit_Reason"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column header list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 95
|
||||
file: gas_lib.gs
|
||||
line: 158
|
||||
text: '"Timing_Score_Entry","Timing_Score_Exit","T1_Forced_Sell_Risk_Score","Sell_Conflict_Score",'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column header list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 96
|
||||
file: gas_lib.gs
|
||||
line: 946
|
||||
text: '"Sector_Score","Sector_Rank","Alert_Level","Data_Quality","Decision_Use","Reason","AsOfDate"'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column header list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 97
|
||||
file: gas_lib.gs
|
||||
line: 1091
|
||||
text: '"Flow_Breadth_5D","Alert_Level","Data_Quality","Decision_Use","ETF_Liquidity_Status","ETF_Execution_..."'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column header list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 98
|
||||
file: gas_lib.gs
|
||||
line: 1226
|
||||
text: '"Alert_Level","Data_Quality","Decision_Use","Reason","RW1","RW3","AsOfDate",'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Column header list; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 99
|
||||
file: gas_lib.gs
|
||||
line: 1411
|
||||
text: '// MARKET_RISK_SCORE_V1'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Section comment only.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 100
|
||||
file: gas_lib.gs
|
||||
line: 1517
|
||||
text: '// spec/05_position_sizing.yaml:net_return_feedback'
|
||||
classification: COMMENT_FALSE_POSITIVE
|
||||
rationale: Comment referencing spec; no logic.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 101
|
||||
file: gas_lib.gs
|
||||
line: 1553
|
||||
text: 'rows.push(["MRS_COMPUTED", "Market_Risk_Score", "Computed", mrs, ...]'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Assembling a display row with Python-computed mrs value; sheet output assembly.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
- idx: 102
|
||||
file: gas_lib.gs
|
||||
line: 2128
|
||||
text: 'const mrsRow = byName["Market_Risk_Score"] ?? {};'
|
||||
classification: ADAPTER_OK
|
||||
rationale: Null-safe lookup of Market_Risk_Score row from Python-provided data; no computation.
|
||||
python_path: null
|
||||
formula_id: null
|
||||
|
||||
wave2_4_summary:
|
||||
ADAPTER_OK: 50
|
||||
COMMENT_FALSE_POSITIVE: 14
|
||||
MIGRATE_TO_PYTHON: 11
|
||||
DELETE_DUPLICATE: 3
|
||||
total_wave2_4: 78
|
||||
|
||||
full_migration_summary:
|
||||
wave1:
|
||||
ADAPTER_OK: 17
|
||||
COMMENT_FALSE_POSITIVE: 7
|
||||
MIGRATE_TO_PYTHON: 1
|
||||
DELETE_DUPLICATE: 0
|
||||
total: 25
|
||||
wave2_4:
|
||||
ADAPTER_OK: 50
|
||||
COMMENT_FALSE_POSITIVE: 14
|
||||
MIGRATE_TO_PYTHON: 11
|
||||
DELETE_DUPLICATE: 3
|
||||
total: 78
|
||||
all_103:
|
||||
ADAPTER_OK: 67
|
||||
COMMENT_FALSE_POSITIVE: 21
|
||||
MIGRATE_TO_PYTHON: 12
|
||||
DELETE_DUPLICATE: 3
|
||||
grand_total: 103
|
||||
|
||||
migration_priority:
|
||||
phase1_delete_duplicates:
|
||||
- note: "3 DELETE_DUPLICATE items — GAS computations that duplicate Python exactly"
|
||||
- gas_data_feed.gs:6688 distribution_risk_score (DISTRIBUTION_RISK_SCORE_V1)
|
||||
- gas_data_feed.gs:6692 formula_id reference for above (remove with block)
|
||||
- gas_data_feed.gs:6774 late_chase_risk_score (LATE_CHASE_RISK_SCORE_V1)
|
||||
|
||||
phase2_migrate_to_python:
|
||||
- note: "12 MIGRATE_TO_PYTHON items — logic that must move to Python"
|
||||
- gas_data_feed.gs:186 SP_TAKE_PROFIT=10 threshold (→ calibration_registry.yaml) [wave1]
|
||||
- gas_data_feed.gs:2164 TAKE_PROFIT_BASE=10 constant (→ calibration_registry.yaml)
|
||||
- gas_data_feed.gs:656/665/674/678/683 priceBasis + action for TAKE_PROFIT (→ TAKE_PROFIT_LADDER_V2 output)
|
||||
- gas_data_feed.gs:1577/1578 score += SP_TAKE_PROFIT (→ SELL_PRIORITY_SCORING_V1)
|
||||
- gas_data_feed.gs:5895 return decisions (→ ROUTING_SERVING_DECISION_TRACE_V2)
|
||||
- gas_data_feed.gs:5920 stopBreach → STOP_LOSS (→ STOP_LOSS_TRIGGER_V1)
|
||||
- gas_data_feed.gs:7285 late_chase_risk_score >= 70 gate (→ ANTI_LATE_ENTRY_GATE_V2)
|
||||
|
||||
phase3_comment_cleanup:
|
||||
- note: "21 COMMENT_FALSE_POSITIVE items — no code changes needed, scanner false positives"
|
||||
|
||||
phase4_adapter_ok:
|
||||
- note: "67 ADAPTER_OK items — compliant thin-adapter reads; no changes needed"
|
||||
|
||||
action_items:
|
||||
- id: REGISTER_SP_TAKE_PROFIT
|
||||
status: TODO
|
||||
file: spec/calibration_registry.yaml
|
||||
action: Add SP_TAKE_PROFIT=10, source=SPEC_DERIVED, owner_formula=TAKE_PROFIT_LADDER_V2
|
||||
|
||||
- id: REGISTER_TAKE_PROFIT_BASE
|
||||
status: TODO
|
||||
file: spec/calibration_registry.yaml
|
||||
action: Add TAKE_PROFIT_BASE=10, source=SPEC_DERIVED, owner_formula=TAKE_PROFIT_LADDER_V2
|
||||
|
||||
- id: DELETE_DISTRIBUTION_RISK_GAS
|
||||
status: TODO
|
||||
file: gas_data_feed.gs
|
||||
action: Delete distribution_risk_score computation block (~L6658-6700), replace with read from Python output sheet row
|
||||
|
||||
- id: DELETE_LATE_CHASE_RISK_GAS
|
||||
status: TODO
|
||||
file: gas_data_feed.gs
|
||||
action: Delete late_chase_risk_score computation block (~L6740-6780), replace with read from Python output alpha row
|
||||
|
||||
- id: MIGRATE_PRICEBASIS_TO_PYTHON
|
||||
status: TODO
|
||||
file: gas_data_feed.gs + src/quant_engine/
|
||||
action: Move priceBasis/action assignment (L656-683) to TAKE_PROFIT_LADDER_V2 Python output; GAS reads result
|
||||
|
||||
- id: MIGRATE_SCORE_CALCULATION
|
||||
status: TODO
|
||||
file: gas_data_feed.gs + src/quant_engine/
|
||||
action: Move score += THRESHOLDS["SP_TAKE_PROFIT"] + breakdown.push (L1577-1578) to SELL_PRIORITY_SCORING_V1 Python
|
||||
|
||||
- id: MIGRATE_STOP_BREACH_DECISION
|
||||
status: TODO
|
||||
file: gas_data_feed.gs + src/quant_engine/
|
||||
action: Move stopBreach → STOP_LOSS decision (L5920) to Python STOP_LOSS_TRIGGER_V1
|
||||
|
||||
- id: MIGRATE_DECISIONS_ROUTING
|
||||
status: TODO
|
||||
file: gas_data_feed.gs + src/quant_engine/
|
||||
action: Move decisions route-building (L5895 return block) to Python ROUTING_SERVING_DECISION_TRACE_V2
|
||||
|
||||
- id: MIGRATE_LATE_CHASE_GATE
|
||||
status: TODO
|
||||
file: gas_data_feed.gs + src/quant_engine/
|
||||
action: Move late_chase_risk_score >= 70 threshold gate (L7285) to Python ANTI_LATE_ENTRY_GATE_V2
|
||||
|
||||
- id: UPDATE_GAS_SCANNER_FALSE_POSITIVES
|
||||
status: TODO
|
||||
file: tools/validate_gas_thin_adapter_v2.py
|
||||
action: Add 21 confirmed false-positive patterns to scanner exclusion list to reduce noise in future runs
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
"""Auto-generated package."""
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ABSOLUTE_RISK_STOP_V1."""
|
||||
|
||||
FORMULA_ID = 'ABSOLUTE_RISK_STOP_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['holdings', 'df_map']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ABSOLUTE_RISK_STOP_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ALGORITHM_GUIDANCE_PROOF_V1."""
|
||||
|
||||
FORMULA_ID = 'ALGORITHM_GUIDANCE_PROOF_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ALGORITHM_GUIDANCE_PROOF_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ALPHA_EVALUATION_WINDOW_V1."""
|
||||
|
||||
FORMULA_ID = 'ALPHA_EVALUATION_WINDOW_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['entry_date', 'position_class', 't20_return_pct', 't60_return_pct', 'benchmark_core_return_pct']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ALPHA_EVALUATION_WINDOW_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ALPHA_FEEDBACK_LOOP_V1."""
|
||||
|
||||
FORMULA_ID = 'ALPHA_FEEDBACK_LOOP_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['alpha_evaluation_window_json', 'saqg_v1', 'brt_verdict', 'market_regime']
|
||||
FORMULA_OUTPUT_FIELDS = [{'field': 'alpha_feedback_json', 'subfields': ['eligible_t20_fail_rate', 'eligible_t60_fail_rate', 'recommended_filter_adjustments', 'cases_analyzed']}]
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ALPHA_FEEDBACK_LOOP_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ANTI_CHASE_V1."""
|
||||
|
||||
FORMULA_ID = 'ANTI_CHASE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ANTI_CHASE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ANTI_CHASING_VELOCITY_V1."""
|
||||
|
||||
FORMULA_ID = 'ANTI_CHASING_VELOCITY_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['close', 'close_1d_ago', 'close_5d_ago', 'market_regime']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ANTI_CHASING_VELOCITY_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ANTI_LATE_ENTRY_GATE_V2."""
|
||||
|
||||
FORMULA_ID = 'ANTI_LATE_ENTRY_GATE_V2'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ANTI_LATE_ENTRY_GATE_V2' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ANTI_WHIPSAW_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'ANTI_WHIPSAW_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['close_price', 'ma20', 'rsi14']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ANTI_WHIPSAW_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ARTIFACT_FRESHNESS_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'ARTIFACT_FRESHNESS_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ARTIFACT_FRESHNESS_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for AUDIT_REPLAY_SNAPSHOT_V1."""
|
||||
|
||||
FORMULA_ID = 'AUDIT_REPLAY_SNAPSHOT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('AUDIT_REPLAY_SNAPSHOT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for BENCHMARK_RELATIVE_TIMESERIES_V1."""
|
||||
|
||||
FORMULA_ID = 'BENCHMARK_RELATIVE_TIMESERIES_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['price.ret5D', 'price.ret20D', 'price.ret60D', 'price.close', 'high52w', 'globalKospiRet5D_', 'globalKospiRet20D_', 'globalKospiRet60D_', 'globalKospiDrawdown_']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('BENCHMARK_RELATIVE_TIMESERIES_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for BLANK_CELL_AUDIT_V1."""
|
||||
|
||||
FORMULA_ID = 'BLANK_CELL_AUDIT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['operational_report_json']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('BLANK_CELL_AUDIT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for BREAKEVEN_RATCHET_V1."""
|
||||
|
||||
FORMULA_ID = 'BREAKEVEN_RATCHET_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['average_cost', 'highest_price_since_entry']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('BREAKEVEN_RATCHET_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for BREAKOUT_QUALITY_GATE_V2."""
|
||||
|
||||
FORMULA_ID = 'BREAKOUT_QUALITY_GATE_V2'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['close', 'ma20', 'ret_3d', 'ret_1d', 'disparity', 'rsi14', 'volume', 'avg_volume_5d', 'timing_score_exit', 'distribution_risk_score', 'late_chase_risk_score']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('BREAKOUT_QUALITY_GATE_V2' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CANONICAL_ARTIFACT_RESOLVER_V1."""
|
||||
|
||||
FORMULA_ID = 'CANONICAL_ARTIFACT_RESOLVER_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CANONICAL_ARTIFACT_RESOLVER_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CANONICAL_METRICS_V1."""
|
||||
|
||||
FORMULA_ID = 'CANONICAL_METRICS_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CANONICAL_METRICS_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CAPITAL_STYLE_ALLOCATION_V1."""
|
||||
|
||||
FORMULA_ID = 'CAPITAL_STYLE_ALLOCATION_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['smart_money_flow_signal_v2_json', 'fundamental_multifactor_v3_json', 'macro_event_ticker_impact_v1_json', 'liquidity_flow_signal_v1_json']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CAPITAL_STYLE_ALLOCATION_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_CREATION_PURPOSE_LOCK_V1."""
|
||||
|
||||
FORMULA_ID = 'CASH_CREATION_PURPOSE_LOCK_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['composite_verdict', 'rs_verdict', 'brt_verdict', 'excess_drawdown_pctp', 'recovery_ratio_20d', 'sfg_v1']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_CREATION_PURPOSE_LOCK_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_FLOOR_V1."""
|
||||
|
||||
FORMULA_ID = 'CASH_FLOOR_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['total_asset', 'settlement_cash_d2_krw', 'market_risk_score']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_FLOOR_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_RAISE_PARETO_EXECUTOR_V2."""
|
||||
|
||||
FORMULA_ID = 'CASH_RAISE_PARETO_EXECUTOR_V2'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_RAISE_PARETO_EXECUTOR_V2' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_RAISE_VALUE_OPTIMIZER_V3."""
|
||||
|
||||
FORMULA_ID = 'CASH_RAISE_VALUE_OPTIMIZER_V3'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_RAISE_VALUE_OPTIMIZER_V3' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_RATIOS_V1."""
|
||||
|
||||
FORMULA_ID = 'CASH_RATIOS_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['settlement_cash', 'reserved_order_amount', 'planned_buy_amount', 'sell_cash_proceeds_d2', 'total_asset']
|
||||
FORMULA_OUTPUT_FIELDS = {'settlement_cash_ratio': 'settlement_cash / total_asset * 100', 'total_cash_ratio': 'settlement_cash / total_asset * 100', 'buy_power_cash': 'settlement_cash - reserved_order_amount', 'buy_power_ratio': '(settlement_cash - reserved_order_amount) / total_asset * 100', 'post_trade_total_cash_ratio': '(settlement_cash - planned_buy_amount + sell_cash_proceeds_d2) / total_asset * 100'}
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_RATIOS_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_RECOVERY_OPTIMIZER_V1."""
|
||||
|
||||
FORMULA_ID = 'CASH_RECOVERY_OPTIMIZER_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['cash_shortfall_target_krw', 'cash_shortfall_min_krw', 'sell_candidates_json', 'immediate_sell_qty', 'sell_limit_price', 'holding_qty']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_RECOVERY_OPTIMIZER_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_RECOVERY_OPTIMIZER_V4."""
|
||||
|
||||
FORMULA_ID = 'CASH_RECOVERY_OPTIMIZER_V4'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_RECOVERY_OPTIMIZER_V4' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASH_RECOVERY_V1."""
|
||||
|
||||
FORMULA_ID = 'CASH_RECOVERY_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASH_RECOVERY_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASHFLOW_QUALITY_SIGNAL_V1."""
|
||||
|
||||
FORMULA_ID = 'CASHFLOW_QUALITY_SIGNAL_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASHFLOW_QUALITY_SIGNAL_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CASHFLOW_STABILITY_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'CASHFLOW_STABILITY_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['operating_cf_krw', 'free_cf_krw', 'accrual_ratio_pct']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CASHFLOW_STABILITY_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CLA_REGIME_EXIT_CONDITION_V1."""
|
||||
|
||||
FORMULA_ID = 'CLA_REGIME_EXIT_CONDITION_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['ticker', 'rs_verdict', 'brt_verdict', 'frg_5d_sh', 'volume', 'avg_volume_5d', 'market_regime']
|
||||
FORMULA_OUTPUT_FIELDS = [{'field': 'cla_exit_status', 'unit': 'enum [CLA_ACTIVE,CLA_EXIT_WARNING,CLA_EXIT_CONFIRMED]'}, {'field': 'cla_exit_signals_triggered', 'unit': 'list'}, {'field': 'cla_exit_total_weight', 'unit': 'int'}]
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CLA_REGIME_EXIT_CONDITION_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for COMPLETION_GAP_V1."""
|
||||
|
||||
FORMULA_ID = 'COMPLETION_GAP_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('COMPLETION_GAP_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for COMPOSITE_VERDICT_V1."""
|
||||
|
||||
FORMULA_ID = 'COMPOSITE_VERDICT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['ss001_grade', 'rs_verdict']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('COMPOSITE_VERDICT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for COMPREHENSIVE_PROPOSAL_V1."""
|
||||
|
||||
FORMULA_ID = 'COMPREHENSIVE_PROPOSAL_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('COMPREHENSIVE_PROPOSAL_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CONTINUOUS_EVALUATION_DASHBOARD_V1."""
|
||||
|
||||
FORMULA_ID = 'CONTINUOUS_EVALUATION_DASHBOARD_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CONTINUOUS_EVALUATION_DASHBOARD_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for CROSS_SECTION_CONSISTENCY_V1."""
|
||||
|
||||
FORMULA_ID = 'CROSS_SECTION_CONSISTENCY_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('CROSS_SECTION_CONSISTENCY_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DATA_INTEGRITY_100_LOCK_V1."""
|
||||
|
||||
FORMULA_ID = 'DATA_INTEGRITY_100_LOCK_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DATA_INTEGRITY_100_LOCK_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DATA_INTEGRITY_100_LOCK_V2."""
|
||||
|
||||
FORMULA_ID = 'DATA_INTEGRITY_100_LOCK_V2'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DATA_INTEGRITY_100_LOCK_V2' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DATA_INTEGRITY_SCORE_V1."""
|
||||
|
||||
FORMULA_ID = 'DATA_INTEGRITY_SCORE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DATA_INTEGRITY_SCORE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DATA_MATURITY_TRUTH_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'DATA_MATURITY_TRUTH_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DATA_MATURITY_TRUTH_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DATA_MATURITY_TRUTH_GATE_VALIDATOR_V1."""
|
||||
|
||||
FORMULA_ID = 'DATA_MATURITY_TRUTH_GATE_VALIDATOR_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DATA_MATURITY_TRUTH_GATE_VALIDATOR_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DATA_QUALITY_GATE_V2_PY."""
|
||||
|
||||
FORMULA_ID = 'DATA_QUALITY_GATE_V2_PY'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DATA_QUALITY_GATE_V2_PY' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DATA_QUALITY_GATE_V3."""
|
||||
|
||||
FORMULA_ID = 'DATA_QUALITY_GATE_V3'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DATA_QUALITY_GATE_V3' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DETERMINISTIC_ROUTING_ENGINE_V1."""
|
||||
|
||||
FORMULA_ID = 'DETERMINISTIC_ROUTING_ENGINE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['harness_context']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DETERMINISTIC_ROUTING_ENGINE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DISTRIBUTION_SELL_DETECTOR_V1."""
|
||||
|
||||
FORMULA_ID = 'DISTRIBUTION_SELL_DETECTOR_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['close', 'high52w', 'avg_volume_5d', 'volume', 'ret5d', 'flow_credit', 'frg_5d_sh', 'inst_5d_sh', 'rsi14', 'obv_slope_20d']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DISTRIBUTION_SELL_DETECTOR_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DIVERGENCE_SCORE_V1."""
|
||||
|
||||
FORMULA_ID = 'DIVERGENCE_SCORE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['close_price', 'ma20', 'frg_5d_sh', 'inst_5d_sh', 'flow_credit', 'frg_20d_sh']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DIVERGENCE_SCORE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DRAWDOWN_GUARD_V1."""
|
||||
|
||||
FORMULA_ID = 'DRAWDOWN_GUARD_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['win_loss_streak_state', 'win_loss_streak_buy_scale']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DRAWDOWN_GUARD_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for DYNAMIC_HEAT_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'DYNAMIC_HEAT_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['market_regime', 'total_heat_pct']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('DYNAMIC_HEAT_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for EARNINGS_GROWTH_QUALITY_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'EARNINGS_GROWTH_QUALITY_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['eps_growth_qoq_pct', 'eps_growth_yoy_pct']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('EARNINGS_GROWTH_QUALITY_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for EARNINGS_QUALITY_SIGNAL_V1."""
|
||||
|
||||
FORMULA_ID = 'EARNINGS_QUALITY_SIGNAL_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('EARNINGS_QUALITY_SIGNAL_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ECP_RISK_SCALE_V1."""
|
||||
|
||||
FORMULA_ID = 'ECP_RISK_SCALE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['total_asset', 'total_asset_ma10']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ECP_RISK_SCALE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for EJCE_DIVERGENCE_AUDIT_V1."""
|
||||
|
||||
FORMULA_ID = 'EJCE_DIVERGENCE_AUDIT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('EJCE_DIVERGENCE_AUDIT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for EJCE_VIEW_RENDERER_V1."""
|
||||
|
||||
FORMULA_ID = 'EJCE_VIEW_RENDERER_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['ejce_json', 'alpha_lead_json', 'breakout_quality_gate_json', 'anti_chasing_velocity_json', 'heat_concentration_json', 'portfolio_alpha_confidence']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('EJCE_VIEW_RENDERER_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for ENTRY_TIMING_DECILE_FACTOR_V1."""
|
||||
|
||||
FORMULA_ID = 'ENTRY_TIMING_DECILE_FACTOR_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['buy_timing_score', 't5_ledger', 'cut_decile']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('ENTRY_TIMING_DECILE_FACTOR_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for EXECUTION_METHOD_LADDER_V1."""
|
||||
|
||||
FORMULA_ID = 'EXECUTION_METHOD_LADDER_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['sell_timing_verdict', 'sell_waterfall_gate', 'smart_cash_recovery_gate']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('EXECUTION_METHOD_LADDER_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for EXECUTION_QUALITY_SCORE_V1."""
|
||||
|
||||
FORMULA_ID = 'EXECUTION_QUALITY_SCORE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('EXECUTION_QUALITY_SCORE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for EXPECTED_EDGE_V1."""
|
||||
|
||||
FORMULA_ID = 'EXPECTED_EDGE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['target_price', 'entry_price', 'stop_price', 'bayesian_confidence_multiplier', 'execution_cost_rate']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('EXPECTED_EDGE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FINAL_JUDGMENT_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'FINAL_JUDGMENT_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FINAL_JUDGMENT_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FINANCIAL_HEALTH_SCORE_V1."""
|
||||
|
||||
FORMULA_ID = 'FINANCIAL_HEALTH_SCORE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['roe_pct', 'operating_margin_pct', 'debt_to_equity', 'fcf_b', 'sector_type']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FINANCIAL_HEALTH_SCORE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FLOW_ACCELERATION_V1."""
|
||||
|
||||
FORMULA_ID = 'FLOW_ACCELERATION_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['frg_5d_sh', 'frg_20d_sh', 'close_price', 'ma20']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FLOW_ACCELERATION_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FLOW_CREDIT_V1."""
|
||||
|
||||
FORMULA_ID = 'FLOW_CREDIT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['close_price', 'open_price', 'previous_close_price', 'volume', 'avg_volume_5d', 'frg_5d_sh', 'inst_5d_sh', 'flow_ok']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FLOW_CREDIT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FOLLOW_THROUGH_DAY_CONFIRM_V1."""
|
||||
|
||||
FORMULA_ID = 'FOLLOW_THROUGH_DAY_CONFIRM_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['days_since_breakout', 'ret_since_breakout', 'vol_today', 'vol_breakout_day', 'close', 'ma20']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FOLLOW_THROUGH_DAY_CONFIRM_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FUNDAMENTAL_MULTI_FACTOR_SCORE_V2."""
|
||||
|
||||
FORMULA_ID = 'FUNDAMENTAL_MULTI_FACTOR_SCORE_V2'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['roe_pct', 'opm_pct', 'revenue_growth_pct', 'op_income_growth_pct', 'market_share_proxy_pct', 'operating_cf_krw', 'free_cf_krw', 'debt_ratio_pct']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FUNDAMENTAL_MULTI_FACTOR_SCORE_V2' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FUNDAMENTAL_MULTIFACTOR_V3."""
|
||||
|
||||
FORMULA_ID = 'FUNDAMENTAL_MULTIFACTOR_V3'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FUNDAMENTAL_MULTIFACTOR_V3' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FUNDAMENTAL_QUALITY_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'FUNDAMENTAL_QUALITY_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['roe_pct', 'op_income_growth_pct', 'debt_ratio_pct', 'operating_cf_krw', 'pe_ttm']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FUNDAMENTAL_QUALITY_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for FUNDAMENTAL_RAW_INGEST_V1."""
|
||||
|
||||
FORMULA_ID = 'FUNDAMENTAL_RAW_INGEST_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('FUNDAMENTAL_RAW_INGEST_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for GROWTH_RATE_SIGNAL_V1."""
|
||||
|
||||
FORMULA_ID = 'GROWTH_RATE_SIGNAL_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('GROWTH_RATE_SIGNAL_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for HARNESS_DATA_FRESHNESS_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'HARNESS_DATA_FRESHNESS_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['metadata.generated_at', 'metadata.market_date', 'today_date']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('HARNESS_DATA_FRESHNESS_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for HEAT_CONCENTRATION_ALERT_V1."""
|
||||
|
||||
FORMULA_ID = 'HEAT_CONCENTRATION_ALERT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['heat_share_pct']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('HEAT_CONCENTRATION_ALERT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for HORIZON_ALLOCATION_LOCK_V1."""
|
||||
|
||||
FORMULA_ID = 'HORIZON_ALLOCATION_LOCK_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['invest_horizon', 'market_value_krw', 'total_asset_krw']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('HORIZON_ALLOCATION_LOCK_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for HORIZON_CLASSIFICATION_V1."""
|
||||
|
||||
FORMULA_ID = 'HORIZON_CLASSIFICATION_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('HORIZON_CLASSIFICATION_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for INTRADAY_ACTION_MATRIX_V1."""
|
||||
|
||||
FORMULA_ID = 'INTRADAY_ACTION_MATRIX_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['capture_time', 'market_date']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('INTRADAY_ACTION_MATRIX_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for INVESTMENT_QUALITY_HEADLINE_V1."""
|
||||
|
||||
FORMULA_ID = 'INVESTMENT_QUALITY_HEADLINE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('INVESTMENT_QUALITY_HEADLINE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for K2_STAGED_REBOUND_SELL_V1."""
|
||||
|
||||
FORMULA_ID = 'K2_STAGED_REBOUND_SELL_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['base_sell_qty', 'previous_close_price', 'atr20']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('K2_STAGED_REBOUND_SELL_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for LEADER_POSITION_WEIGHT_CAP_V1."""
|
||||
|
||||
FORMULA_ID = 'LEADER_POSITION_WEIGHT_CAP_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['single_position_weight_json', 'market_regime']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('LEADER_POSITION_WEIGHT_CAP_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for LIQUIDITY_FLOW_SIGNAL_V1."""
|
||||
|
||||
FORMULA_ID = 'LIQUIDITY_FLOW_SIGNAL_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('LIQUIDITY_FLOW_SIGNAL_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for LLM_NARRATIVE_TEMPLATE_LOCK_V1."""
|
||||
|
||||
FORMULA_ID = 'LLM_NARRATIVE_TEMPLATE_LOCK_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('LLM_NARRATIVE_TEMPLATE_LOCK_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for LLM_SERVING_CONSTRAINT_V1."""
|
||||
|
||||
FORMULA_ID = 'LLM_SERVING_CONSTRAINT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['harness_context']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('LLM_SERVING_CONSTRAINT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for MACRO_EVENT_TICKER_IMPACT_V1."""
|
||||
|
||||
FORMULA_ID = 'MACRO_EVENT_TICKER_IMPACT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('MACRO_EVENT_TICKER_IMPACT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for MARKET_RISK_SCORE_V1."""
|
||||
|
||||
FORMULA_ID = 'MARKET_RISK_SCORE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['vix_close', 'kospi_close', 'kospi_ma20', 'usd_krw', 'usd_jpy_2d_change_pct', 'credit_stress_status']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('MARKET_RISK_SCORE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for MARKET_SHARE_MOMENTUM_PROXY_V1."""
|
||||
|
||||
FORMULA_ID = 'MARKET_SHARE_MOMENTUM_PROXY_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['revenue_growth_pct', 'alpha_lead_score']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('MARKET_SHARE_MOMENTUM_PROXY_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for MARKET_SHARE_SIGNAL_V2."""
|
||||
|
||||
FORMULA_ID = 'MARKET_SHARE_SIGNAL_V2'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('MARKET_SHARE_SIGNAL_V2' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for MARKET_WEIGHT_AWARE_CLUSTER_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'MARKET_WEIGHT_AWARE_CLUSTER_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['semiconductor_cluster_json', 'market_regime']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('MARKET_WEIGHT_AWARE_CLUSTER_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for MEAN_REVERSION_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'MEAN_REVERSION_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['close_price', 'ma20']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('MEAN_REVERSION_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for OVERHANG_PRESSURE_V1."""
|
||||
|
||||
FORMULA_ID = 'OVERHANG_PRESSURE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['frg_5d_sh', 'frg_20d_sh', 'volume', 'avg_volume_5d', 'flow_credit']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('OVERHANG_PRESSURE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for OVERSOLD_DELAY_V1."""
|
||||
|
||||
FORMULA_ID = 'OVERSOLD_DELAY_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['rsi_14', 'current_price', 'cash_shortfall_krw']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('OVERSOLD_DELAY_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for PATTERN_BLACKLIST_AUTO_V1."""
|
||||
|
||||
FORMULA_ID = 'PATTERN_BLACKLIST_AUTO_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['trade_quality_json', 'monthly_history']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('PATTERN_BLACKLIST_AUTO_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for PEG_SCORE_V1."""
|
||||
|
||||
FORMULA_ID = 'PEG_SCORE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['forward_pe', 'eps_growth_3y_cagr_pct', 'sector_median_forward_pe']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('PEG_SCORE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for PORTFOLIO_ALPHA_CONFIDENCE_PER_TICKER_V1."""
|
||||
|
||||
FORMULA_ID = 'PORTFOLIO_ALPHA_CONFIDENCE_PER_TICKER_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = []
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('PORTFOLIO_ALPHA_CONFIDENCE_PER_TICKER_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for PORTFOLIO_BAND_STATUS_V1."""
|
||||
|
||||
FORMULA_ID = 'PORTFOLIO_BAND_STATUS_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['current_weight_pct', 'target_band_min_pct', 'target_band_max_pct']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('PORTFOLIO_BAND_STATUS_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for PORTFOLIO_BETA_V1."""
|
||||
|
||||
FORMULA_ID = 'PORTFOLIO_BETA_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['beta_i', 'market_value_i', 'total_equity_value']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('PORTFOLIO_BETA_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for PORTFOLIO_CORRELATION_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'PORTFOLIO_CORRELATION_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['ticker', 'price.ret20D', 'beta_proxy', 'weight_pct']
|
||||
FORMULA_OUTPUT_FIELDS = [{'field': 'satellite_cluster_beta'}, {'field': 'effective_portfolio_beta'}, {'field': 'high_corr_pairs', 'unit': 'list [{ticker1,ticker2,corr_coef}]'}, {'field': 'correlation_gate_status', 'unit': 'enum [CORRELATION_PASS,CORRELATION_WARN,CORRELATION_BLOCK]'}]
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('PORTFOLIO_CORRELATION_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for PORTFOLIO_DRAWDOWN_GATE_V1."""
|
||||
|
||||
FORMULA_ID = 'PORTFOLIO_DRAWDOWN_GATE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['portfolio_peak_krw', 'total_asset_krw']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('PORTFOLIO_DRAWDOWN_GATE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for POSITION_COUNT_LIMIT_V1."""
|
||||
|
||||
FORMULA_ID = 'POSITION_COUNT_LIMIT_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['position_count', 'market_regime']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('POSITION_COUNT_LIMIT_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for POSITION_SIZE_REGIME_SCALE_V1."""
|
||||
|
||||
FORMULA_ID = 'POSITION_SIZE_REGIME_SCALE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['market_regime']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('POSITION_SIZE_REGIME_SCALE_V1' + ' is a generated stub.')
|
||||
@@ -0,0 +1,10 @@
|
||||
"""Auto-generated formula stub for POSITION_SIZE_V1."""
|
||||
|
||||
FORMULA_ID = 'POSITION_SIZE_V1'
|
||||
FORMULA_OWNER = 'TODO_REQUIRED'
|
||||
FORMULA_STATUS = 'TODO_REQUIRED'
|
||||
FORMULA_INPUT_FIELDS = ['total_asset', 'final_risk_budget', 'atr20', 'atr_multiplier', 'available_cash', 'entry_price', 'target_weight_limit_amount', 'sector_limit_amount', 'liquidity_limit_amount']
|
||||
FORMULA_OUTPUT_FIELDS = []
|
||||
|
||||
def execute(inputs: dict[str, object]) -> dict[str, object]:
|
||||
raise NotImplementedError('POSITION_SIZE_V1' + ' is a generated stub.')
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user