Here is an example of using a Random Forest Classifier with a dataset consisting of one feature (lagged MACD histogram value) and nominal target (positive or negative return) encoded as 1/0.
import numpy as np
import pandas as pd
import talib.abstract as ta
from datetime import datetime
from sklearn.ensemble import RandomForestClassifier
data = pd.read_csv('data/BTCUSDT.csv', index_col = 0, parse_dates=True)
data['return'] = data['close'].pct_change()
data['good'] = np.where(data['return'] > 0, 1, 0)
data_values = pd.DataFrame(data['good'].values)
macd = ta.MACD(data)
macd_values = pd.DataFrame(macd.macdhist.values)
df = pd.concat([macd_values.shift(1), data_values], axis=1)
df.columns = ['macd', 'target']
df.dropna(inplace=True)
df.reset_index(drop=True, inplace=True)
# df.to_csv('data/macd.csv', index=False)
X = df.values
# train, test, etc. are numpy arrays
test_start = datetime(2023,1,1,0,0,0)
test_size = data.index.get_loc(test_start)
train, test = X[0:test_size], X[test_size:]
train_X, train_y = train[:,0], train[:,1]
test_X, test_y = test[:,0], test[:,1]
train_X = train_X.reshape(-1, 1)
test_X = test_X.reshape(-1, 1)
clf=RandomForestClassifier()
clf.fit(train_X, train_y)
predictions = clf.predict(test_X)
print (clf.score(train_X, train_y))
print(clf.score(test_X, test_y))