| --- |
| 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. |
|
|