Код не работает на M1 Pro Mac, но работает на Intel. Как это решить?Python

Программы на Python
Anonymous
Код не работает на M1 Pro Mac, но работает на Intel. Как это решить?

Сообщение Anonymous »


from binance.enums import * # from binance.client import Client from binance.streams import ThreadedWebsocketManager import pandas as pd import os import nest_asyncio nest_asyncio.apply() # Define the structure of your DataFrame columns = ['timestamp', 'best_bid_price', 'best_bid_qty', 'best_ask_price', 'best_ask_qty'] logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # Buffer to store incoming data buffer = [] BUFFER_SIZE = 3 # 10000 def process_message(msg): print(30 * "-") # logging.info("Message received") # logging.info(f"Message : \n{msg}") global buffer timestamp = pd.to_datetime(msg['E'], unit='ms') # print("timestamp : ", timestamp) # Assuming 'b' and 'a' are lists containing best bid and ask data, respectively # Each entry in 'b' or 'a' is assumed to be [price, quantity] best_bid = msg['b'][0] if msg['b'] else [None, None] # Take the first or set None if empty best_ask = msg['a'][0] if msg['a'] else [None, None] # Take the first or set None if empty buffer.append([timestamp, best_bid[0], best_bid[1], best_ask[0], best_ask[1]]) if len(buffer) >= BUFFER_SIZE: update_dataframe() def update_dataframe(): global buffer, order_book_df, columns print(30 * "-") # print("buffer : \n", buffer) logging.info(f"Updating DataFrame with {len(buffer)} entries") temp_df = pd.DataFrame(buffer, columns=columns) temp_df.set_index('timestamp', inplace=True) # print("temp_df info : \n", temp_df.info()) print("temp_df : \n", temp_df) temp_df['best_bid_price'] = pd.to_numeric(temp_df['best_bid_price']) temp_df['best_bid_qty'] = pd.to_numeric(temp_df['best_bid_qty']) temp_df['best_ask_price'] = pd.to_numeric(temp_df['best_ask_price']) temp_df['best_ask_qty'] = pd.to_numeric(temp_df['best_ask_qty']) # temp_df['best_bid_price'] = fill_nulls(temp_df['best_bid_price']) # temp_df['best_bid_qty'] = fill_nulls(temp_df['best_bid_qty']) # temp_df['best_ask_price'] = fill_nulls(temp_df['best_ask_price']) # temp_df['best_ask_qty'] = fill_nulls(temp_df['best_ask_qty']) temp_df = fill_nulls(temp_df) # print("temp_df num : \n", temp_df) print("temp_df (Buffer) : \n", temp_df) order_book_df = pd.concat([order_book_df, temp_df]) # , ignore_index=True) buffer.clear() # Clear the buffer after updating # Optionally, trim DataFrame order_book_df = order_book_df.tail(1000) # print(30 * "-") # print("order_book_df info : \n", order_book_df.info()) # print("order_book_df : \n", order_book_df) def fill_nulls(data): global order_book_df, columns for col in columns[1:]: for i in range(len(data)): if math.isnan(data[col].iloc): if i == 0: try : data[col].iloc = order_book_df[col].iloc[-1] except Exception as e: print(e) data[col].iloc = data[col].mean() else : data[col].iloc = data[col].iloc[i-1] # prev_data = data.shift().fillna(data.mean()) # next_data = data.shift(-1).fillna(data.mean()) # data = data.fillna(prev_data + next_data / 2) return data def analyze_data(): global order_book_df, twm while True: sleep(5) # Analysis frequency # logging.info("Starting analysis") try : if not order_book_df.empty: # logging.info("Data not empty !") # print(order_book_df.tail()) trades = check_severe_exhaustion_and_trend_reversal(order_book_df.copy()) # , 100, 6) # Copy to avoid potential issues with threading trades_df = pd.DataFrame(trades) print("trades : \n", trades_df) except Exception as e : print(e) pass # Initialize your DataFrame and WebSocket order_book_df = pd.DataFrame(columns=columns) order_book_df.set_index('timestamp', inplace=True) api_key = os.getenv('API_KEY') api_secret = os.getenv('API_SECRET') twm = ThreadedWebsocketManager(api_key = api_key, api_secret = api_secret, testnet = True) twm.start() twm.start_depth_socket(callback=process_message, symbol='1000PEPEUSDT') # Start analysis thread analysis_thread = threading.Thread(target=analyze_data) analysis_thread.start() # Keep the main thread running twm.join() I'm trying to run a trading strategy using binance websocket API, this strategy uses orderbook exhaustion, I haven't included it, only the most relevant part of the code.

When i try running my code it doesn't work, it used to before including making trades.

The check_severe_exhaustion_and_trend_reversal() function essentially returns a dataframe of trades in this format:

{ 'Entry Time': '2024-03-04 09:00:00', 'Exit Time': '2024-03-04 12:00:00', 'Entry Price': 100, 'Exit Price': 105, 'Percentage Profit': 5.0 } I've tried using a threading.Lock() inside process_message() and analyze_data(). In addition I've debugged the code in VSCode but since it can only debug the main thread, I can't find where something goes wrong.


Источник: https://stackoverflow.com/questions/781 ... solve-this

Вернуться в «Python»