-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
154 lines (98 loc) · 4.66 KB
/
utils.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import yfinance as yf
import investpy as inv
# Instanciando o Ticker para pegar informações mais específicas da empresa
class Dados_Fundamentalista:
"""
Informações para análise Fundamentalista
"""
def __init__(self, stock):
self.stock = stock
def setStock(self, stock):
self.stock = stock
def getStock(self):
return self.stock
def ticker_yf_dadosempresa_fundamentalista(self):
"""
Coletando dados fundamentalista através da ipi yfinance
stock format: 'ABEV3.SA' para as ações brasileiras
Return: info, market_data, actions, financial, major_holders, balance_sheet, calendar
"""
ticker = yf.Ticker(self.stock)
#get stock info
info = ticker.info
#get historical market data
market_data = ticker.history(period="max")
#show actions (dividends, splits)
actions = ticker.actions
# show financials
financial = ticker.financials
# show major holders
major_holders = ticker.major_holders
# show balance sheet
balance_sheet = ticker.balance_sheet
# show next event (earnings, etc)
calendar = ticker.calendar
return info, market_data, actions, financial, major_holders, balance_sheet, calendar
def fundamental_analysis (self, country= 'brazil'):
"""
Coletando dados fundamentalista através da ipi investpy
country: país da ação, default = 'brazil'
stock format: 'ABEV3'
Returns: dataframe, Today Range, 52 wk Range, EPS, Market Cap, Dividend (Yield), Average Vol. (3m) , P/E Ratio, Beta , 1-Year Change , Shares Outstanding, Next Earnings Date
"""
dados_fundamentalista = inv.get_stock_information(self.stock, country= country)
return dados_fundamentalista
def today_technical_stock_analysis_trend(self, country= 'brazil', product_type='stock'):
"""
Coletando dados técnicos e tendências através da ipi investpy
country: país da ação, default = 'brazil'
product_type: default='stock'
stock format: 'ABEV3'
Returns: dataframe, 12 indicadores técnicos e a respectiva leitura da tendência de cada indicador
"""
indicadores_tecnicos_sinal = inv.technical_indicators(self.stock, country= country, product_type=product_type)
return indicadores_tecnicos_sinal
def stock_signal_moving_average(self, country= 'brazil', product_type='stock'):
"""
Sinal de têndencia de compra, venda ação de acordo com o moving average
country: país da ação, default = 'brazil'
product_type: default='stock'
stock format: 'ABEV3'
Returns: dataframe
"""
moving_average_signal = inv.moving_averages(self.stock, country=country, product_type= product_type)
return moving_average_signal
def mensal_diario_rate(serie_mensal):
serie_day= serie_mensal.asfreq('B', method = 'pad' )
daily = serie_day[serie_day.columns[0]].apply( lambda x: round((1 + x) ** (1/22) - 1,3) ).to_frame()
nome= daily.columns[0]
daily.rename({nome: nome[:-6]+'diario' }, axis= 'columns', inplace = True)
return daily
def mensal_diario_rate_nome(serie_mensal, name):
serie_day= serie_mensal.asfreq('B', method = 'pad' )
daily = serie_day.apply( lambda x: round((1 + x) ** (1/22) - 1,3) ).to_frame()
nome= daily.columns[0]
daily.rename({nome: name }, axis= 'columns', inplace = True)
return daily
def cenversao_simples_mensal_diario_B(serie_mensal):
serie_day= serie_mensal.asfreq('B', method = 'pad' )
daily = serie_day[serie_day.columns[0]].apply( lambda x: round( x/22 ,3) ).to_frame()
nome= daily.columns[0]
daily.rename({nome: nome+'_diario' }, axis= 'columns', inplace = True)
return daily
def conversao_simples_mensal_diario_B_nome(serie_diaria, name):
serie_day= serie_diaria.asfreq('B', method = 'pad' )
daily = serie_day.apply( lambda x: round( x/22 ,3) ).to_frame()
nome= daily.columns[0]
daily.rename({nome: name }, axis= 'columns', inplace = True)
return daily
if __name__ == '__main__':
#instanciando
ticker = Dados_Fundamentalista('ABEV3.SA')
#info, market_data, actions, financial, major_holders, balance_sheet, calendar= ticker.#ticker_yf_dadosempresa_fundamentalista()
ticker.setStock('ABEV3')
print(ticker.getStock())
#dados_fundamentalistas = ticker.fundamental_analysis()
#tecnico = ticker.today_technical_stock_analysis_trend()
mov = ticker.stock_signal_moving_average()
print(mov)