我有一个类,其中一个函数返回一个df,当我试图获取Ui\u MainWindow类中的值时,df是空的。你知道吗
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():
print('dbhfjf')
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():
print('plpl')
def __init__(self, isin):
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
self.quantity=[]
self.pnl=[]
self.amount=[]
self.average=[]
global oo
oo = pd.DataFrame(columns = ['Balance quantity', 'Balance Amount','Average Price','Realized Profits'])
def printStat(self):
print('Balance Quantity: %i, AvgPrice: %f, Profit & Loss: %f, Balance amount: %f'%(self._quantity,
self._avgprice,
self._pnl,
self._bookvalue))
for x in range(1):
self.quantity.append(self._quantity)
last=self.quantity
s=pd.Series(last)
s=list(s)
print(s)
#oo['Balance quantity']=s
for j in range(1):
self.amount.append(self._bookvalue)
am=self.amount
amount=pd.Series(am)
amount=list(amount)
print(amount)
#oo['Balance Amount']=amount
for k in range(1):
self.average.append(self._avgprice)
ap=self.average
app=pd.Series(ap)
app=list(app)
print(app)
#oo['Average Price']=app
for i in range(1):
self.pnl.append(self._pnl)
pl=self.pnl
p=pd.Series(pl)
p=list(p)
print(p)
#oo['Realized Profits']=p
#df=pd.DataFrame(s,columns=['Balance Quantity'])
#df=pd.DataFrame(amount,columns=['Balance Amount'])
#df=pd.DataFrame(app,columns=['Average Price'])
#df=pd.DataFrame(p,columns=['Realized Profits'])
#print(df)
self.dff = pd.DataFrame({'Balance Quantity': s,'Balance Amount': amount,'Average Price ': app,'Realized Profit':p})
print(self.dff)
return self.dff
def buy(self, trade):
raise NotImplementedError
def sell(self, trade):
raise NotImplementedError
def dff(self):
return self.dff
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_buy=self._bookvalue
pnl=self._pnl
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
self.printStat()
assert(self._quantity > 0)
class Ui_MainWindow(object):
self.ef=pd.read_excel('D:\\PMS\\Port 5\\Portfolio Ledger\\Mutual Fund\\AXIS.xlsx')
self.ef.replace('nan', np.nan, inplace=True)
numberOfRows = len(self.ef.index)
e={'Date':[],'Quantity':[],'Price':[]}
e = pd.DataFrame(e)
el=[]
row = 0
i = 0
while i < numberOfRows:
if self.ef.isnull().iat[row,1] != True:
adding = pd.DataFrame({"Date":[self.ef.iat[row,0]],
"Quantity":[self.ef.iat[row,1]],
"Price":[self.ef.iat[row,2]]})
e = e.append(adding, ignore_index=True)
f=e['Date'].iloc[-1]
i += 1
row += 1
Date=e['Date'].iloc[-1]
Quantity=e['Quantity'].iloc[-1]
Price=e['Price'].iloc[-1]
print(Date)
print(Quantity)
print(Price)
#s=pd.Series(['Date','Quantity','Price'])
#print(s[0])
el.append(Trade(pd.to_datetime(Date,format='%d.%m.%Y'), Quantity, Price))
else:
adding = pd.DataFrame({"Date": [self.ef.iat[row, 0]],
"Quantity": [self.ef.iat[row, 3]*(-1)],
"Price": [self.ef.iat[row, 4]]})
e = e.append(adding, ignore_index=True)
#print(e.tail(1))
i += 1
row += 1
Date=e['Date'].iloc[-1]
Quantity=e['Quantity'].iloc[-1]
Price=e['Price'].iloc[-1]
print(Date)
print(Quantity)
print(Price)
#s=pd.Series(['Date','Quantity','Price'])
#print(s[0])
el.append(Trade(pd.to_datetime(Date,format='%d.%m.%Y'), Quantity, Price))
b = Isin('bond', 1, el)
#print('111111')
trans = FifoAccount(b)
#print(self.dff)
avds=transactionAccounting(b)
fff=avds.printStat()
print(fff)
当我试图打印(fff)在Ui\u主窗口它是空的,我不知道如何调用自我.dff在Ui\u主窗口中,甚至函数printStat()都返回df,当我在df中打印时,有四列填充了FIFO逻辑
Ui_MainWindow
无权访问dff
变量。请注意,transactionAccounting()
类位于Isin()
类内部。你知道吗您已经在
Ui_MainWindow
内的以下行中定义了一个Isin()
类:从技术上讲,您可以这样初始化
transactionAccounting()
类:然而,我不相信
transactionAccounting()
的缩进是故意的。因此,我建议将transactionAccounting()
中的所有代码按一个空格进行制表,并在Ui_MainWindow
中对其进行初始化:但是,不需要:
大提示:让你的工作空间成为一个标签,而不是一些
n
数量的空格。像我怀疑的那样,如果这确实是一个间隔错误,那么这样的问题将变得更加明显。你知道吗相关问题 更多 >
编程相关推荐