Source code for alchemist_lib.database.executed_order

import datetime as dt

from sqlalchemy import DateTime, String, ForeignKey, Integer, Column, Float, ForeignKeyConstraint
from sqlalchemy.orm import relationship

from . import Base



[docs]class ExecutedOrder(Base): """ Map class for table executed_order. - **order_datetime**: DateTime, primary_key. - **ticker**: String(16), primary_key. - **instrument_id**: Integer, primary_key. - **order_id**: String(150), not null. - **exchange_name**: String(150), not null, foreign_key(exchange.exchange_name). - **broker_name**: String(150), not null, foreign_key(broker.broker_name) - **order_type**: String(3), not null. - **operation**: String(4), not null. - **amount**: Float(20, 8), not null. - **price**: Float(20, 8), null. - **paid_fee**: Float(20, 8), null. Relationships: - **exchange**: List of Exchange instances. (One-to-Many) - **asset**: Asset instance. (One-to-Many) - **broker**: Broker instance. (One-to-Many) """ __tablename__ = "executed_order" __table_args__ = (ForeignKeyConstraint(["ticker", "instrument_id"], ["asset.ticker", "asset.instrument_id"], ondelete = "cascade"), ) order_datetime = Column(DateTime, primary_key = True) ticker = Column(String(16), primary_key = True) instrument_id = Column(Integer, primary_key = True) order_id = Column(String(150), nullable = False) exchange_name = Column(String(150), ForeignKey("exchange.exchange_name"), nullable = False) broker_name = Column(String(150), ForeignKey("broker.broker_name"), nullable = False) order_type = Column(String(3), nullable = False) operation = Column(String(4), nullable = False) amount = Column(Float(precision = 20, scale = 8, asdecimal = True), nullable = False) price = Column(Float(precision = 20, scale = 8, asdecimal = True), nullable = True) paid_fee = Column(Float(precision = 20, scale = 8, asdecimal = True), nullable = True) exchange = relationship("Exchange") asset = relationship("Asset") broker = relationship("Broker") def __init__(self, order_id, ticker, instrument_id, exchange_name, broker_name, order_type, operation, amount, price = None, paid_fee = 0, order_datetime = dt.datetime.utcnow()): """ Costructor method. Args: order_id (str): Order identified, the form depends of the enchange. order_datetime (datetime.datetime, optional): When the order is submitted. Default is utcnow(). ticker (str): Ticker code of the asset. instrument_id (int): Integer that identify tha type of financial instrument. exchange_name (str): Name of the exchange where the order is executed. broker_name (str): Name of the broker that execute the order. order_type (str): String that identify the type of order. Market, Limit, ecc. operation (str): The type of operation. (buy or sell). amount (decimal.Decimal): Order amount. price (decimal.Decimal, optional): Price of order execution. None if order_type is market. paid_fee (decimal.Decimal): Fee amount, in the base currency or in the quote one. """ self.order_datetime = order_datetime self.order_id = order_id self.ticker = ticker self.instrument_id = instrument_id self.exchange_name = exchange_name self.broker_name = broker_name self.order_type = order_type self.operation = operation self.amount = amount self.price = price self.paid_fee = paid_fee def __repr__(self): return "<ExecutedOrder(order_id = {}, order_datetime={}, ticker={}, instrument_id={}, exchange_name={}, broker_name={}, order_type={}, operation={}, amount={}, price={}, paid_fee={})>".format(self.order_id, self.order_datetime, self.ticker, self.instrument_id, self.exchange_name, self.broker_name, self.order_type, self.operation, self.amount, self.price, self.paid_fee)
[docs] def to_dict(self): """ As the name tell, it returns attributes in a dict form. Note: The __dict__ method is not overrideble. """ return {"order_id" : self.order_id, "order_datetime" : self.order_datetime, "ticker" : self.ticker, "instrument_id" : self.instrument_id, "exchange_name" : self.exchange_name, "broker_name" : self.broker_name, "order_type" : self.order_type, "operation" : self.operation, "amount" : self.amount, "price" : self.price, "paid_fee" : self.paid_fee }