pattern-analysis / pattern_analyzer.py
tmmdev's picture
Initial commit with clean codebase
5913c8f
raw
history blame
3.01 kB
from transformers import AutoModelForCausalLM, AutoTokenizer
import numpy as np
import pandas as pd
import json
from pattern_logic import PatternLogic
class PatternAnalyzer:
def __init__(self):
self.model = AutoModelForCausalLM.from_pretrained("tmm-dev/codellama-pattern-analysis")
self.tokenizer = AutoTokenizer.from_pretrained("tmm-dev/codellama-pattern-analysis")
self.basic_patterns = {
'channel': {'min_points': 4, 'confidence_threshold': 0.7},
'triangle': {'min_points': 3, 'confidence_threshold': 0.75},
'support': {'min_touches': 2, 'confidence_threshold': 0.8},
'resistance': {'min_touches': 2, 'confidence_threshold': 0.8},
'double_top': {'max_deviation': 0.02, 'confidence_threshold': 0.85},
'double_bottom': {'max_deviation': 0.02, 'confidence_threshold': 0.85}
}
self.pattern_logic = PatternLogic()
def analyze_data(self, ohlcv_data):
data_prompt = f"""TASK: Identify high-confidence technical patterns only.
Minimum confidence threshold: 0.8
Required pattern criteria:
1. Channel: Must have at least 3 touching points
2. Triangle: Must have clear convergence point
3. Support: Minimum 3 price bounces
4. Resistance: Minimum 3 price rejections
INPUT DATA:
{ohlcv_data.to_json(orient='records')}
Return ONLY high-confidence patterns (>0.8) in JSON format with exact price coordinates."""
inputs = self.tokenizer(data_prompt, return_tensors="pt")
outputs = self.model.generate(**inputs, max_length=1000)
analysis = self.tokenizer.decode(outputs[0])
return self.parse_analysis(analysis)
def parse_analysis(self, analysis_text):
try:
json_start = analysis_text.find('{')
json_end = analysis_text.rfind('}') + 1
json_str = analysis_text[json_start:json_end]
analysis_data = json.loads(json_str)
patterns = []
for pattern in analysis_data.get('patterns', []):
pattern_type = pattern.get('type')
if pattern_type in self.basic_patterns:
threshold = self.basic_patterns[pattern_type]['confidence_threshold']
if pattern.get('confidence', 0) >= threshold:
patterns.append({
'type': pattern_type,
'coordinates': pattern.get('coordinates', []),
'confidence': pattern.get('confidence'),
'metadata': {
'rules': self.basic_patterns[pattern_type],
'timestamp': pd.Timestamp.now().isoformat()
}
})
return patterns
except json.JSONDecodeError:
return []