From f529ada877e2e930a77a51dbe13f37970b23cfb4 Mon Sep 17 00:00:00 2001 From: Marko Djordjevic Date: Wed, 18 Feb 2026 20:55:14 +0100 Subject: [PATCH] code-review-fix task 14.5: remove duplicate TALIB_PATTERNS dict and import from single source --- services/ml/generate_talib_annotations.py | 64 +++-------------------- 1 file changed, 6 insertions(+), 58 deletions(-) diff --git a/services/ml/generate_talib_annotations.py b/services/ml/generate_talib_annotations.py index ee1da96..2e3158a 100644 --- a/services/ml/generate_talib_annotations.py +++ b/services/ml/generate_talib_annotations.py @@ -12,6 +12,7 @@ Usage: import argparse import json import logging +import sys from pathlib import Path from typing import List, Dict, Any @@ -25,67 +26,14 @@ except ImportError: print("Note: You may need to install the C library first. See DEPLOYMENT.md") exit(1) +# Add app directory to path to import from app.patterns +sys.path.insert(0, str(Path(__file__).parent / 'app')) + +from patterns import TALIB_PATTERNS + logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s') logger = logging.getLogger(__name__) -# TA-Lib candlestick pattern functions with friendly names -TALIB_PATTERNS = { - 'CDLENGULFING': 'Engulfing', - 'CDLHAMMER': 'Hammer', - 'CDLINVERTEDHAMMER': 'Inverted Hammer', - 'CDLSHOOTINGSTAR': 'Shooting Star', - 'CDLDOJI': 'Doji', - 'CDLDOJISTAR': 'Doji Star', - 'CDLMORNINGSTAR': 'Morning Star', - 'CDLEVENINGSTAR': 'Evening Star', - 'CDLHARAMI': 'Harami', - 'CDLHARAMICROSS': 'Harami Cross', - 'CDLPIERCING': 'Piercing', - 'CDLDARKCLOUDCOVER': 'Dark Cloud Cover', - 'CDLMARUBOZU': 'Marubozu', - 'CDLSPINNINGTOP': 'Spinning Top', - 'CDL3WHITESOLDIERS': 'Three White Soldiers', - 'CDL3BLACKCROWS': 'Three Black Crows', - 'CDLABANDONEDBABY': 'Abandoned Baby', - 'CDLADVANCEBLOCK': 'Advance Block', - 'CDLBELTHOLD': 'Belt Hold', - 'CDLBREAKAWAY': 'Breakaway', - 'CDLCLOSINGMARUBOZU': 'Closing Marubozu', - 'CDLCONCEALBABYSWALL': 'Concealing Baby Swallow', - 'CDLCOUNTERATTACK': 'Counterattack', - 'CDLDRAGONFLYDOJI': 'Dragonfly Doji', - 'CDLGAPSIDESIDEWHITE': 'Up/Down Gap Side-by-Side White Lines', - 'CDLGRAVESTONEDOJI': 'Gravestone Doji', - 'CDLHANGINGMAN': 'Hanging Man', - 'CDLHIGHWAVE': 'High Wave', - 'CDLHIKKAKE': 'Hikkake', - 'CDLHIKKAKEMOD': 'Modified Hikkake', - 'CDLHOMINGPIGEON': 'Homing Pigeon', - 'CDLIDENTICAL3CROWS': 'Identical Three Crows', - 'CDLINNECK': 'In-Neck', - 'CDLKICKING': 'Kicking', - 'CDLKICKINGBYLENGTH': 'Kicking by Length', - 'CDLLADDERBOTTOM': 'Ladder Bottom', - 'CDLLONGLEGGEDDOJI': 'Long-Legged Doji', - 'CDLLONGLINE': 'Long Line', - 'CDLMATCHINGLOW': 'Matching Low', - 'CDLMATHOLD': 'Mat Hold', - 'CDLMORNINGDOJISTAR': 'Morning Doji Star', - 'CDLONNECK': 'On-Neck', - 'CDLRISEFALL3METHODS': 'Rising/Falling Three Methods', - 'CDLSEPARATINGLINES': 'Separating Lines', - 'CDLSHORTLINE': 'Short Line', - 'CDLSTALLEDPATTERN': 'Stalled Pattern', - 'CDLSTICKSANDWICH': 'Stick Sandwich', - 'CDLTAKURI': 'Takuri', - 'CDLTASUKIGAP': 'Tasuki Gap', - 'CDLTHRUSTING': 'Thrusting', - 'CDLTRISTAR': 'Tristar', - 'CDLUNIQUE3RIVER': 'Unique Three River', - 'CDLUPSIDEGAP2CROWS': 'Upside Gap Two Crows', - 'CDLXSIDEGAP3METHODS': 'Upside/Downside Gap Three Methods', -} - def load_ohlcv(input_path: str) -> pd.DataFrame: """