-
Notifications
You must be signed in to change notification settings - Fork 0
/
price_economics_technical_analysis_class.py
162 lines (122 loc) · 4.62 KB
/
price_economics_technical_analysis_class.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
153
154
155
156
157
158
159
160
161
162
import datetime
import pandas as pd
import numpy as np
import datapungi_fed as dpf
from bcb import sgs
import yfinance as yf
import talib
from talib import RSI, ROC, WILLR
import bs4 as bs
import requests
import json
class Price_Historical_Data_technical_analysis:
"""
Coleta informações de diferentes fontes para montar df
"""
def __init__(self):
self.home_path = 'G:\DADOS\Documents\CURSOS_Dev\Tera\Projeto\projeto_acao'
def setStock(self, stock):
self.stock = stock
def getStock(self):
return self.stock
def risco_brasil(self):
resp = requests.get(
'http://www.ipeadata.gov.br/ExibeSerie.aspx?serid=40940&module=M')
soup = bs.BeautifulSoup(resp.text)
table = soup.find('table', {'class': 'dxgvTable'})
embi_risco_brasil = []
data = []
df_risco_brasil = pd.DataFrame()
for row in table.findAll('tr')[3:]:
date = row.findAll('td')[0].text
embi = row.findAll('td')[1].text
data.append(date)
embi_risco_brasil.append(embi)
df_risco_brasil['data'] = data
df_risco_brasil['Risco_Brasil'] = embi_risco_brasil
df_risco_brasil['data'] = pd.to_datetime(
df_risco_brasil['data'], format='%d/%m/%Y')
df_risco_brasil = df_risco_brasil.sort_values('data')
df_risco_brasil.set_index("data", inplace=True)
#df_risco_brasil.to_csv(
# self.home_path + '/data/external/risco_brasil_{}.csv'.format(pd.to_datetime('today').date()))
return df_risco_brasil
def consulta_bcb(self, nome, codigo, start='2000-01-01'):
"""
Coleta informações da api no Banco Central
nome: 'cdi'
codigo: 12
return: dataframe
"""
nome_ = sgs.get((nome, codigo), start=start)
nome_.index.name = 'data'
return nome_
def coleta_dados_yf(self, stock, start, end, interval='1d'):
"""
Coleta valores Open, High, Low , Close, Adj Close, Volume de ação api yfinance
stock format: 'ABEV3.SA' para as ações brasileiras
start, end format: '2000-01-01'
interval: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo default:'1d'
Returns: dataFrame
index.name = 'data'
"""
acao = yf.download(stock, start=start, end=end)
acao.index.name = 'data'
return acao
def cotacao_conjunto_acao_somente_adj_close(self, lista, start, end, interval='1d'):
"""
Coleta somente ['Adj Close'] de multiplas ações api yfinance
lista: []
stock format: 'ABEV3.SA' para as ações brasileiras
start, end format: '2000-01-01'
interval: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo default:'1d'
Returns: dataFrame
index.name = 'data'
"""
# Cotações
cotacoes = yf.download(lista, start=start, end=end)['Adj Close']
cotacoes.index.name = 'data'
return cotacoes
def indicadores_tecnicos(self, stock, start, end):
"""
Get techinical analysis data from historical data api talib
RSI / ROC / WILLIANS %R
Returns: DataFrame
"""
acao = self.coleta_dados_yf(stock, start, end)
price = acao.iloc[::-1]
price = price.dropna()
close = price.Close.values
open = price.Open.values
high = price.High.values
low = price.Low.values
volume = price.Volume.values
# RSI
rsi = RSI(close, timeperiod=14)
# ROC
roc = ROC(close, timeperiod=10)
# Williams %R moves between zero and -100.above -20 is overbought.-80 is oversold.
willr = WILLR(high, low, close, timeperiod=14)
data = {'rsi': rsi,
'roc': roc,
'willr': willr
}
df = pd.DataFrame(data)
return df
def get_american_economic_data(self, token, code):
"""
American Economical data from FRED
code:'UNRATE'
Returns: list
"""
data = dpf.data(token)
info = data.series(code)
return info
#data = Price_Historical_Data_technical_analysis()
#acao = data.cotacao_conjunto_acao_somente_adj_close(['USDBRL=X','EURBRL=X', '^BVSP','HEIA.AS', 'JBSS3.SA', 'BRFS3.SA' ], '2021-01-01', datetime.datetime.today() - datetime.timedelta(days=1), '1m')
#indi_tecnicos = data.indicadores_tecnicos('HEIA.AS', '2021-01-01', '2021-04-01')
##with open('./fred_token.json') as arquivo:
# fed_credencial = json.load(arquivo)
#token = fed_credencial['token']
#america = data.get_american_economic_data(token, 'UNRATE')
#print(america)