From 63486bc7b5988f43d71568e6a5a0bfe35d6b0858 Mon Sep 17 00:00:00 2001 From: Marko Djordjevic Date: Sun, 15 Feb 2026 21:08:20 +0100 Subject: [PATCH] fix(ml): add CCI to hlc_indicators list CCI (Commodity Channel Index) requires high, low, and close prices --- candle_annotator@1.0.0 | 0 package.json | 3 +- scripts/list_charts.ts | 34 ++++++++++++++++++ .../__pycache__/engineer.cpython-313.pyc | Bin 0 -> 5879 bytes .../talib_features.cpython-313.pyc | Bin 8394 -> 8396 bytes services/ml/features/talib_features.py | 2 +- tsx | 0 7 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 candle_annotator@1.0.0 create mode 100644 scripts/list_charts.ts create mode 100644 services/ml/features/__pycache__/engineer.cpython-313.pyc create mode 100644 tsx diff --git a/candle_annotator@1.0.0 b/candle_annotator@1.0.0 new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json index 6c1fcdc..3e6e18d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "build": "next build", "start": "next start", "lint": "next lint", - "import-annotations": "tsx scripts/import_talib_annotations.ts" + "import-annotations": "tsx scripts/import_talib_annotations.ts", + "list-charts": "tsx scripts/list_charts.ts" }, "keywords": [], "author": "", diff --git a/scripts/list_charts.ts b/scripts/list_charts.ts new file mode 100644 index 0000000..b2931e1 --- /dev/null +++ b/scripts/list_charts.ts @@ -0,0 +1,34 @@ +#!/usr/bin/env tsx +/** + * List all charts in the database + */ + +import { db } from '../src/lib/db'; +import { charts } from '../src/lib/db/schema'; + +async function main() { + console.log('=== Charts in Database ===\n'); + + const allCharts = await db.select().from(charts).orderBy(charts.created_at); + + if (allCharts.length === 0) { + console.log('No charts found.\n'); + console.log('To create a chart:'); + console.log('1. Upload a CSV file at http://localhost:3000'); + console.log('2. Or use the create-chart script (coming soon)'); + } else { + console.log(`Found ${allCharts.length} chart(s):\n`); + for (const chart of allCharts) { + const date = new Date(chart.created_at * 1000).toISOString(); + console.log(` ID: ${chart.id}`); + console.log(` Name: ${chart.name}`); + console.log(` Created: ${date}`); + console.log(''); + } + } +} + +main().catch((error) => { + console.error('Error:', error.message); + process.exit(1); +}); diff --git a/services/ml/features/__pycache__/engineer.cpython-313.pyc b/services/ml/features/__pycache__/engineer.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e98832905a227f953fa2e3446bb09f2aab0d3a79 GIT binary patch literal 5879 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 E54@X+(*OVf literal 0 HcmV?d00001 diff --git a/services/ml/features/__pycache__/talib_features.cpython-313.pyc b/services/ml/features/__pycache__/talib_features.cpython-313.pyc index b79b62118d09720ae8c083587537cd35a5d589e0..8ff5382cd49776c2e297ad9237006ecf32a69536 100644 GIT binary patch delta 137 zcmX@*c*c?UGcPX}0}yObpOhK9k@p^-j6Op!Qy^m=Cy-_a(p*5A1xRxPY1YZ?{F#hw zlMDG}8QCZI^UE`GOkNLUb51_XpUTL!*;t^8QB;%p7F(!Kh<~v2Efzn=kf0(vpz)h` g3m#+<;%8)FXkhrH#3H2E;Pr`*K}>)1WHECt0Q=P;zyJUM delta 135 zcmX@(c*>FYGcPX}0}!~cnV1>2k@p^-OfXY0vp!QEr#?e4OCVz&7m#KJ(%e9rZ8AH5 zCL{agLVj6Bj>-M}@{F95*8|yHlh5*}GIDP=7N}z6yTumj6XGB2e2c};F(hd7A;E(z i;v$R;3=IsQlvsrH8oWO6F^J1AV7nlyzIm#cITrx%R3ftg diff --git a/services/ml/features/talib_features.py b/services/ml/features/talib_features.py index 0ba0d5b..e6d5dfb 100644 --- a/services/ml/features/talib_features.py +++ b/services/ml/features/talib_features.py @@ -136,7 +136,7 @@ def _call_talib_function( 'HT_SINE', 'HT_TRENDMODE'] # High-Low-Close indicators - hlc_indicators = ['ULTOSC', 'NATR'] + hlc_indicators = ['ULTOSC', 'NATR', 'CCI'] # OHLC indicators ohlc_indicators = ['CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', diff --git a/tsx b/tsx new file mode 100644 index 0000000..e69de29