eshan6704 commited on
Commit
a4d29b7
·
verified ·
1 Parent(s): 9b86c34

Create ta_indi_pat.py

Browse files
Files changed (1) hide show
  1. ta_indi_pat.py +76 -0
ta_indi_pat.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import pandas as pd
3
+ import talib
4
+ import numpy as np
5
+
6
+ def patterns(df):
7
+
8
+ # Copy and normalize columns
9
+ df = df.copy()
10
+ required_cols = ['Open','High','Low','Close']
11
+
12
+ # DataFrame to store patterns only
13
+ pattern_df = pd.DataFrame(index=df.index)
14
+
15
+ # Get all CDL pattern functions
16
+ pattern_list = [f for f in dir(talib) if f.startswith("CDL")]
17
+
18
+ # Apply each pattern function
19
+ for pattern in pattern_list:
20
+ func = getattr(talib, pattern)
21
+ result = func(
22
+ df['Open'].values.astype(float),
23
+ df['High'].values.astype(float),
24
+ df['Low'].values.astype(float),
25
+ df['Close'].values.astype(float)
26
+ )
27
+
28
+ # Convert +100/-100 → 1, 0 stays 0
29
+ pattern_df[pattern] = (result != 0).astype(int)
30
+
31
+ return pattern_df
32
+
33
+ def indicators(df):
34
+
35
+ df_std = df.copy()
36
+ df_std.columns = [c.lower() for c in df_std.columns]
37
+
38
+ ohlcv = {
39
+ 'open': df_std.get('open'),
40
+ 'high': df_std.get('high'),
41
+ 'low': df_std.get('low'),
42
+ 'close': df_std.get('close'),
43
+ 'volume': df_std.get('volume')
44
+ }
45
+
46
+ indicator_list = [f for f in dir(talib) if not f.startswith("CDL") and not f.startswith("_")]
47
+
48
+ df_list = [] # store all indicator columns as separate DataFrames
49
+
50
+ for name in indicator_list:
51
+ func = getattr(talib, name)
52
+ try:
53
+ if 'close' in ohlcv and ohlcv['close'] is not None:
54
+ result = func(ohlcv['close'].values.astype(float))
55
+ else:
56
+ continue
57
+
58
+ # If function returns tuple, add each output separately
59
+ if isinstance(result, tuple):
60
+ for i, arr in enumerate(result):
61
+ col_name = f"{name}_{i}"
62
+ temp_df = pd.DataFrame(arr, index=df.index, columns=[col_name])
63
+ df_list.append(temp_df)
64
+ else:
65
+ temp_df = pd.DataFrame(result, index=df.index, columns=[name])
66
+ df_list.append(temp_df)
67
+ except:
68
+ continue
69
+
70
+ # Concatenate all columns at once
71
+ if df_list:
72
+ indicator_df = pd.concat(df_list, axis=1)
73
+ else:
74
+ indicator_df = pd.DataFrame(index=df.index)
75
+
76
+ return indicator_df