Hello everyone,
i’m passing for a problem, i’m trying show the last price of three cryptocurrencies in real time. However, the website block or running once time.
I also tried using Threads or custom components (I don’t know if i used correctly), but not worked.
This is my relevant part of function to load all session.state variables:
def carregar_variaveis():
...
#------------------------ FORM-------------------------
if 'dados_salvos' not in st.session_state:
st.session_state['dados_salvos'] = {
'corretora': '',
'par_moeda_1': '',
'par_moeda_2': '',
'par_moeda_3': '',
'valor_investido': 0,
'valor_meta': 0,
'api_key': '',
'secret_key': ''
}
#-------------------------------------------------------------
...
this is my main part:
if __name__ == "__main__":
#load all session.state variables
carregar_variaveis()
#This button open a modal that you fill the form to start operations
st.button('Configuração',disabled=st.session_state.configuracao_disable_status,on_click=configuration)
header_status()
with st.container():
col1, col2 = st.columns(2)
with col1:
#this button is to test and validate connection
validate = st.button(label=st.session_state.validate_name_status, disabled=st.session_state.validate_disable_status, on_click=validacao)
with col2:
#this button is to start the operations
start = st.button(label="Iniciar", disabled=st.session_state.start_disable_status, on_click=main, args=[
st.session_state.get('dados_salvos')['corretora'],
st.session_state.get('dados_salvos')['par_moeda_1'],
st.session_state.get('dados_salvos')['par_moeda_2'],
st.session_state.get('dados_salvos')['par_moeda_3'],
st.session_state.get('dados_salvos')['valor_investido'],
st.session_state.get('dados_salvos')['valor_meta']
])
main_grid()
log_history()
and this, my two important functions:
Main → Running once
Oportunidade → Running always until find the oportunity
The main come first.
def main(corretora, par_moeda_1, par_moeda_2, par_moeda_3, valor_investido, valor_meta):
try:
# Lógica da função
add_log('INFO: Verificando Saldo...')
saldo_atual = verificar_saldo(corretora)
if isinstance(saldo_atual, tuple):
if saldo_atual[0] < valor_investido:
add_log('ERRO: O valor investido não é igual ao valor do saldo da corretora')
return None
else:
add_log('INFO: Saldo atual é de {:.2f} USDT'.format(saldo_atual[0]))
else:
add_log('ERRO: Ocorreu um erro ao obter o saldo')
except Exception as e:
add_log(f'ERRO: {e}') # Usando add_log para registrar erros
lucro = 0
indice = 0
procurar_oportunidades = False
add_log(st.session_state)
preco_par_1, preco_par_2, preco_par_3, taxa_total, lucro = oportunidade(corretora, par_moeda_1, par_moeda_2, par_moeda_3,valor_investido)
The oportunidades come second:
def oportunidade(corretora,par_moeda_1,par_moeda_2,par_moeda_3,valor_investido):
while True:
pares_moedas = [par_moeda_1, par_moeda_2, par_moeda_3]
precos = []
for par_moeda in pares_moedas:
time.sleep(0.1)
preco = obter_melhor_preco('compra',corretora,par_moeda)
precos.append(preco)
preco_par_1, preco_par_2, preco_par_3 = precos
# taxas = []
# consultou = False
# if consultou == False:
# for par_moeda in pares_moedas:
# taxa = taxa(corretora, par_moeda)
# taxas.append(taxa) # Adiciona a taxa à lista
# consultou = True
# taxa_1, taxa_2, taxa_3 = taxas
qtd_1 = valor_investido / preco_par_2[0]
qtd_2 = qtd_1 / preco_par_3[0]
qtd_3 = qtd_2 * preco_par_1[0]
taxa_total = (qtd_1 * 0.001) + (qtd_2 * 0.001) + (qtd_3 * 0.001)
valor_inicial = qtd_1 * preco_par_2[0]
valor_final = qtd_3 - taxa_total
lucro = round(valor_final - valor_inicial,4)
st.session_state['valor_inicio'] = valor_inicial
st.session_state['valor_final'] = valor_final
st.session_state.get('precos_e_taxas')["preco_par_1"] = preco_par_1[0]
st.session_state.get('precos_e_taxas')["preco_par_2"] = preco_par_2[0]
st.session_state.get('precos_e_taxas')["preco_par_3"] = preco_par_3[0]
st.session_state.get('lucros_e_saques')["lucro_previsto"] = lucro
if valor_final > valor_inicial and valor_final >= 0.01:
return preco_par_1[0],preco_par_2[0],preco_par_3[0],taxa_total, lucro
else:
continue