-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrn.py
70 lines (52 loc) · 1.88 KB
/
rn.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from database import Database
from collections import defaultdict
import converters
class RN:
db = None
def __init__(self, operacoes):
self.db = Database()
for o in operacoes:
self.db.addOperacao(o)
# Preço médio de compra ou de venda de um ativo.
def precoMedio(self, ticker, cv) -> float:
db = self.db
l = db.listarOperacoesPorTicker(ticker)
somatorioPonderado = 0
somatorioPesos = 0
for o in l:
if (cv.upper() != o.cv.upper()):
# ignora operação se não é do tipo especificado no método
continue
qtd = converters.toDecimal(o.qtd)
preco = converters.toDecimal(o.preco)
somatorioPonderado += qtd * preco
somatorioPesos += qtd
#print(o)
# média ponderada
if (somatorioPesos > 0):
return round(somatorioPonderado / somatorioPesos, 2)
else:
return 0
def listarOperacoes(self) -> list:
return self.db.listarOperacoes()
def listarOperacoesPorTicker(self, ticker) -> list:
return self.db.listarOperacoesPorTicker(ticker)
# Lista todos os ativos existentes nas operações.
def ativos(self) -> list:
operacoes = self.listarOperacoes()
myset = set()
for o in operacoes:
myset.add(o.ticker)
sortedList = list(myset)
sortedList.sort()
return sortedList
# Lista todas as operações feitas com um ativo.
def operacoes(self, ticker):
pass
#operacoes = self.listarOperacoes()
#map = defaultdict(list)
#for o in operacoes:
# map[ticker.upper()].append(o)
# Saldo do ativo (quantidade em carteira).
def saldo(self, ticker):
pass