<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin

db = SQLAlchemy()

class User(db.Model, UserMixin):
    __tablename__ = 'users'  # Explicit table name
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), nullable=False)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password_hash = db.Column(db.String(255), nullable=False)  # Updated column name
    api_key = db.Column(db.String(255))
    api_secret = db.Column(db.String(255))

class BotParameters(db.Model, UserMixin):  # Removed UserMixin
    __tablename__ = 'bot_parameters'  # Explicit table name
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)  # Corrected foreign key

    # General Parameters
    top_n = db.Column(db.Integer, default=10)  # Number of top assets to trade
    candle_interval = db.Column(db.String(10), default='1h')  # Time interval for candles (e.g., 1h, 4h)
    min_candles = db.Column(db.Integer, default=144)  # Minimum number of candles to analyze

    # Volatility Parameters
    volatility_interval = db.Column(db.String(10), default='1h')  # Interval for volatility calculation
    volatility_period = db.Column(db.Integer, default=20)  # Period for volatility calculation

    # RSI Parameters
    rsi_interval = db.Column(db.String(10), default='1h')  # Interval for RSI calculation
    rsi_num_candles = db.Column(db.Integer, default=144)  # Number of candles for RSI calculation
    rsi_period = db.Column(db.Integer, default=14)  # Period for RSI calculation

    # Moving Average Parameters
    moving_average_interval = db.Column(db.String(10), default='1h')  # Interval for MA calculation
    moving_average_num_candles = db.Column(db.Integer, default=144)  # Number of candles for MA calculation
    short_ma_period = db.Column(db.Integer, default=9)  # Short MA period
    long_ma_period = db.Column(db.Integer, default=21)  # Long MA period
    trend_short_ma_period = db.Column(db.Integer, default=9)  # Short MA period for trend
    trend_long_ma_period = db.Column(db.Integer, default=21)  # Long MA period for trend

    # ADX Parameters
    adx_period = db.Column(db.Integer, default=14)  # Period for ADX calculation

    # Scaling Factor
    scaling_factor = db.Column(db.Float, default=0.5)  # Scaling factor for position sizing

    # Trading Parameters
    leverage = db.Column(db.Integer, default=10)  # Leverage for trading
    position_size_percentage = db.Column(db.Float, default=0.08)  # Percentage of portfolio to risk per trade
    tp_percentage = db.Column(db.Float, default=0.006)  # Take profit percentage
    sl_percentage = db.Column(db.Float, default=0.006)  # Stop loss percentage

    # Max Trades
    max_long_trades = db.Column(db.Integer, default=6)  # Maximum number of long trades
    max_short_trades = db.Column(db.Integer, default=6)  # Maximum number of short trades

    # Relationship with User
    user = db.relationship('User', backref=db.backref('bot_parameters', lazy=True))</pre></body></html>