File size: 2,327 Bytes
5913c8f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from lightweight_charts import Chart
import pandas as pd
import numpy as np

class ChartMaker:
    def __init__(self):
        self.patterns = [
            'channel', 'triangle', 'head_shoulders',
            'double_top', 'double_bottom', 'wedge',
            'flag', 'pennant'
        ]
        
        self.indicators = [
            'ema', 'sma', 'rsi', 'macd', 
            'bollinger', 'ichimoku', 'pivot_points'
        ]
    
    def create_pattern_chart(self, ohlcv_data, patterns):
        chart = Chart()
        
        # Format OHLCV data for charting
        chart_data = []
        for index, row in ohlcv_data.iterrows():
            data_point = {
                'time': row['time'] if isinstance(row['time'], int) else int(row['time'].timestamp() * 1000),
                'open': float(row['open']),
                'high': float(row['high']),
                'low': float(row['low']),
                'close': float(row['close']),
                'volume': float(row['volume'])
            }
            chart_data.append(data_point)
        
        # Create main price series
        chart.create_series('price', 'Candlestick', chart_data)
        
        # Add volume series
        volume_data = [{
            'time': d['time'],
            'value': d['volume']
        } for d in chart_data]
        chart.create_series('volume', 'Histogram', volume_data)
        
        # Add patterns as overlays
        for pattern in patterns:
            if pattern['type'] in self.patterns and 'coordinates' in pattern:
                chart.create_series(
                    f"pattern_{pattern['type']}", 
                    'Line', 
                    pattern['coordinates'],
                    {
                        'color': 'rgba(76, 175, 80, 0.5)',
                        'lineWidth': 2,
                        'title': f"{pattern['type']} ({pattern.get('confidence', 0):.2f})"
                    }
                )
        
        return chart
    
    
    def generate_all_variations(self, ohlcv_data):
        charts = []
        for pattern in self.patterns:
            pattern_chart = self.create_pattern_chart(ohlcv_data, [{'type': pattern}])
            charts.append({
                'type': pattern,
                'chart': pattern_chart
            })
        return charts