смотри вот моя модель и датасет:
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.utils import resample
from imblearn.under_sampling import RandomUnderSampler

df = pd.read_csv('BTCUSDT_M5_220301_241210.csv')
df.timestamp = pd.to_datetime(df.timestamp)
df.columns = ['date', 'time', 'timestamp', 'open', 'high', 'low', 'close', 'volume']
df.set_index('timestamp', inplace=True)
df = df.iloc[-10_000:]
window1 = 5
window2 = 50
df['price_avg'] = (df['open'] + df['close']) / 2
df['sma1'] = df['price_avg'].rolling(window=window1).mean()
df['upper_band1'] = df['high'].rolling(window=window1).mean() + (2 * df['high'].rolling(window=window1).std())
df['lower_band1'] = df['low'].rolling(window=window1).mean() - (2 * df['low'].rolling(window=window1).std())
df['sma2'] = df['price_avg'].rolling(window=window2).mean()
df['upper_band2'] = df['high'].rolling(window=window2).mean() + (2 * df['high'].rolling(window=window2).std())
df['lower_band2'] = df['low'].rolling(window=window2).mean() - (2 * df['low'].rolling(window=window2).std())
lags = 55
for lag in range(1, lags + 1):
    df[f'body_avg_lag_{lag}'] = (df['price_avg'] / df['price_avg'].shift(lag))-1
    df[f'sma1_lag_{lag}'] = (df['sma1'] / df['sma1'].shift(lag))-1
    df[f'sma2_lag_{lag}'] = (df['sma2'] / df['sma2'].shift(lag))-1
    df[f'upper_band1_lag_{lag}'] = (df['upper_band1'] / df['upper_band1'].shift(lag))-1
    df[f'upper_band2_lag_{lag}'] = (df['upper_band2'] / df['upper_band2'].shift(lag))-1
    df[f'lower_band1_lag_{lag}'] = (df['lower_band1'] / df['lower_band1'].shift(lag))-1
    df[f'lower_band2_lag_{lag}'] = (df['lower_band2'] / df['lower_band2'].shift(lag))-1
lag_columns = [col for col in df.columns if 'lag_' in col]
Q = 5
for col in lag_columns:
    df[f'{col}_cat'] = pd.qcut(df[col], q=Q, labels=False)/Q
cat_columns = [col for col in df.columns if 'cat_' in col]
shift_lag = window1*1
df['target'] = (df['sma1'].shift(-shift_lag) > df['sma1']).astype(int)
y_column = 'target'
df = df.iloc[max(window2*2, lags*2):-shift_lag]
test_size = 0.03
n_test = int(len(df) * test_size)
df_train = df.iloc[:-n_test]
df_test = df.iloc[-n_test:]

X_train_lags = df_train[lag_columns]
y_train = df_train[y_column]

X_test_lags = df_test[lag_columns]
y_test = df_test[y_column]

X_train_cats = df_train[[f'{col}_cat' for col in lag_columns]]
X_test_cats = df_test[[f'{col}_cat' for col in lag_columns]]

rus = RandomUnderSampler(random_state=42)
X_train_lags, y_train = rus.fit_resample(X_train_lags, y_train)
X_train_cats, y_train = rus.fit_resample(X_train_cats, y_train)

log_reg_lags = LogisticRegression()
log_reg_cats = LogisticRegression()

log_reg_lags.fit(X_train_lags, y_train)

# Обучение на категориальных данных
log_reg_cats.fit(X_train_cats, y_train)

probs_lags = log_reg_lags.predict_proba(X_test_lags)[:, 1]  # Вероятности положительного класса
probs_cats = log_reg_cats.predict_proba(X_test_cats)[:, 1]  # Вероятности положительного класса

final_probs = (probs_lags + probs_cats) / 2  # усредняем вероятности
final_predictions = (final_probs > 0.55).astype(int)  # Преобразуем в бинарные предсказания при пороге 0.5

print(classification_report(y_test, final_predictions))
print(confusion_matrix(y_test, final_predictions))

теперь что я хочу- обучить эту модель и ту где таргет будет на sma2. и на X_test прогнать по графику сделки. то есть если открытой сделки нет, а обе модели говорят что дальше рост- входим в сделку. после- если одна из моделей говорит что дальше роста нет, выходим. и посчитать результат сделок. покажешь код?