IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

Acces aux données pour un chart [Débutant]


Sujet :

Accès aux données

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Acces aux données pour un chart
    Bonjour

    Cette fois je dois passer à c# (je viens de Delphi) pour realiser un petit robot de trading.

    Je simule l'arrivée des ticks de prix dans cette phase de developpement en parcourant un fichier de prix.
    Je cree ma nouvelle bougie avec 4 prix : plus_haut, plus_bas,Open & close.
    Ensuite j'affiche en candelstick sur le chart.

    Ma question est donc toute bête : quel est le moyen le plus pertinent pour stocker et acceder au données en sachant que outre l'affichage, elle seront utilisées pour calculer certains indicateurs.
    En delphi je stockais tout dans une base SQLITE (fichier) mais je n avais aucune contrainte de delais d'execution alors que là je dois avoir un acces aussi rapide que possible.

    Je n'envisage pas le stockage en memoire (une collection si j ai bien compris ce que j ai lu) car cela limite la possibilité d emploi de plusieurs robots et leur duree d emploi.

    A bien y reflechir je songeais à un mix :
    Une Collection de taille limitée en memoire et un fichier.
    Quand la collection a atteint sa taille limite et qu une nouvelle bougie est cree, elle est enregistree dans le fichier, la premiere entree de la collection est supprimer et la nouvelle bougie vient en derniere place dans la collection.
    Cela permettrait de faire des calculs rapides en memoire et de n acceder au fichier que pour lire les données plus lointaines sur le chart.

    Je sais que je suis un peu long mais j aimerais comprendre :
    Mon idee est elle pertiennete selon vous ?
    Le type collection est il pertinent ? Un tableau d'objet serait il pas plus aisé à manipuler...bien qu il faudrait le decaler manuellement ...
    Quel type de fichier données serait le plus pertinent ? Je suis parti sur une base SQLITE mais je ne me suis même pas encore penché sur l'acces aux données depuis le chart... Visual studio a d autres sources de données qui je pense seront plus rapides en acces car Microsoft...en fait je ne sais pas...

    Merci pour vos conseils et votre patience

    Stéphane

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonsoir,

    Sur le principe, la solution que tu proposes me semble acceptable. Il faudra en connaitre un peu plus sur le contexte, les "requêtes" que tu vas avoir besoin de faire, etc...

    Pour le côté persistance des données, je ne le ferai pas bougie par bougie, mais par lot. Histoire de d'optimiser les entrées/sorties.

    Après, est-ce que cela ne vaudrait pas le coup d'utiliser une liste chaînée ? Cela t'éviterait de décaler tes éléments à chaque nouvelle donnée.

    Quels sont tes besoins aussi en terme de persistance, notamment en cas de panne (crash, reboot, disque dur HS, etc...) ? Car si les besoins sont fort, il vaudrait mieux que tu t'orientes vers un SGBD...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Merci d avoir pris le temps de me répondre.

    Ton idéee de Liste chainée me semble parfaite etant donné que mes calculs ne s'effectuent que sur le close.

    Donc mon idee etait bien d utiliser un SGDB pour stocker ces données pour en avoir un historique mais de garder en memoire les n dernieres valeurs (close) pour des calculs plus rapides, les requetes n intervenant que pour extraire en cas de besoin comme le parcours du chart sur une periode anterieure à celle affichée les données completes des bougies (date, open,close, low,high)

    Le chart n'etant necessaire que durant la partie 'developpement' pour m assurer que tout est correct visuellement car pour gagner en vitesse d execution je ne l afficherai pas dans le robot mais un bouton permettra de l ouvri dans un nouveau form.

    Mon objectif principal etant d'optimiser le temps de traitement pour eviter au maximum un decalage des prix durant la prise de decision.

    Je crois que tu m as apporté la solution.


    Mon passage de delphi à C# n'est pas aussi aisé que je l imaginais...
    Donc petite question :
    Je vais creer une liste chainee avec 50 elements. Pour certains calculs je n utiliserai que les 20 derniers.
    Un foreach me permet d acceder à la totalité des elements.
    Pour acceder au 20 derniers puis-je faire un boucle de 0 à list.count-30 ?

    merci.

    Stéphane

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par sp2308 Voir le message
    Je vais creer une liste chainee avec 50 elements. Pour certains calculs je n utiliserai que les 20 derniers.
    Un foreach me permet d acceder à la totalité des elements.
    Pour acceder au 20 derniers puis-je faire un boucle de 0 à list.count-30 ?
    Oui, c'est tout à fait possible. Il te suffit de faire une boucle for allant de 0 à list.count-30. A l'intérieur de cette boucle, tu ne te sers pas de la variable sur laquelle tu itères. Tu as un itérateur qui au début point sur le premier élément, et tu le fais avancer d'un élément à chaque itération de ta boucle.

    Sinon, si tu cherches vraiment les perfs, il y a plusieurs choses que tu peux faire.

    Pour commencer, tu peux utiliser un tableau de N=50 éléments par exemple, et tu retiens l'indice du premier élément. Ajouter un élément, c'est décrémenté l'indice du premier élément, et y mettre l'élément à insérer. Ainsi, tu n'as même plus à gérer les libérations, etc... Naturellement, quand tu vas rajouter un élément, il viendra écrasé le plus ancien.

    Pour la sauvegarde des éléments, tu peux tout simplement au moment où tu ajoutes un élément, le sauvegarder en même temps. De manière synchrone, ou, si tu veux gagner encore un peu de temps, de manière asynchrone. Par exemple, en mettant en place un mécanisme de producteur/consommateur.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    merci pour tes conseils

    Pour commencer, tu peux utiliser un tableau de N=50 éléments par exemple, et tu retiens l'indice du premier élément. Ajouter un élément, c'est décrémenté l'indice du premier élément, et y mettre l'élément à insérer. Ainsi, tu n'as même plus à gérer les libérations, etc... Naturellement, quand tu vas rajouter un élément, il viendra écrasé le plus ancien.
    Penses tu que cela soit plus rapide qua la liste chainee ?

    pour un tableau de 50,pour une insertion,Je boucle de 0 à 48 et copie l'element de l index +1 à la place de l element de l index.
    J'ajoute le close de la nouvelle bougie dans l'index 49 de mon tableau.

    J'imagine d apres ce que j'ai lu que je n ai que deux instructions pour une liste chainée, supprimer la 1er entree et ajouter la nouvelle entree.

    Apres pour le parcours de la liste je n ai aucune idee si un foreach sur la liste chainee ou un for avec l indice max du tableau est plus rapide.


    L'idee du multi thread est tres bonne. Je n ai jamais eu l occasion ni le besoin de l utiliser en delphi, c est l occasion de m y mettre.

    Merci

    Stéphane

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par sp2308 Voir le message
    Penses tu que cela soit plus rapide qua la liste chainee ?

    pour un tableau de 50,pour une insertion,Je boucle de 0 à 48 et copie l'element de l index +1 à la place de l element de l index.
    J'ajoute le close de la nouvelle bougie dans l'index 49 de mon tableau.
    Je faisais référence à la notion de buffer circulaire. Mais comme je n'ai pas été clair, c'est normal que tu ne m'aies pas compris

    Avec un buffer circulaire, tu n'auras pas d'allocation/déallocation de mémoire comme avec la liste chaînée.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Ok merci, je vais etudier cela

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    J ai trouvé cet excellent tuto http://www.blackwasp.co.uk/CircularBuffer.aspx

    Et tu as raison cela correspond à ce dont j ai besoin.
    Je m y mets demain

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Composants d'accès aux données pour Android
    Par FOCUS77 dans le forum Lazarus
    Réponses: 7
    Dernier message: 12/08/2016, 10h13
  2. Accès aux données pour le développement d'un quizz
    Par kyfr59 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/03/2011, 13h39
  3. Réponses: 7
    Dernier message: 15/02/2008, 20h01
  4. Réponses: 0
    Dernier message: 26/10/2007, 11h43
  5. Recherche bêta-testeurs pour composant accès aux données
    Par Rémi Remoussenard dans le forum Access
    Réponses: 4
    Dernier message: 29/11/2005, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo