eshan6704 commited on
Commit
b43adb0
·
verified ·
1 Parent(s): 97848e1

Update ta_indi_pat.py

Browse files
Files changed (1) hide show
  1. ta_indi_pat.py +26 -46
ta_indi_pat.py CHANGED
@@ -4,31 +4,27 @@ import numpy as np
4
 
5
  def patterns(df):
6
  """
7
- Return a DataFrame of all CDL patterns with 0/1,
8
- adding the original 'Date' column as the first column.
9
  """
10
  df = df.copy()
11
- required_cols = ['Open','High','Low','Close']
12
-
13
- for col in required_cols:
14
  if col not in df.columns:
15
  raise ValueError(f"Missing column: {col}")
16
 
17
- pattern_df = pd.DataFrame(index=df.index)
18
- pattern_list = [f for f in dir(talib) if f.startswith("CDL")]
19
-
20
- for pattern in pattern_list:
21
- func = getattr(talib, pattern)
22
- result = func(
23
  df['Open'].values.astype(float),
24
  df['High'].values.astype(float),
25
  df['Low'].values.astype(float),
26
  df['Close'].values.astype(float)
27
- )
28
- pattern_df[pattern] = (result != 0).astype(int)
 
29
 
30
- # Add original Date as first column
31
- pattern_df.insert(0, 'Date', df['Date'].values)
 
32
 
33
  return pattern_df
34
 
@@ -36,52 +32,36 @@ def patterns(df):
36
  def indicators(df):
37
  """
38
  Return a DataFrame of numeric TA-Lib indicators,
39
- adding the original 'Date' column as the first column.
40
  """
41
  df_std = df.copy()
42
  df_std.columns = [c.lower() for c in df_std.columns]
43
 
44
- ohlcv = {
45
- 'open': df_std.get('open'),
46
- 'high': df_std.get('high'),
47
- 'low': df_std.get('low'),
48
- 'close': df_std.get('close'),
49
- 'volume': df_std.get('volume')
50
- }
51
-
52
- indicator_list = [
53
- f for f in dir(talib)
54
- if not f.startswith("CDL") and not f.startswith("_") and f not in ["wraps", "wrapped_func"]
55
- ]
56
-
57
- df_list = []
58
- original_index = df.index
59
 
 
60
  for name in indicator_list:
61
  func = getattr(talib, name)
62
  try:
63
- if ohlcv['close'] is not None:
64
- result = func(ohlcv['close'].values.astype(float))
65
- else:
66
  continue
67
-
 
68
  if isinstance(result, tuple):
69
  for i, arr in enumerate(result):
70
- col_name = f"{name}_{i}"
71
- temp_df = pd.DataFrame(arr, index=original_index, columns=[col_name])
72
- df_list.append(temp_df)
73
  else:
74
- temp_df = pd.DataFrame(result, index=original_index, columns=[name])
75
- df_list.append(temp_df)
76
  except:
77
  continue
78
 
79
- if df_list:
80
- indicator_df = pd.concat(df_list, axis=1)
81
- else:
82
- indicator_df = pd.DataFrame(index=original_index)
83
 
84
- # Add original Date as first column
85
- indicator_df.insert(0, 'Date', df['Date'].values)
 
86
 
87
  return indicator_df
 
4
 
5
  def patterns(df):
6
  """
7
+ Return a DataFrame of all CDL patterns (0/1),
8
+ with original Date + OHLC as the first columns.
9
  """
10
  df = df.copy()
11
+ for col in ['Open','High','Low','Close']:
 
 
12
  if col not in df.columns:
13
  raise ValueError(f"Missing column: {col}")
14
 
15
+ pattern_df = pd.DataFrame({
16
+ p: (getattr(talib, p)(
 
 
 
 
17
  df['Open'].values.astype(float),
18
  df['High'].values.astype(float),
19
  df['Low'].values.astype(float),
20
  df['Close'].values.astype(float)
21
+ ) != 0).astype(int)
22
+ for p in dir(talib) if p.startswith("CDL")
23
+ }, index=df.index)
24
 
25
+ # Prepend Date + OHLC
26
+ for col in ['Date', 'Open', 'High', 'Low', 'Close'][::-1]:
27
+ pattern_df.insert(0, col, df[col].values)
28
 
29
  return pattern_df
30
 
 
32
  def indicators(df):
33
  """
34
  Return a DataFrame of numeric TA-Lib indicators,
35
+ with original Date + OHLC as the first columns.
36
  """
37
  df_std = df.copy()
38
  df_std.columns = [c.lower() for c in df_std.columns]
39
 
40
+ ohlcv = {k: df_std.get(k) for k in ['open','high','low','close','volume']}
41
+ indicator_list = [f for f in dir(talib)
42
+ if not f.startswith("CDL") and not f.startswith("_")
43
+ and f not in ["wraps", "wrapped_func"]]
 
 
 
 
 
 
 
 
 
 
 
44
 
45
+ dfs = []
46
  for name in indicator_list:
47
  func = getattr(talib, name)
48
  try:
49
+ if ohlcv['close'] is None:
 
 
50
  continue
51
+ result = func(ohlcv['close'].values.astype(float))
52
+ # handle tuple outputs
53
  if isinstance(result, tuple):
54
  for i, arr in enumerate(result):
55
+ dfs.append(pd.DataFrame(arr, index=df.index, columns=[f"{name}_{i}"]))
 
 
56
  else:
57
+ dfs.append(pd.DataFrame(result, index=df.index, columns=[name]))
 
58
  except:
59
  continue
60
 
61
+ indicator_df = pd.concat(dfs, axis=1) if dfs else pd.DataFrame(index=df.index)
 
 
 
62
 
63
+ # Prepend Date + OHLC
64
+ for col in ['Date', 'Open', 'High', 'Low', 'Close'][::-1]:
65
+ indicator_df.insert(0, col, df[col].values)
66
 
67
  return indicator_df