Stock Price Realtime

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