# config.py # --- Parâmetros de Dados --- SYMBOL = 'ETH/USDT' # Ativo principal para o modelo de classificação (se ainda usar) MULTI_ASSET_SYMBOLS = { # Para o agente de portfólio RL 'eth': 'ETH-USD', # Chave amigável: ticker_yfinance 'btc': 'BTC-USD', 'ada': 'ADA-USD', 'sol': 'SOL-USD' } NUM_ASSETS_PORTFOLIO = len(MULTI_ASSET_SYMBOLS) # Número de ativos no portfólio NUM_ASSETS=4 TIMEFRAME = '1h' # Usado tanto para yfinance quanto para ccxt (se adaptar) DAYS_OF_DATA_TO_FETCH = 365 * 2 LIMIT_PER_FETCH = 1000 # Para ccxt # --- Parâmetros de Features e Janela --- WINDOW_SIZE = 60 # BASE_FEATURE_COLS: Colunas calculadas para CADA ativo ANTES do escalonamento final para o modelo. # Estas são as features que seu data_handler_multi_asset.py DEVE produzir para cada ativo. # O rnn_predictor.py (ou a parte de features da DeepPortfolioAgentNetwork) também as calculará. BASE_FEATURES_PER_ASSET_INPUT = [ # Renomeado para clareza 'open_div_atr', 'high_div_atr', 'low_div_atr', 'close_div_atr', 'volume_div_atr', 'log_return', 'rsi_14', 'atr', 'bbp', 'cci_37', 'mfi_37', 'body_size_norm_atr', 'body_vs_avg_body', 'macd', 'sma_10_div_atr', 'adx_14', 'volume_zscore', 'buy_condition_v1' # Se 'cond_compra_v1' for diferente de 'buy_condition_v1', adicione aqui. # Se for igual, remova a redundância. Assumindo que 'buy_condition_v1' é a correta. ] # Nomes das colunas de preço/volume (normalizadas por ATR) que usarão o price_vol_scaler API_PRICE_VOL_COLS = ['open_div_atr', 'high_div_atr', 'low_div_atr', 'close_div_atr', 'volume_div_atr', 'body_size_norm_atr'] # Nomes das colunas de indicadores (e outras) que usarão o indicator_scaler API_INDICATOR_COLS = [col for col in BASE_FEATURES_PER_ASSET_INPUT if col not in API_PRICE_VOL_COLS] # Número de features que CADA ativo terá após todos os cálculos e ANTES do escalonamento final. NUM_FEATURES_PER_ASSET = len(BASE_FEATURES_PER_ASSET_INPUT) # Nomes das colunas escaladas que o modelo RNN/RL efetivamente verá como entrada. # Esta é a ordem que deve ser mantida após o escalonamento no data_handler e no rnn_predictor. # E também o que o create_sequences espera. EXPECTED_SCALED_FEATURES_FOR_MODEL = [f"{col}_scaled" for col in BASE_FEATURES_PER_ASSET_INPUT] # NUM_FEATURES_MODEL_INPUT será len(EXPECTED_SCALED_FEATURES_FOR_MODEL), que é igual a NUM_FEATURES_PER_ASSET # --- Parâmetros do Alvo da Predição (Para o Modelo de Classificação Supervisionado, se ainda usar) --- PREDICTION_HORIZON = 5 PRICE_CHANGE_THRESHOLD = 0.0075 # --- Parâmetros da Rede Neural (DeepPortfolioAgentNetwork e seu AssetProcessor) --- # Para AssetProcessor (processamento individual de ativo) ASSET_CNN_FILTERS1 = 32 ASSET_CNN_FILTERS2 = 64 ASSET_LSTM_UNITS1 = 64 ASSET_LSTM_UNITS2 = 32 # Saída do AssetProcessor, se torna a dimensão da feature latente por ativo ASSET_DROPOUT = 0.2 # Para DeepPortfolioAgentNetwork (camadas após processamento individual) MHA_NUM_HEADS = 4 # key_dim da MHA será ASSET_LSTM_UNITS2 // MHA_KEY_DIM_DIVISOR MHA_KEY_DIM_DIVISOR = 2 # Ex: 32 // 2 = 16. Garanta que ASSET_LSTM_UNITS2 seja divisível. Se não, ajuste. # Camadas densas FINAIS DENTRO da DeepPortfolioAgentNetwork, ANTES da saída de features latentes # ou da camada de alocação softmax (se não estiver retornando features latentes). # `FINAL_DENSE_UNITS2_EXTRACTOR` será a dimensão das features que o extrator cospe para o SB3. DPN_FINAL_DENSE1_UNITS = 64 # "DPN" para DeepPortfolioNetwork DPN_LATENT_FEATURE_DIM = 32 # Saída da DPN quando output_latent_features=True. IGUAL A ASSET_LSTM_UNITS2 se não houver mais camadas após GAP. # Se você adicionou Dense(final_dense_units1) e Dense(final_dense_units2) APÓS a atenção # no DeepPortfolioAgentNetwork, então DPN_LATENT_FEATURE_DIM seria final_dense_units2. # No nosso último design, era a saída do global_avg_pool_attention, então ASSET_LSTM_UNITS2. # Vamos assumir que a saída do GAP é usada como feature latente por enquanto. # DPN_LATENT_FEATURE_DIM = ASSET_LSTM_UNITS2 # Ajustando com base no seu código de `deep_portfolio.py` onde você tinha `final_dense_units1` e `final_dense_units2` # após a atenção e antes do output de alocação. # Estas são as camadas que produzem as features latentes para SB3. DPN_SHARED_HEAD_DENSE1_UNITS = 128 # Corresponde a final_dense_units1 na sua DeepPortfolioAgentNetwork DPN_SHARED_HEAD_LATENT_DIM = 64 # Corresponde a final_dense_units2, que será o self.features_dim do extrator DPN_SHARED_HEAD_DROPOUT = 0.3 DEFAULT_EXTRACTOR_KWARGS=DPN_SHARED_HEAD_DENSE1_UNITS # Para as cabeças de Política (Ator) e Valor (Crítico) no Stable-Baselines3 (APÓS o extrator) # Se vazias, a saída do extrator é usada diretamente para as camadas finais de ação/valor. POLICY_HEAD_NET_ARCH = [64] # Ex: [64, 32] ou [] se não quiser camadas extras VALUE_HEAD_NET_ARCH = [64] # Ex: [64, 32] ou [] # --- Parâmetros Gerais do Modelo (se aplicável a ambos os tipos de modelo) --- MODEL_DROPOUT_RATE = 0.3 # Você usou 0.3 na última rodada de classificação bem-sucedida MODEL_L2_REG = 0.0001 # Você usou 0.0001 ou 0.0005 L2_REG = 0.0001 # --- Parâmetros de Treinamento --- # Para o modelo de classificação supervisionado (se ainda usar) SUPERVISED_LEARNING_RATE = 0.0005 SUPERVISED_BATCH_SIZE = 128 SUPERVISED_EPOCHS = 100 LEARNING_RATE=0.0005 # Para o agente RL (PPO) PPO_LEARNING_RATE = 0.0003 # Padrão do SB3 PPO, pode ajustar PPO_N_STEPS = 2048 PPO_BATCH_SIZE_RL = 64 # Mini-batch size do PPO PPO_ENT_COEF = 0.0 PPO_TOTAL_TIMESTEPS = 2048 #1000000 # Comece com menos para teste (ex: 50k-100k) # --- Parâmetros do Ambiente RL --- # RISK_FREE_RATE_ANNUAL = 0.02 # Taxa livre de risco anual (ex: 2%) # REWARD_WINDOW_SHARPE = 252 * 1 # Ex: Janela de 1 ano de dados horários para Sharpe (252 dias * 24h) # Ou uma janela menor como 60 ou 120 passos. INITIAL_BALANCE = 100000 TRANSACTION_COST_PCT = 0.001 # 0.1% # --- Caminhos para Salvar --- MODEL_ROOT_DIR = "app/model" # Diretório raiz para todos os modelos e scalers # Para modelo de classificação supervisionado (se mantiver) SUPERVISED_MODEL_NAME = "classification_model.h5" SUPERVISED_PV_SCALER_NAME = "supervisor_pv_scaler.joblib" SUPERVISED_IND_SCALER_NAME = "supervisor_ind_scaler.joblib" # Para modelo RL (agente PPO salvo pelo SB3) RL_AGENT_MODEL_NAME = "ppo_deep_portfolio_agent" # SB3 adiciona .zip # Scalers usados para preparar dados para o DeepPortfolioAgentNetwork (que é o extrator do RL) RL_PV_SCALER_NAME = "rl_price_volume_atr_norm_scaler.joblib" # Seus nomes descritivos RL_INDICATOR_SCALER_NAME = "rl_other_indicators_scaler.joblib" FINAL_DENSE_UNITS1_EXTRACTOR=DEFAULT_EXTRACTOR_KWARGS USE_SENTIMENT_CONFIG=True