|
1 | | -# Directa Trading API |
| 1 | +# Directa API |
2 | 2 |
|
3 | | -Un wrapper Python per interagire con l'API Trading di Directa SIM tramite la piattaforma Darwin. |
| 3 | +Una libreria Python per interagire con le API di Directa Trading, che consente di effettuare operazioni di trading e recuperare dati storici. |
4 | 4 |
|
5 | 5 | ## Caratteristiche |
6 | 6 |
|
7 | | -- Connessione all'API Trading di Directa SIM (porta 10002) |
8 | | -- Gestione automatica della connessione e monitoraggio dello stato |
9 | | -- Supporto per le operazioni di base (acquisto/vendita, cancellazione ordini) |
10 | | -- Supporto per query di portfolio, disponibilità e informazioni account |
11 | | -- Modalità simulazione per testare operazioni senza utilizzare denaro reale |
12 | | -- Parser dettagliati per le risposte dell'API |
| 7 | +- **Trading API**: Connessione e interazione con l'API di trading Directa (porta 10002) |
| 8 | + - Piazzare ordini (limite, mercato, stop, trailing stop, iceberg) |
| 9 | + - Gestire ordini e posizioni |
| 10 | + - Recuperare informazioni di account e portafoglio |
| 11 | + - Modalità simulazione per testare strategie senza utilizzare denaro reale |
| 12 | + |
| 13 | +- **Historical Data API**: Accesso ai dati storici di Directa (porta 10003) |
| 14 | + - Dati tick-by-tick |
| 15 | + - Dati a candele (intraday e giornalieri) |
| 16 | + - Intervalli di date personalizzati |
| 17 | + - Gestione volume after-hours |
| 18 | + |
| 19 | + |
| 20 | +## Requisiti |
| 21 | + |
| 22 | +- Python 3.9 o versioni successive |
| 23 | +- Piattaforma Darwin di Directa in esecuzione sul sistema |
13 | 24 |
|
14 | 25 | ## Installazione |
15 | 26 |
|
16 | 27 | ```bash |
17 | | -git clone https://github.com/TUOUSERNAME/directa-api-python.git |
18 | | -cd directa-api-python |
| 28 | +# Clone del repository |
| 29 | +git clone https://github.com/username/directa_api.git |
| 30 | +cd directa_api |
| 31 | + |
| 32 | +# Installazione |
19 | 33 | pip install -e . |
20 | 34 | ``` |
21 | 35 |
|
22 | | -## Requisiti |
23 | | - |
24 | | -- Python 3.9+ |
25 | | -- Piattaforma di trading Darwin in esecuzione |
| 36 | +## Guida rapida |
26 | 37 |
|
27 | | -## Utilizzo base |
| 38 | +### Trading API |
28 | 39 |
|
29 | 40 | ```python |
30 | 41 | from directa_api import DirectaTrading |
31 | 42 |
|
32 | | -# Connessione all'API |
33 | | -api = DirectaTrading() |
34 | | -if api.connect(): |
35 | | - # Verifica dello stato |
36 | | - status = api.get_darwin_status() |
37 | | - print(f"Stato connessione: {status['data']['connection_status']}") |
| 43 | +# Connessione all'API di trading |
| 44 | +with DirectaTrading() as api: |
| 45 | + # Ottieni informazioni sull'account |
| 46 | + account_info = api.get_account_info() |
| 47 | + print(f"Liquidità: {account_info.get('data', {}).get('liquidity')}") |
38 | 48 |
|
39 | | - # Ottieni informazioni account |
40 | | - account = api.get_account_info() |
41 | | - print(f"Codice account: {account['data']['account_code']}") |
42 | | - print(f"Liquidità: {account['data']['liquidity']}") |
| 49 | + # Piazza un ordine limite |
| 50 | + order = api.buy_limit("ENI.MI", 10, 13.50) |
43 | 51 |
|
44 | | - # Ottieni portfolio |
| 52 | + # Ottieni informazioni sul portafoglio |
45 | 53 | portfolio = api.get_portfolio() |
46 | | - if portfolio['success']: |
47 | | - for position in portfolio['data']: |
48 | | - print(f"{position['symbol']}: {position['quantity_portfolio']} azioni") |
49 | 54 |
|
50 | | - # Chiusura connessione |
51 | | - api.disconnect() |
| 55 | + # Verifica lo stato degli ordini |
| 56 | + orders = api.get_orders() |
52 | 57 | ``` |
53 | 58 |
|
54 | | -## Modalità Simulazione |
| 59 | +### Historical Data API |
55 | 60 |
|
56 | | -È possibile utilizzare la modalità simulazione per testare operazioni senza utilizzare denaro reale: |
| 61 | +```python |
| 62 | +from directa_api import HistoricalData |
| 63 | + |
| 64 | +# Connessione all'API per dati storici |
| 65 | +with HistoricalData() as api: |
| 66 | + # Ottieni dati giornalieri |
| 67 | + daily_candles = api.get_daily_candles("ENI.MI", days=30) |
| 68 | + |
| 69 | + # Ottieni dati intraday (candele a 5 minuti) |
| 70 | + intraday_candles = api.get_intraday_candles("ENI.MI", days=1, period_minutes=5) |
| 71 | + |
| 72 | + # Ottieni dati tick by tick |
| 73 | + ticks = api.get_tick_data("ENI.MI", days=1) |
| 74 | + |
| 75 | + # Specifica un intervallo di date |
| 76 | + import datetime |
| 77 | + end_date = datetime.datetime.now() |
| 78 | + start_date = end_date - datetime.timedelta(days=7) |
| 79 | + |
| 80 | + # Candele orarie nell'intervallo |
| 81 | + candles = api.get_candle_data_range("ENI.MI", start_date, end_date, period_seconds=3600) |
| 82 | +``` |
| 83 | + |
| 84 | +### Uso combinato |
57 | 85 |
|
58 | 86 | ```python |
59 | | -# Crea un'istanza in modalità simulazione |
60 | | -api = DirectaTrading(simulation_mode=True) |
61 | | -api.connect() |
| 87 | +from directa_api import DirectaTrading, HistoricalData |
| 88 | +import pandas as pd |
62 | 89 |
|
63 | | -# Simula acquisto di azioni |
64 | | -order = api.place_order("INTC", "BUY", 100, 50.25) |
65 | | -order_id = order["data"]["order_id"] |
| 90 | +# Ottenimento dati storici |
| 91 | +with HistoricalData() as historical: |
| 92 | + # Ottieni candele giornaliere |
| 93 | + candles = historical.get_daily_candles("ENI.MI", days=60) |
| 94 | + |
| 95 | + # Converti in DataFrame pandas per l'analisi |
| 96 | + df = pd.DataFrame(candles.get("data", [])) |
| 97 | + |
| 98 | + # Calcola medie mobili |
| 99 | + df.set_index('timestamp', inplace=True) |
| 100 | + df['sma_10'] = df['close'].rolling(window=10).mean() |
| 101 | + df['sma_20'] = df['close'].rolling(window=20).mean() |
| 102 | + |
| 103 | + # Genera segnali |
| 104 | + df['signal'] = 0 |
| 105 | + df.loc[df['sma_10'] > df['sma_20'], 'signal'] = 1 # Segnale di acquisto |
| 106 | + df.loc[df['sma_10'] < df['sma_20'], 'signal'] = -1 # Segnale di vendita |
| 107 | + |
| 108 | +# Esegui ordini basati sui segnali |
| 109 | +with DirectaTrading(simulation_mode=True) as trading: |
| 110 | + # Ottieni l'ultimo segnale |
| 111 | + last_signal = df['signal'].iloc[-1] |
| 112 | + |
| 113 | + if last_signal > 0: |
| 114 | + # Segnale di acquisto |
| 115 | + trading.buy_limit("ENI.MI", 10, df['close'].iloc[-1]) |
| 116 | + elif last_signal < 0: |
| 117 | + # Segnale di vendita |
| 118 | + trading.sell_limit("ENI.MI", 10, df['close'].iloc[-1]) |
| 119 | +``` |
| 120 | + |
| 121 | +## Esempi |
| 122 | + |
| 123 | +Nella cartella `examples/` sono presenti esempi più dettagliati: |
66 | 124 |
|
67 | | -# Simula esecuzione dell'ordine |
68 | | -api.simulate_order_execution(order_id, executed_price=50.00) |
| 125 | +- `trading_examples.py` - Esempi di trading (ordini, portfolio, account info) |
| 126 | +- `historical_examples.py` - Esempi di recupero e analisi di dati storici |
| 127 | +- `combined_example.py` - Esempio di strategia che combina dati storici e trading |
69 | 128 |
|
70 | | -# Verifica portfolio simulato |
71 | | -portfolio = api.get_portfolio() |
72 | | -print(portfolio) |
| 129 | +Per eseguire gli esempi: |
73 | 130 |
|
74 | | -# Chiusura |
75 | | -api.disconnect() |
| 131 | +```bash |
| 132 | +python examples/trading_examples.py |
| 133 | +python examples/historical_examples.py |
| 134 | +python examples/combined_example.py |
76 | 135 | ``` |
77 | 136 |
|
78 | | -Vedere `examples/simulation_example.py` per un esempio completo. |
| 137 | +## Note |
79 | 138 |
|
80 | | -## Esempi |
| 139 | +- **Modalità simulazione**: Per evitare di utilizzare denaro reale durante i test, è possibile abilitare la modalità simulazione: |
| 140 | + |
| 141 | +```python |
| 142 | +api = DirectaTrading(simulation_mode=True) |
| 143 | +``` |
81 | 144 |
|
82 | | -Nella directory `examples` sono presenti diversi script di esempio: |
| 145 | +- **Supporto per i contesti**: L'API supporta il protocollo context manager di Python per gestire automaticamente la connessione e disconnessione: |
83 | 146 |
|
84 | | -- `trading_example.py`: Esempio base di utilizzo dell'API |
85 | | -- `simulation_example.py`: Esempio di utilizzo della modalità simulazione |
86 | | -- `raw_socket_test.py`: Test di connessione socket semplice per diagnostica |
| 147 | +```python |
| 148 | +with DirectaTrading() as api: |
| 149 | + # Operazioni di trading |
| 150 | + pass # La disconnessione avviene automaticamente alla fine del blocco |
| 151 | +``` |
87 | 152 |
|
88 | | -## Note sull'API Directa |
| 153 | +## Dipendenze |
89 | 154 |
|
90 | | -- L'API Trading di Directa è accessibile solo quando la piattaforma Darwin è in esecuzione |
91 | | -- L'API utilizza la porta 10002 per le operazioni di trading |
92 | | -- È necessario avere un account Directa attivo per utilizzare l'API in modalità reale |
| 155 | +- La piattaforma Darwin di Directa deve essere in esecuzione sul sistema locale |
| 156 | +- Per l'analisi dei dati e gli esempi avanzati: pandas, matplotlib |
93 | 157 |
|
94 | 158 | ## Licenza |
95 | 159 |
|
|
0 commit comments