Untitled

 avatar
unknown
plain_text
9 months ago
2.1 kB
1
Indexable
def get_rates(symbol, number_of_data=10000, timeframe=mt5.TIMEFRAME_D1):
    
    # Extract n rates before now

    if timeframe != mt5.TIMEFRAME_D1:
        rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, number_of_data)
        timeout = 300  # 5 minutes in seconds
        df_rates = pd.DataFrame(rates)

        start_time = time.time()
        while df_rates.empty:
            rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, number_of_data)
            df_rates = pd.DataFrame(rates)
            elapsed_time = time.time() - start_time

            if elapsed_time > timeout:
                raise TimeoutError("Fetching rates failed after  minutes.")
            time.sleep(30)

        df_rates["time"] = pd.to_datetime(df_rates["time"], unit="s")  
        nowd = pd.to_datetime(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

        while df_rates["time"].iloc[-1] < nowd:
            time.sleep(30)
            rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, number_of_data)
            df_rates = pd.DataFrame(rates)
            elapsed_time = time.time() - start_time

            if elapsed_time > timeout:
                raise TimeoutError("Fetching rates failed after 5 minutes.")
        
        df_rates["time"] = pd.to_datetime(df_rates["time"], unit="s")
        df_rates = df_rates.set_index("time")
    
    else:
        rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, number_of_data)
        timeout = 300  # 5 minutes in seconds
        df_rates = pd.DataFrame(rates)

        start_time = time.time()
        while df_rates.empty:
            rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, number_of_data)
            df_rates = pd.DataFrame(rates)
            elapsed_time = time.time() - start_time

            if elapsed_time > timeout:
                raise TimeoutError("Fetching rates failed after  minutes.")
            time.sleep(30)

        df_rates["time"] = pd.to_datetime(df_rates["time"], unit="s")
        df_rates = df_rates.set_index("time")
            
    return df_rates
Editor is loading...
Leave a Comment