File size: 4,878 Bytes
e2ce547
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
---
title: Polymarket LP Collector
emoji: 📈
colorFrom: green
colorTo: blue
sdk: docker
app_port: 8080
---

# Collecteur de données LP Polymarket

Ce projet enregistre en continu les données publiques de niveau 2 des marchés
Polymarket qui distribuent des récompenses de liquidité. Il est conçu pour une
petite VM Google Cloud `e2-micro` : mémoire limitée, fichiers rotatifs et aucune
base de données résidente.

Il ne signe aucun ordre, ne contient aucune clé de portefeuille et ne peut pas
trader. Son unique rôle est de créer un historique propre pour les futurs
backtests et modèles d'apprentissage automatique.

## Données collectées

- carnets complets (`book`) ;
- changements de niveaux (`price_change`) ;
- meilleurs bid/ask ;
- dernières transactions ;
- changements de tick et résolutions ;
- métadonnées, volumes et paramètres de récompenses LP ;
- heure de réception locale en nanosecondes pour mesurer les délais.

Les fichiers terminés sont écrits sous la forme :

```text
data/
  market_ws/YYYY/MM/DD/market_ws-....jsonl.gz
  discovery/YYYY/MM/DD/discovery-....jsonl.gz
```

Chaque ligne est un objet JSON autonome. Les fichiers `.part` sont récupérés et
compressés automatiquement au prochain démarrage après une coupure brutale.

## Exécution locale

```bash
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
cp .env.example .env
DATA_DIR="$PWD/data" polymarket-collector
```

Tester uniquement l'accès aux API publiques avant de démarrer :

```bash
polymarket-collector --check
```

État du service :

```bash
curl http://127.0.0.1:8080/healthz
curl http://127.0.0.1:8080/metrics
```

Arrêter avec `Ctrl+C`. Le service finalise alors proprement les fichiers en
cours.

## Déploiement Google Cloud

Depuis un ordinateur ou Google Cloud Shell ayant `gcloud` authentifié :

```bash
./scripts/deploy_gcp.sh ID_DU_PROJET_GCP
```

Le script crée par défaut une VM `e2-micro` Ubuntu 24.04 dans `us-east1-b`, un
disque standard de 30 Go, copie le projet, puis installe et démarre le service.

Commandes utiles après installation :

```bash
gcloud compute ssh polymarket-collector --zone us-east1-b
sudo systemctl status polymarket-collector
sudo journalctl -u polymarket-collector -f
curl http://127.0.0.1:8080/healthz
```

## Sauvegarde vers Google Drive

Sur la VM :

```bash
sudo rclone config
sudoedit /etc/polymarket-collector.env
```

Définir ensuite, par exemple :

```text
RCLONE_REMOTE=gdrive:polymarket-data
LOCAL_RETENTION_DAYS=7
```

Puis activer la sauvegarde :

```bash
sudo systemctl enable --now polymarket-backup.timer
sudo systemctl start polymarket-backup.service
sudo journalctl -u polymarket-backup.service -n 100
```

Les fichiers locaux âgés de plus de `LOCAL_RETENTION_DAYS` ne sont supprimés
qu'après une copie `rclone` réussie. Mettre la valeur à `0` pour désactiver le
nettoyage local.

## Hébergement gratuit sans dépassement : Render + Hugging Face

L'architecture recommandée pour une collecte continue sans VM personnelle est :

1. un Web Service public **Render Free**, sans moyen de paiement enregistré ;
2. UptimeRobot Free sur `/healthz`, toutes les cinq minutes, pour maintenir une
   visite régulière et surveiller le service ;
3. un dataset Hugging Face public pour les archives. Les fichiers locaux sont
   supprimés uniquement après la réussite du commit distant.

Le conteneur est prêt dans `Dockerfile` et le profil Render dans `render.yaml`.
Créer un jeton Hugging Face avec droit d'écriture, puis publier le dépôt source :

```bash
python scripts/publish_hf_source.py
```

Créer ensuite un Web Service Render depuis l'URL Git publique affichée, choisir
le plan `Free`, et fournir `HF_TOKEN` comme secret. Le profil utilise 40 marchés,
une rotation à 256 Mio et un envoi groupé toutes les heures. Render dispose de
750 heures gratuites par mois et suspend le service au lieu de facturer lorsque
le compte ne contient aucun moyen de paiement. Son disque est temporaire : les
archives ne sont supprimées qu'après confirmation du commit Hugging Face.

Hugging Face Spaces n'est plus recommandé : les Spaces Docker sur `cpu-basic`
exigent désormais un abonnement Hugging Face PRO.

Koyeb n'est plus recommandé : depuis son rapprochement avec Mistral, les
nouveaux utilisateurs doivent fournir un moyen de paiement et souscrire un
forfait payant.

## Tests

```bash
python -m unittest discover -s tests -v
```

Les tests ne contactent pas Polymarket et ne nécessitent aucune clé.

## Limites importantes

- Avec 1 Go de RAM et 30 Go de disque, commencer avec 75 marchés maximum.
- Une VM gratuite aux États-Unis convient à la collecte, pas au futur bot de
  trading sensible à la latence.
- Le service conserve les messages bruts : les transformations en Parquet et
  l'entraînement se feront sur l'ordinateur équipé de la RTX 3060.