TA-Lib / ta-lib-python

Python wrapper for TA-Lib (http://ta-lib.org/).
http://ta-lib.github.io/ta-lib-python
Other
9.78k stars 1.77k forks source link

Pattern rec functions return all zeros #665

Open blexo opened 4 months ago

blexo commented 4 months ago

Not sure if I am misunderstanding something... but I am getting all zeros for many pattern rec functions...

numpy v1.26.4 pandas v2.2.2 TA-Lib v0.4.28

example code:

import numpy as np
import pandas as pd
import talib

# Create a sample DataFrame with OHLC data
data = {
    'Open': [22, 21, 20, 18, 16, 16, 18, 19, 20, 21, 22, 23, 24],
    'High': [23, 22, 21, 19, 17, 17, 19, 20, 21, 22, 23, 24, 25],
    'Low': [21, 20, 19, 17, 15, 15, 17, 18, 19, 20, 21, 22, 23],
    'Close': [21, 20, 18, 16, 16, 18, 19, 20, 21, 22, 23, 24, 25]
}
df = pd.DataFrame(data)

# Convert the DataFrame columns to NumPy arrays with type float64
open_prices = np.array(df['Open'], dtype='float64')
high_prices = np.array(df['High'], dtype='float64')
low_prices = np.array(df['Low'], dtype='float64')
close_prices = np.array(df['Close'], dtype='float64')

# Apply the CDLMORNINGSTAR function
morning_star = talib.CDLMORNINGSTAR(open_prices, high_prices, low_prices, close_prices)

# Print the input data and the result
print("Open Prices: ", open_prices)
print("High Prices: ", high_prices)
print("Low Prices: ", low_prices)
print("Close Prices: ", close_prices)
print("Morning Star Pattern: ", morning_star)

Results: Open Prices: [22. 21. 20. 18. 16. 16. 18. 19. 20. 21. 22. 23. 24.] High Prices: [23. 22. 21. 19. 17. 17. 19. 20. 21. 22. 23. 24. 25.] Low Prices: [21. 20. 19. 17. 15. 15. 17. 18. 19. 20. 21. 22. 23.] Close Prices: [21. 20. 18. 16. 16. 18. 19. 20. 21. 22. 23. 24. 25.] Morning Star Pattern: [0 0 0 0 0 0 0 0 0 0 0 0 0]

mrjbq7 commented 4 months ago

I mean, returning zeros isn't unusual.

Do you think that test case should return non-zero?

blexo commented 4 months ago

Here is a more extreme example... and it could just be that the code algo is different than what I was using as a learning example: https://commodity.com/technical-analysis/morning-star/

Day 4, sharply down (27 to 20) Day 5, slightly down (20 to 18) Day 6, sharply up (18 to 30)

data = { 'Open': [30, 29, 28, 27, 20, 18, 26, 28, 29, 30, 31, 32, 33], 'High': [31, 30, 29, 28, 26, 25, 27, 29, 30, 31, 32, 33, 34], 'Low': [29, 28, 27, 26, 24, 23, 25, 27, 28, 29, 30, 31, 32], 'Close': [29, 28, 27, 20, 18, 30, 28, 29, 30, 31, 32, 33, 34] }

I've tried various penetration values... from .1 to .3

Am I misunderstanding how it should work?

Dilibra commented 4 months ago

It seems that the issue arises because some fixed rules, such as criteria for determining whether a candlestick is a long, medium, or short bearish one, are hardcoded in the pattern recognition function. Is it possible to modify these hardcoded criteria into parameters that everyone can adjust according to their needs?

update: Sorry, I found a solution in a previous issue. I hope it can help you. #624