У меня есть CSV-файл HDFC.csv при вызове в кадре данных, он выглядит как
ef={'Date':['20.3.2019','21.3.2019','22.3.2019','24.3.2019','25.5.2019','29.6.2019','30.6.2019'],
'Quantity Bought':[342.0,2330.0,'nan','nan',344,'nan','nan'],
'Buy Price':[21.0,45.0,'nan','nan',22,'nan','nan'],
'Sell Quantity':['nan','nan',110,221,'nan',455,566],
'Sell Price':['nan','nan',56,21,'nan',29,30]}
ef=pd.DataFrame(ef)
Когда я запускаю приведенный ниже код
class Trade():
def __init__(self,date: pd.datetime, quantity: np.float32, price: np.float32):
self.date = date
self.quantity = quantity
self.price = price
def printT(self):
return print('Quantity: %i, Price: %f'%(self.quantity, self.price))
class Isin():
def __init__(self, isin, notinalPerQuantity, listOfTrades):
self._isin = isin
self._notinalPerQuantity = notinalPerQuantity
self._listOfTrades = listOfTrades
def mtm(self, trade):
return trade.quantity*trade.price*self._notinalPerQuantity
def __next__(self):
return self._listOfTrades.__next__()
def __iter__(self):
return self._listOfTrades.__iter__()
class transactionAccounting():
def __init__(self, isin):
"""
Initiliase with first entry from left
"""
print('Initialize trade que')
self._Isin = isin
self._notinalPerQuantity = isin._notinalPerQuantity
self._trades = isin._listOfTrades
t0 = self._trades[0]
self._avgprice = 0
self._quantity = 0
self._pnl = 0
self._bookvalue = 0
def printStat(self):
quantity=self._quantity
avg_price=self._avgprice
pnl=self._pnl
amount=self._bookvalue
def buy(self, trade):
raise NotImplementedError
def sell(self, trade):
raise NotImplementedError
class FifoAccount(transactionAccounting):
def __init__(self, trades):
transactionAccounting.__init__(self, trades)
self._deque = deque()
for trade in self._trades:
if trade.quantity>=0:
self.buy(trade)
else:
self.sell(trade)
def buy(self, trade):
print('Buy trade')
trade.printT()
self._deque.append(trade)
self._bookvalue += self._Isin.mtm(trade)
self._quantity += trade.quantity
self._avgprice = self._bookvalue / self._quantity / self._notinalPerQuantity
avg_price=self._avgprice
#buy_quant=self._quantity
#bal=self._bookvalue
#print(buy_quant)
#print(bal)
self.printStat()
def sell(self, trade):
print('Sell trade')
trade.printT()
sellQuant = -trade.quantity
while(sellQuant>0):
lastTrade = self._deque.popleft()
price = lastTrade.price
quantity = lastTrade.quantity
print('Cancel trade:')
lastTrade.printT()
if sellQuant >= quantity:
self._pnl += -(price - trade.price)*quantity*self._notinalPerQuantity
self._quantity -= quantity
self._bookvalue -= price * quantity * self._notinalPerQuantity
sellQuant -= quantity
else:
self._pnl += -(price - trade.price)*sellQuant*self._notinalPerQuantity
self._quantity -= sellQuant
self._bookvalue -= price * sellQuant * self._notinalPerQuantity
lastTrade.quantity -= sellQuant
self._deque.appendleft(lastTrade)
sellQuant = 0
sell_quant=self._quantity
bal_sell=self._bookvalue
pnl=self._pnl
print(pnl)
print(sell_quant)
print(bal_sell)
print(self._avgprice)
self.printStat()
assert(self._quantity > 0)
el = [Trade(pd.to_datetime('01.04.2016',format='%d.%m.%Y')+dt.timedelta(days=i), 5-i, 99.8+i) for i in range(0,100)]
#ef=pd.read_csv('D:\\PMS\\testport\\Portfolio Ledger\\Mutual Fund\\HDFC.csv')
#cols=[1,4,7,8,9,10,11]
#ef.drop(ef.columns[cols], axis=1,inplace=True)
ef.replace('nan', np.nan, inplace=True)
numberOfRows = len(ef.index)
el={'Date':[],
'Quantity':[],
'Price':[]}
el = list(el)
row = 0
i = 0
while i < numberOfRows:
if ef.isnull().iat[row,1] != True:
Date=[ef.iat[row,0]]
Quantity=ef.iat[row,1]
Price=ef.iat[row,2]
#el = el.append(adding, ignore_index=True)
i += 1
row += 1
s=pd.Series([Date,Quantity,Price])
el.append(Trade(pd.to_datetime(s[0],format='%d.%m.%Y'), s[1], s[2]))
else:
Date=[ef.iat[row, 0]]
Quantity=ef.iat[row, 3]*(-1)
Price=ef.iat[row, 4]
#el = el.append(adding, ignore_index=True)
i += 1
row += 1
s=pd.Series([Date,Quantity,Price])
el.append(Trade(pd.to_datetime(s[0],format='%d.%m.%Y'), s[1], s[2]))
del el[0]
del el[1]
del el[0]
b = Isin('bond', 1, el)
trans = FifoAccount(b)
Когда я запускаю приведенный выше код, он печатаетКоличество сальдо, Avg.Price, PnL, сумма сальдо в каждой строке, я не могу понять, как передать эти значения в csv, в котором приведенный выше кадр данных присутствует с теми же заголовками столбцов, что и количество сальдо, Avg.Price, PnL, сумма сальдо