code-review-fix task 14.5: remove duplicate TALIB_PATTERNS dict and import from single source

This commit is contained in:
Marko Djordjevic 2026-02-18 20:55:14 +01:00
parent d4c14df284
commit f529ada877

View file

@ -12,6 +12,7 @@ Usage:
import argparse import argparse
import json import json
import logging import logging
import sys
from pathlib import Path from pathlib import Path
from typing import List, Dict, Any 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") print("Note: You may need to install the C library first. See DEPLOYMENT.md")
exit(1) 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') logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s')
logger = logging.getLogger(__name__) 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: def load_ohlcv(input_path: str) -> pd.DataFrame:
""" """