Path: blob/master/src/trademgmt/Trade.py
301 views
import logging12from trademgmt.TradeState import TradeState3from models.ProductType import ProductType45from utils.Utils import Utils67class Trade:8def __init__(self, tradingSymbol = None):9self.exchange = "NSE"10self.tradeID = Utils.generateTradeID() # Unique ID for each trade11self.tradingSymbol = tradingSymbol12self.strategy = ""13self.direction = ""14self.productType = ProductType.MIS15self.isFutures = False # Futures trade16self.isOptions = False # Options trade17self.optionType = None # CE/PE. Applicable only if isOptions is True18self.placeMarketOrder = False # True means place the entry order with Market Order Type19self.intradaySquareOffTimestamp = None # Can be strategy specific. Some can square off at 15:00:00 some can at 15:15:00 etc.20self.requestedEntry = 0 # Requested entry21self.entry = 0 # Actual entry. This will be different from requestedEntry if the order placed is Market order22self.qty = 0 # Requested quantity23self.filledQty = 0 # In case partial fill qty is not equal to filled quantity24self.initialStopLoss = 0 # Initial stop loss25self.stopLoss = 0 # This is the current stop loss. In case of trailing SL the current stopLoss and initialStopLoss will be different after some time26self.target = 0 # Target price if applicable27self.cmp = 0 # Last traded price2829self.tradeState = TradeState.CREATED # state of the trade30self.timestamp = None # Set this timestamp to strategy timestamp if you are not sure what to set31self.createTimestamp = Utils.getEpoch() # Timestamp when the trade is created (Not triggered)32self.startTimestamp = None # Timestamp when the trade gets triggered and order placed33self.endTimestamp = None # Timestamp when the trade ended34self.pnl = 0 # Profit loss of the trade. If trade is Active this shows the unrealized pnl else realized pnl35self.pnlPercentage = 0 # Profit Loss in percentage terms36self.exit = 0 # Exit price of the trade37self.exitReason = None # SL/Target/SquareOff/Any Other3839self.entryOrder = None # Object of Type ordermgmt.Order40self.slOrder = None # Object of Type ordermgmt.Order41self.targetOrder = None # Object of Type ordermgmt.Order4243def equals(self, trade): # compares to trade objects and returns True if equals44if trade == None:45return False46if self.tradeID == trade.tradeID:47return True48if self.tradingSymbol != trade.tradingSymbol:49return False50if self.strategy != trade.strategy:51return False52if self.direction != trade.direction:53return False54if self.productType != trade.productType:55return False56if self.requestedEntry != trade.requestedEntry:57return False58if self.qty != trade.qty:59return False60if self.timestamp != trade.timestamp:61return False62return True6364def __str__(self):65return "ID=" + str(self.tradeID) + ", state=" + self.tradeState + ", symbol=" + self.tradingSymbol \66+ ", strategy=" + self.strategy + ", direction=" + self.direction \67+ ", productType=" + self.productType + ", reqEntry=" + str(self.requestedEntry) \68+ ", stopLoss=" + str(self.stopLoss) + ", target=" + str(self.target) \69+ ", entry=" + str(self.entry) + ", exit=" + str(self.exit) \70+ ", profitLoss" + str(self.pnl)71727374