Skip to content
Snippets Groups Projects
Commit d8731a12 authored by benjamin.anthonio's avatar benjamin.anthonio
Browse files

feat: correction algo interpolation docs: add rapport and pictures

parent 47360eaa
Branches
No related tags found
No related merge requests found
Showing
with 95 additions and 38 deletions
| Date | Travail à réaliser | Travail effectué | Problèmes rencontrés | Commentaires |
|-----------------------|-----------------------------------------------------|------------------------------------------------------------------------|----------------------|-----------------------------------------------------------------------------------------------------------------------|
| 21.10.2024-28.10.2024 | Lancer le projet précédent et essayer le simulateur | Lancement du projet réussi + compréhension des résultats du simulateur | | Avoir la version de python 3.9 pour la compatibilité avec une récente version de numpy demandée dans requirements.txt |
| 28.10.2024-04.11.2024 | Lister les fonctionnalités nécessaires au projet + Lire la documentation de Mr Souzaluz | Lecture des parties "Lexique", "Liste des acronymes", "1.2 TRADING AUTOMATISÉ", "CHAPITRE 2 : LES STRATÉGIES" et "CHAPITRE 3 : MÉTHODOLOGIE" + Début du listage des fonctionnalités | | |
| 04.11.2024-11.11.2024 | Rechercher une API qui permet de récupérer les données de chaque seconde depuis 4-5 ans + Justifier le choix de la technologie | Listage des différentes API avec leurs avantages et désavantages + Justification de la technologie + Trouvé une librairie pour les graphiques | La plupart des API ont des limites de données par requêtes et de fréquences des données (1 min) | |
| 11.11.2024-18.11.2024 | Récupérer les données (200000) et tester la librairie pour faire des graphes | J'ai créer un projet spring boot qui permet de récupérer les données en faisant plusieurs appels à l'api Binance | Problème avec la librairie des graphiques : le graphique s'affiche mais pas les candles | |
| 18.11.2024-26.11.2024 | Afficher les données avec la librairie + Voir le temps que prends le programme pour récupérer 1 an de données + Mise en cache des données si récupération trop longue | Affichage des données avec la librairie. Il faut environ 1 minute pour récupérer 1 an de données. L'utilisateur peut choisir les dates qu'il veut. | Affichage des données pour plus de 10 jours : problème de chevauchement des timestamp de la 1ère requête et de la 2ème | |
| 26.11.2024-02.12.2024 | Commencer à implémenter le simulateur et commencer l'introduction | Début d'une introduction et implémentation d'un ticker (déclencher un évènement toutes les $x$ secondes) | | |
| 02.12.2024-09.12.2024 | Continuer de faire la doc et avancement du simulateur | Développement de l'introduction + ajout des choix technologiques + debut d'algo pour approximation du prix | On connait que les x et y de 2 points et les y des 2 autres points -> problème fonction 1er degré -> droite | Tester algo d'approximation du prix avec des données que l'on connait pour être sûr d'avoir la bonne approximation |
| Date | Travail à réaliser | Travail effectué | Problèmes rencontrés | Commentaires | Solutions aux problèmes |
|-----------------------|-----------------------------------------------------|------------------------------------------------------------------------|----------------------|-----------------------------------------------------------------------------------------------------------------------|--|
| 21.10.2024-28.10.2024 | Lancer le projet précédent et essayer le simulateur | Lancement du projet réussi + compréhension des résultats du simulateur | | Avoir la version de python 3.9 pour la compatibilité avec une récente version de numpy demandée dans requirements.txt | |
| 28.10.2024-04.11.2024 | Lister les fonctionnalités nécessaires au projet + Lire la documentation de Mr Souzaluz | Lecture des parties "Lexique", "Liste des acronymes", "1.2 TRADING AUTOMATISÉ", "CHAPITRE 2 : LES STRATÉGIES" et "CHAPITRE 3 : MÉTHODOLOGIE" + Début du listage des fonctionnalités | | | |
| 04.11.2024-11.11.2024 | Rechercher une API qui permet de récupérer les données de chaque seconde depuis 4-5 ans + Justifier le choix de la technologie | Listage des différentes API avec leurs avantages et désavantages + Justification de la technologie + Trouvé une librairie pour les graphiques | La plupart des API ont des limites de données par requêtes et de fréquences des données (1 min) | | |
| 11.11.2024-18.11.2024 | Récupérer les données (200000) et tester la librairie pour faire des graphes | J'ai créer un projet spring boot qui permet de récupérer les données en faisant plusieurs appels à l'api Binance | Problème avec la librairie des graphiques : le graphique s'affiche mais pas les candles | | |
| 18.11.2024-26.11.2024 | Afficher les données avec la librairie + Voir le temps que prends le programme pour récupérer 1 an de données + Mise en cache des données si récupération trop longue | Affichage des données avec la librairie. Il faut environ 1 minute pour récupérer 1 an de données. L'utilisateur peut choisir les dates qu'il veut. | Affichage des données pour plus de 10 jours : problème de chevauchement des timestamp de la 1ère requête et de la 2ème | | |
| 26.11.2024-02.12.2024 | Commencer à implémenter le simulateur et commencer l'introduction | Début d'une introduction et implémentation d'un ticker (déclencher un évènement toutes les $x$ secondes) | | | |
| 02.12.2024-09.12.2024 | Continuer de faire la doc et avancement du simulateur | Développement de l'introduction + ajout des choix technologiques + debut d'algo pour approximation du prix | On connait que les x et y de 2 points et les y des 2 autres points -> problème fonction 1er degré -> droite | Tester algo d'approximation du prix avec des données que l'on connait pour être sûr d'avoir la bonne approximation | |
| 09.12.2024-16.12.2024 | Continuer la documentation et le simulateur | Passage de la documentation dans le model word + Fin de l'interpolation de Lagrange + Début de l'implémentation de la simulation | | | Problème de la semaine précédente : Générer des temps aléatoires pour le prix high et low |
<!-- | | | | | | -->
\ No newline at end of file
File moved
File moved
File moved
docs/img/y1.png

28.9 KiB

docs/img/y2.png

25.3 KiB

docs/img/y3.png

27.3 KiB

docs/img/y4.png

20.4 KiB

docs/img/y5.png

33.2 KiB

docs/img/y6.png

24.3 KiB

docs/img/y7.png

24.4 KiB

docs/img/y8.png

16.5 KiB

File added
File added
......@@ -52,6 +52,12 @@ public class ApiController {
this.simulateur.stopSimulation();
}
@GetMapping("/test")
public void test() {
long[] x_tab = {1, -1, 2, 2};
float[] y = {3, 2, -1, -1};
this.simulateur.approximatePrice(x_tab, y, 3);
}
......
package com.example.testapi.model;
public class Interval {
private int deltaTime;
private Candle currentCandle;
public Interval(Candle currentCandle) {
this.deltaTime = 0;
this.currentCandle = currentCandle;
}
public Candle getCurrentCandle() {
return currentCandle;
}
public int getDeltaTime() {
return deltaTime;
}
public void updateDeltaTime() {
this.deltaTime += 1000;
}
public double checkprice(double price) {
if (price > this.currentCandle.getHigh()) {
return this.currentCandle.getHigh();
}
else if (price < this.currentCandle.getLow()) {
return this.currentCandle.getLow();
}
else {
return price;
}
}
}
package com.example.testapi.service;
import com.example.testapi.model.Interval;
import com.fasterxml.jackson.core.type.TypeReference;
import com.example.testapi.model.Candle;
import com.fasterxml.jackson.databind.ObjectMapper;
......@@ -29,6 +30,10 @@ public class ApiService {
private static final long TIME_10_JOURS = 10 * 24 * 60 * 60 * 1000;
public List<Candle> getCandles() {
return candles;
}
public void getCandles(long startTime, long endTime) throws InterruptedException, com.fasterxml.jackson.core.JsonProcessingException {
if (endTime < startTime) {
System.out.println("La date de fin ne peut pas être avant la date de début");
......@@ -87,18 +92,6 @@ public class ApiService {
}
// private final WebClient webClient;
//
// public ApiService(WebClient.Builder webClientBuilder) {
// this.webClient = webClientBuilder.baseUrl("https://api.example.com").build();
// }
//
// public String callApi() {
// return webClient.get()
// .uri("/resource")
// .retrieve()
// .bodyToMono(String.class)
// .block(); // Bloque pour obtenir le résultat dans un contexte synchrone
// }
}
package com.example.testapi.service;
import com.example.testapi.model.Candle;
import com.example.testapi.model.Interval;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.function.Function;
import java.util.function.LongConsumer;
@Service
public class SimulateurService {
private final ApiService apiService;
private Ticker ticker;
private int periodApproximationSec;
private Interval interval;
private List<Candle> candles;
private int indexCurrCandle;
public SimulateurService(@Value("${simulateur.ApproximationPeriod}") int periodApproximationSec) {
public SimulateurService(@Value("${simulateur.ApproximationPeriod}") int periodApproximationSec, ApiService apiService) {
this.periodApproximationSec = periodApproximationSec;
Runnable task = () -> System.out.println("Print après " + this.periodApproximationSec + " sec");
this.ticker = new Ticker(task);
this.apiService = apiService;
this.candles = apiService.getCandles();
this.indexCurrCandle = 0;
this.interval = new Interval(this.candles.get(this.indexCurrCandle));
}
public void startSimulation() {
......@@ -24,22 +36,29 @@ public class SimulateurService {
this.ticker.stop();
}
public void approximatePrice(long[] x_tab, float[] y, int n) {
LongConsumer funcApproxPrice = (long x) -> {
double[] poly_pts = new double[n];
for (int i = 0; i < x_tab.length; i++) {
double res = 1;
for (int j = 0; j < n; j++) {
if (i != j) {
res *= (double) (x - x_tab[j]) / (x_tab[i] - x_tab[j]);
}
public double approximatePrice(long[] x_tab, float[] y, long x) {
double res = 0.0;
int n = x_tab.length;
for (int i = 0; i < n; i++) {
double tmp = y[i];
for (int j = 0; j < n; j++) {
if (i != j) {
tmp *= (double) (x - x_tab[j]) / (x_tab[i] - x_tab[j]);
}
poly_pts[i] = res;
}
double poly = 0;
for (int i = 0; i < n; i++) {
poly += y[i] * poly_pts[i];
}
};
res += tmp;
}
System.out.println("res approx : " + res);
return res;
}
public void taskEachSec() {
long x = interval.getCurrentCandle().getTime() + this.interval.getDeltaTime();
long[] x_tab = {};
float[] y = {};
this.approximatePrice(x_tab, y, x);
interval.updateDeltaTime();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment