Beispiel #1
0
class ExmoPair(db.Model):
    """docstring for PairSettings"""
    id = db.Column(db.Integer, primary_key=True)
    exchange_id = db.Column(db.Integer, db.ForeignKey('exchange.id'))
    ticker = db.Column(db.String(24))
    orders = db.relationship('ExmoOrder', backref='pair', lazy=True)

    # * Exchange pair_settings:
    min_quantity = db.Column(db.Float)  # minimum quantity per order
    max_quantity = db.Column(db.Float)  # maximum quantity per order
    min_price = db.Column(db.Float)  # minimum order price
    max_price = db.Column(db.Float)  # maximum order price
    min_amount = db.Column(db.Float)  # minimum order amount
    max_amount = db.Column(db.Float)  # maximum order amount

    def __init__(self, exchange_id, ticker):
        self.exchange_id = exchange_id
        self.ticker = ticker
        self.update_pair_settings()

    def update_pair_settings(self):
        get_settings = ExmoAPI().pair_settings()
        self.min_quantity = get_settings[self.ticker]['min_quantity']
        self.max_quantity = get_settings[self.ticker]['max_quantity']
        self.min_price = get_settings[self.ticker]['min_price']
        self.max_price = get_settings[self.ticker]['max_price']
        self.min_amount = get_settings[self.ticker]['min_amount']
        self.max_amount = get_settings[self.ticker]['max_amount']

    def __repr__(self):
        return '<Pair {}>'.format(self.ticker)
Beispiel #2
0
class ExmoCurrency(db.Model):
    """docstring for Currency"""
    id = db.Column(db.Integer, primary_key=True)
    exchange_id = db.Column(db.Integer, db.ForeignKey('exchange.id'))
    ticker = db.Column(db.String(24))

    def __repr__(self):
        return '<Currency {}>'.format(self.ticker)
Beispiel #3
0
class ExmoOrder(db.Model):
    """docstring for UserOrder"""
    id = db.Column(db.Integer, primary_key=True)
    trade_profile_id = db.Column(db.Integer, db.ForeignKey('trade_profile.id'))
    pair_id = db.Column(db.Integer, db.ForeignKey('exmo_pair.id'))
    status = db.Column(db.String(24))  # stop-loss||take-profit||open||cancel

    # * Exchange order settings:
    # order_id = db.Column(db.BigInteger)  # order id
    order_id = db.Column(db.String(24))
    created = db.Column(db.DateTime)  # date and time of order creation
    order_type = db.Column(db.String(24))  # (market)_buy||sell_(total)
    price = db.Column(db.Float)  # order price
    quantity = db.Column(db.Float)  # quantity per order
    amount = db.Column(db.Float)  # order amount

    # ! Relationship

    trades = db.relationship('ExmoOrderTrades', backref='order', lazy=True)

    def __init__(self, trade_profile_id, ticker, status, order_id):
        self.trade_profile_id = trade_profile_id
        self.pair_id = ExmoPair.query.filter_by(ticker=ticker).first().id
        self.status = status
        self.order_id = order_id
        self.get_order_params(order_id)

    def get_order_params(self, order_id):
        trade_profile = TradeProfile.query.get(self.trade_profile_id)
        current_pair = ExmoPair.query.get(self.pair_id)
        user_open_orders = ExmoAPI(
            trade_profile.public_key,
            trade_profile.secret_key).user_open_orders()
        current_order = user_open_orders[current_pair.ticker]
        for item in current_order:
            if item['order_id'] == str(order_id):
                self.order_id = item['order_id']
                self.created = datetime.fromtimestamp(int(item['created']))
                self.order_type = item['type']
                self.price = item['price']
                self.quantity = item['quantity']
                self.amount = item['amount']

    def __repr__(self):
        return '<ExmoOrder_id {}>'.format(self.order_id)
Beispiel #4
0
class TradeProfile(db.Model):
    """docstring for PrivateSettings"""
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    exchange_id = db.Column(db.Integer, db.ForeignKey('exchange.id'))
    name = db.Column(db.String(12))
    secret_key = db.Column(db.String(128))
    public_key = db.Column(db.String(128))

    # ! Relationship

    # * Exmo:
    exmo_orders = db.relationship('ExmoOrder',
                                  backref='trade_profile',
                                  lazy=True)

    def __repr__(self):
        return '<Name: {}>'.format(self.name)
Beispiel #5
0
class ExmoOrderTrades(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    exmo_order_id = db.Column(db.Integer, db.ForeignKey('exmo_order.id'))

    # * Exchange order settings:
    trade_id = db.Column(db.String(24))  # transaction id
    date = db.Column(db.DateTime)  # transaction date and time
    quantity = db.Column(db.Float)  # quantity per transaction
    price = db.Column(db.Float)  # transaction price
    amount = db.Column(db.Float)  # transaction amount
Beispiel #6
0
class User(db.Model):
    """docstring for Users """
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True)
    password = db.Column(db.String(512))
    email = db.Column(db.String(120), unique=True)
    roles = db.Column(db.Text)
    is_active = db.Column(db.Boolean, default=True, server_default='true')

    # ! Relationship

    trade_profiles = db.relationship('TradeProfile', backref='user', lazy=True)

    # ! Guard Flask-Praetorian help methods

    @property
    def rolenames(self):
        try:
            return self.roles.split(',')
        except Exception:
            return []

    @classmethod
    def lookup(cls, username):
        return cls.query.filter_by(username=username).one_or_none()

    @classmethod
    def identify(cls, id):
        return cls.query.get(id)

    @property
    def identity(self):
        return self.id

    def is_valid(self):
        return self.is_active

    def set_password(self, password):
        self.password = guard.hash_password(password)

    def __repr__(self):
        return '<User: {}>'.format(self.username)
Beispiel #7
0
class Exchange(db.Model):
    """docstring for Exchange"""
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))

    # ! Relationship

    trade_profiles = db.relationship('TradeProfile',
                                     backref='exchange',
                                     lazy=True)

    # * Exmo:
    exmo_currencies = db.relationship('ExmoCurrency',
                                      backref='exchange',
                                      lazy=True)
    exmo_pairs = db.relationship('ExmoPair', backref='exchange', lazy=True)

    def __repr__(self):
        return '<Exchange {}>'.format(self.name)