@@ -45,29 +45,29 @@ def __init__(self,capital:float,commission:float,enable_slippage:bool):
45
45
self .commission = commission
46
46
self .enable_slippage = enable_slippage
47
47
self .slippage = 0
48
- self .trades_log = pd .DataFrame (columns = ['datetime' ,'trade type ' ,'price' ,'fill price ' ,'order cost ' ])
48
+ self .trades_log = pd .DataFrame (columns = ['datetime' ,'trade_type ' ,'price' ,'fill_price ' ,'order_cost' , 'capital' , 'position ' ])
49
49
50
50
51
51
def buy (self ,quantity ):
52
52
'''emulates a buy order'''
53
53
self .capital -= self .order_cost
54
54
self .update_positions (quantity )
55
- self .update_trade_logs (datetime = self .bar .datetime ,trade_type = 'Buy' ,price = self .bar .close ,fill_price = self .fill_price ,order_cost = self .order_cost )
56
- print ('Bought {} of stocks @ {} but price is {}' .format (quantity ,self .order_cost ,self .bar .close ))
55
+ self .update_trade_logs (datetime = self .bar .datetime ,trade_type = 'Buy' ,price = self .bar .close ,fill_price = self .fill_price ,order_cost = self .order_cost , capital = self . capital , position = self . position )
56
+ # print('Bought {} of stocks @ {} but price is {}'.format(quantity,self.order_cost,self.bar.close))
57
57
58
58
59
59
def sell (self ,quantity ):
60
60
'''emulates a sell order'''
61
- if self .position != 0 :
62
- self .capital += self .order_cost
63
- self .update_positions (- 1 * quantity )
64
- self .update_trade_logs (datetime = self .bar .datetime ,trade_type = 'Sell' ,price = self .bar .close ,fill_price = self .fill_price ,order_cost = - 1 * self .order_cost )
65
- print ('Sold {} of stocks @ {} but price is {}' .format (quantity ,self .order_cost ,self .bar .close ))
66
- else :
67
- print ('No position to close' )
68
-
69
- def update_trade_logs (self ,datetime ,trade_type ,price ,fill_price ,order_cost ):
70
- df = pd .DataFrame ([{'datetime' :datetime ,'trade type ' :trade_type ,'price' :price ,'fill price ' :fill_price ,'order cost ' :order_cost }])
61
+ # if self.position!=0:
62
+ self .capital += self .order_cost
63
+ self .update_positions (- 1 * quantity )
64
+ self .update_trade_logs (datetime = self .bar .datetime ,trade_type = 'Sell' ,price = self .bar .close ,fill_price = self .fill_price ,order_cost = self .order_cost , capital = self . capital , position = self . position )
65
+ # print('Sold {} of stocks @ {} but price is {}'.format(quantity,self.order_cost,self.bar.close))
66
+ # else:
67
+ #pass# print('No position to close')
68
+
69
+ def update_trade_logs (self ,datetime ,trade_type ,price ,fill_price ,order_cost , capital , position ):
70
+ df = pd .DataFrame ([{'datetime' :datetime ,'trade_type ' :trade_type ,'price' :price ,'fill_price ' :fill_price ,'order_cost ' :order_cost , 'capital' : capital , 'position' : position }])
71
71
self .trades_log = self .trades_log .append (df )
72
72
73
73
@@ -120,3 +120,11 @@ def getbar(self):
120
120
def getposition (self ):
121
121
return self .position
122
122
123
+ @property
124
+ def get_portfolio (self ):
125
+ trade_log = self .get_trade_log
126
+ portfolio = pd .DataFrame (index = trade_log .index )
127
+ portfolio ['holdings' ]= trade_log .position .multiply (trade_log .price )
128
+ portfolio ['cash' ]= trade_log .capital
129
+ portfolio ['total' ]= portfolio .cash + portfolio .holdings
130
+ return portfolio
0 commit comments