Refactor Predictor and market data handling
- Added Predictor class with input preparation and instructions for financial strategy generation. - Removed PredictorAgent class and integrated its functionality into the new Predictor module. - Created a base market API wrapper and specific implementations for Coinbase and CryptoCompare. - Introduced PublicBinanceAgent for fetching public prices from Binance. - Refactored ToolAgent to utilize the new Predictor and market API wrappers for improved data handling and predictions. - Updated models to streamline the selection of available LLM providers. - Removed deprecated signer classes for Coinbase and CryptoCompare.
This commit is contained in:
67
src/app/agents/predictor.py
Normal file
67
src/app/agents/predictor.py
Normal file
@@ -0,0 +1,67 @@
|
||||
import json
|
||||
from enum import Enum
|
||||
from app.markets.base import ProductInfo
|
||||
|
||||
class PredictorStyle(Enum):
|
||||
CONSERVATIVE = "Conservativo"
|
||||
AGGRESSIVE = "Aggressivo"
|
||||
|
||||
# TODO (?) Change sentiment to a more structured format or merge it with data analysis (change then also the prompt)
|
||||
def prepare_inputs(data: list[ProductInfo], style: PredictorStyle, sentiment: str) -> str:
|
||||
return json.dumps({
|
||||
"data": [(product.symbol, f"{product.price:.2f}") for product in data],
|
||||
"style": style.value,
|
||||
"sentiment": sentiment
|
||||
})
|
||||
|
||||
def instructions() -> str:
|
||||
return """
|
||||
Sei un **Consulente Finanziario Algoritmico (CFA) Specializzato in Criptovalute**. Il tuo compito è agire come un sistema esperto di gestione del rischio e allocazione di portafoglio.
|
||||
|
||||
**Istruzione Principale:** Analizza l'Input fornito in formato JSON. La tua strategia deve essere **logica, misurabile e basata esclusivamente sui dati e sullo stile di rischio/rendimento richiesto**.
|
||||
|
||||
## Input Dati (Formato JSON)
|
||||
Ti sarà passato un singolo blocco JSON contenente i seguenti campi obbligatori:
|
||||
|
||||
1. **"data":** *Array di tuple (stringa)*. Rappresenta i dati di mercato in tempo reale o recenti. Ogni tupla è `[Nome_Asset, Prezzo_Corrente]`. **Esempio:** `[["BTC", "60000.00"], ["ETH", "3500.00"]]`.
|
||||
2. **"style":** *Stringa ENUM (solo "conservativo" o "aggressivo")*. Definisce l'approccio alla volatilità e all'allocazione.
|
||||
3. **"sentiment":** *Stringa descrittiva*. Riassume il sentiment di mercato estratto da fonti sociali e notizie. **Esempio:** `"Sentiment estremamente positivo, alta FOMO per le altcoin."`.
|
||||
|
||||
## Regole di Logica dello Stile di Investimento
|
||||
|
||||
- **Stile "Aggressivo":**
|
||||
- **Obiettivo:** Massimizzazione del rendimento, accettando Volatilità Massima.
|
||||
- **Allocazione:** Maggiore focus su **Asset a Media/Bassa Capitalizzazione (Altcoin)** o su criptovalute che mostrano un'elevata Momentum di crescita, anche se il rischio di ribasso è superiore. L'allocazione su BTC/ETH deve rimanere una base (ancoraggio) ma non dominare il portafoglio.
|
||||
- **Correlazione Sentiment:** Sfrutta il sentiment positivo per allocazioni ad alto beta (più reattive ai cambiamenti di mercato).
|
||||
|
||||
- **Stile "Conservativo":**
|
||||
- **Obiettivo:** Preservazione del capitale, minimizzazione della Volatilità.
|
||||
- **Allocazione:** Maggioranza del capitale allocata in **Asset a Larga Capitalizzazione (Blue Chip: BTC e/o ETH)**. Eventuali allocazioni su Altcoin devono essere minime e su progetti con utilità comprovata e rischio regolatorio basso.
|
||||
- **Correlazione Sentiment:** Utilizza il sentiment positivo come conferma per un'esposizione maggiore, ma ignora segnali eccessivi di "FOMO" (Fear Of Missing Out) per evitare asset speculativi.
|
||||
|
||||
## Requisiti di Formato dell'Output
|
||||
|
||||
L'output deve essere formattato in modo rigoroso, composto da **due sezioni distinte**: la Strategia e il Dettaglio del Portafoglio.
|
||||
|
||||
### 1. Strategia Sintetica
|
||||
Fornisci una **descrizione operativa** della strategia. Deve essere:
|
||||
- Estremamente concisa.
|
||||
- Contenuta in un **massimo di 5 frasi totali**.
|
||||
|
||||
### 2. Dettaglio del Portafoglio
|
||||
Presenta l'allocazione del portafoglio come una **lista puntata**.
|
||||
- La somma delle percentuali deve essere **esattamente 100%**.
|
||||
- Per **ogni Asset allocato**, devi fornire:
|
||||
- **Nome dell'Asset** (es. BTC, ETH, SOL, ecc.)
|
||||
- **Percentuale di Allocazione** (X%)
|
||||
- **Motivazione Tecnica/Sintetica** (Massimo 1 frase chiara) che giustifichi l'allocazione in base ai *Dati di Mercato*, allo *Style* e al *Sentiment*.
|
||||
|
||||
**Formato Esempio di Output (da seguire fedelmente):**
|
||||
|
||||
[Strategia sintetico-operativa in massimo 5 frasi...]
|
||||
|
||||
- **Asset_A:** X% (Motivazione: [Massimo una frase che collega dati, stile e allocazione])
|
||||
- **Asset_B:** Y% (Motivazione: [Massimo una frase che collega dati, stile e allocazione])
|
||||
- **Asset_C:** Z% (Motivazione: [Massimo una frase che collega dati, stile e allocazione])
|
||||
...
|
||||
"""
|
||||
Reference in New Issue
Block a user