Sunday, January 1, 2017

Système Commercial Haskell

Donc faisaient cette affectation à Uni et j'ai un sérieux envie de faire la tâche dans haskell. C'est une simulation d'un moteur de négociation d'actions. La situation est que nous avons des données provenant d'un csv et nous voulons analyser chaque enregistrement et de le traiter d'une certaine manière en fonction de la phase de marché est alloué à. Justification de l'utilisation de haskell, c'est que je considère le moteur de trading comme un système fonctionnel lourd. J'ai eu haskell expérience avant mais seulement une expérience mineure, jamais rien de ce grand. Nous voulions exécuter un thread qui importerait les csvs dans une file d'attente de commandes non traitées et ensuite le programme principal accède à cette file d'attente pour traiter chaque commande. Cependant, comment pourrais-je atteindre ce que je sais dans C i serait juste mis en place la classe afin qu'il puisse accéder à la classe CSVParser qui tiendrait la file d'attente non traitée. Cela signifie également que le thread d'importation serait en cours d'exécution à travers toutes les phases du marché ou jusqu'à ce qu'il a terminé l'importation du fichier csv. Toute orientation sur la façon de réaliser ce serait formidable (ne cherche pas un script entièrement dactylographié, juste ce que les choses dans haskell je devrais regarder) demandé Mar 29 12 à 23h33 fermé comme pas une vraie question par Ritch Melton. Dflemstr. Flexo 9830. Michael Petrotta. Graviton Mar 30 12 à 1:45 Il est difficile de dire ce qui est demandé ici. Cette question est ambiguë, vague, incomplète, trop large, ou rhétorique et ne peut pas être raisonnablement répondu dans sa forme actuelle. Pour obtenir de l'aide pour clarifier cette question afin qu'elle puisse être rouverte, consultez le centre d'aide. Si cette question peut être reformulée pour correspondre aux règles du centre d'aide. S'il vous plaît éditer la question. Automated Trading Automated Trading expérience de chaque tick Exécuter en microsecondes Lightspeed offre deux formes de solutions commerciales automatisées Lightspeed Gateway et le Lightspeed Trader API. L'interface de programmation d'application Lightspeed Trader expose plusieurs bibliothèques dans Lightspeed Trader que les programmeurs C peuvent utiliser pour accéder à la fonctionnalité Lightspeed Traders. Les utilisateurs peuvent créer des bibliothèques de liens dynamiques (DLL) qui peuvent être démarrés à partir de la fenêtre Lightspeed Graybox pour effectuer ces fonctions. Lightspeed Gateway est un système de négociation entièrement automatisé qui offre une latence super faible aux marchés boursiers nationaux, y compris le NYSE et le marché boursier NASDAQ. Lightspeed Gateway est complètement agnostique et peut être utilisé sur tous les principaux systèmes d'exploitation et langages de programmation. Besoin d'aide Contactez-nous pour l'instant à notre équipe de Lightspeed. Lightspeed Institutional est une division de Lightspeed Trading, LLC (membre de la FINRA, SIPC). La réponse du système, l'exécution du commerce et les délais d'accès au compte peuvent varier en raison de divers facteurs, notamment les volumes de transactions, les conditions du marché, la performance du système, les retards dans les données du marché et d'autres facteurs. Titres exécutés par l'intermédiaire de Lightspeed Trading, LLC. Autos est une Haskell DSL et une plate-forme fournissant une API avec la sémantique déclarative, compositionnelle, dénotatif pour les programmes interactifs, les jeux, et les automations discrets, statiques, avec états Implicitement dérivé de sérialisation. Il convient à tout domaine où vos programmes d'entrée ou de sortie est un flux de valeurs, d'événements d'entrée ou de vues de sortie. Au niveau supérieur, il vous permet de décrire votre programme interactif ou de simulation comme un transformateur de flux de valeurs. Par composition et transformation d'autres transformateurs de courant. Ainsi, des choses comme: Bots de chat Jeux basés sur tour GUIs Simulations numériques Commandes de processus Interfaces de texte (Valeur) transformateurs de flux, filtres, fusions, processeurs Son a été appelé FRP pour des contextes de temps discrets. Intrigé Excited Démarrer au tutoriel C'est une partie de ce répertoire de paquets et aussi sur github au lien ci-dessus. Le serveur de documentation de développement courant se trouve à mstksg. github. ioauto. De là, vous pouvez consulter ma série All About Auto sur mon blog, où je brise des projets d'échantillon et de montrer à approcher les projets dans la vraie vie. Vous pouvez également trouver des exemples et des démonstrations dans le repo auto-examples sur github. Haskell DSLlibrary. C'est une bibliothèque Haskell qui fournit un langage spécifique au domaine pour composer et déclarer vos jeux de programmes. Pourquoi Haskell Eh bien, Haskell est l'une des seules langues qui a un système de type assez expressif pour permettre des compositions de type sûr sans vous gêner. Chaque composition et composante est vérifiée au moment de la compilation pour s'assurer qu'ils ont même un sens, de sorte que vous pouvez travailler avec une assurance que tout s'inscrit ensemble à la fin --- et aussi de la manière correcte. Le système de type peut également vous guider dans votre développement ainsi. Tout cela sans la surcharge de productivité des annotations de type explicite. En toute honnêteté, il coupe le mal de tête de grands projets vers le bas --- et ce que vous devez garder dans votre tête que vous développer et maintenir --- par au moins 90. Plate-forme. Non seulement donne les outils minimaux pour créer vos programmes, mais fournit également une plate-forme pour exécuter et de les développer et les intégrer, ainsi que de nombreuses fonctions libraryAPI pour les processus communs. Déclaratif. Ce n'est pas impératif. C'est-à-dire, contrairement à d'autres langues, vous ne programmez pas votre programme en disant cela arrive, alors cela arrive. Et dans le cas A, cela se produit dans le cas B, quelque chose d'autre arrive. Au lieu de spécifier votre programme par une série de procédures et d'étapes de changement d'état (une boucle de jeu), vous déclarez plutôt comment les choses se passent. Vous déclarez des relations fixes ou en évolution entre les entités et les processus et les interactions. Et ce processus de déclaration est de haut niveau et pur. Dénotatif. Au lieu de construire votre programme des morceaux qui changent les choses et exécutent les choses séquentiellement, votre programme entier est composé de blocs de construction sémantique significatifs qui dénotent des relations et des concepts constants. La composition de ces blocs de construction dénote également de nouveaux concepts. Vos blocs de construction sont des idées bien définies. Compositional. Vous construisez votre jeu de programme finalement complexe à partir de petits composants simples. Ces composants simples se composent les uns avec les autres et les compositions de composants composent aussi bien avec d'autres composants. Chaque couche de composition est transparente. C'est le principe d'architecture de programme évolutif dans la pratique: Si vous combinez un A avec un A, vous n'obtenez pas un B vous obtenez un autre A, qui peut combiner avec tout autre A. Comme les tuyaux unix, où vous pouvez construire des programmes complexes par simple tuyauterie Ensemble simples, simples. Étape discrète. Cette bibliothèque est destinée à des choses qui passent discrètement il n'ya pas de concept significatif de temps continu. Les bons exemples comprennent les jeux par tour, les bots de chat et les automates cellulaires. Les mauvais exemples incluent les jeux en temps réel et les simulations de day trading. Localement stateful. Chaque composant encapsule son propre état local (et caché). Il n'y a pas d'état global ou impacte partagé. Ceci est en contraste avec les bibliothèques monades géantes où vous transportez tout l'état du jeu dans un type de données géant et que votre boucle de jeu est simplement une mise à jour de cet état. Si vous avez un composant représentant un joueur et un composant représentant un ennemi, les deux composants ne doivent jamais s'inquiéter de l'état de l'autre ou de la structure de leur état partagé. En outre, vous n'avez jamais à vous soucier de quelque chose de lire ou de modifier une partie de l'état sharedglobal qu'il n'était pas destiné à lire ou à modifier (Quelque chose que vous ne pouvez guaruntee dans la mise en œuvre naïve de la géant monade état technique). Interactif. Le comportement et la structure de votre programme peuvent réagir et varier dynamiquement avec l'interaction extérieure. Je ne sais pas comment autrement élaborer sur le mot interactif, en fait des programmes interactifs, des jeux et des automatismes. Programmes, jeux et automationssimulations. Si vous faites quelque chose de temps discret qui encapsule une sorte d'état interne, surtout si son interactif, c'est pour vous. D Sérialisation implicitement dérivée. Tous les composants et leurs compositions par construction sont automatiquement freezables et sérialisables, et rechargés et repris avec tous les états internes restaurés. Comme il a été appelé par ertes, ses états sauver gratuitement. La chaîne officielle de support et de discussion est haskell-auto sur freenode. Vous pouvez également me trouver (le mainteneur et le développeur) comme jle sur haskell-game ou haskell. Theres également un canal de gitter si IRC n'est pas votre tasse de thé. De plus, les contributions à la documentation et aux tests sont les bienvenues. D Auto est distinct d'un transformateur d'état (monade d'état ou passage d'état explicite) en ce sens qu'il vous donne la possibilité de composer et d'isoler implicitement les transformateurs d'état et l'état. Imaginez que vous avez deux monades d'état différentes avec des états différents, et vous pouvez les composer ensemble en une boucle géante, et: Vous n'avez pas à faire un nouveau type composite, vous pouvez ajouter un nouveau composant traitant de son propre état sans changer le Type d'état total. Vous ne pouvez écrire quoi que ce soit de parler en croix. Vous ne pouvez écrire quoi que ce soit qui peut interférer avec l'état interne de tous les composants chacun est isolé. So --- Auto est utile sur une approche state monadstate transformateur dans les cas où vous souhaitez construire votre problème de plusieurs composants individuels, et de les composer tous ensemble à la fois. Les exemples incluent un robot de discussion à états multiples, où chaque module du bot chat se compose de son propre état interne. Si vous avez utilisé une approche monade d'état, chaque fois que vous avez ajouté un nouveau module avec son propre état, vous devrez l'ajouter dans votre type d'état total. Ce n'est tout simplement pas l'échelle. Imaginez une grande architecture, où chaque composition ajoute de plus en plus de complexité. Maintenant, imaginez que vous pouvez simplement jeter dans un autre module avec son propre état sans aucune autre composante même soins. Ou être en mesure de limiter l'accès implicitement, sans limitation explicite par le levage avec zoom de la lentille, etc (Sans cela, vous avez fondamentalement état global - la chose même que nous sommes allés à la programmation fonctionnelle Haskell à éviter en premier lieu Et la chose Que les langues ont essayé de prévenir dans les vingt dernières années de développement du langage. Pourquoi aller en arrière) En plus de toutes ces raisons pratiques, l'État impose un grand changement impératif dans votre conception. L'état vous oblige à commencer à modéliser votre problème comme cela se produit, alors cela arrive, alors cela arrive. Lorsque vous choisissez d'utiliser une monade État ou une approche de passage de l'État, vous commencez immédiatement à encadrer votre programme entier d'une approche impérative. Auto vous permet de structurer votre programme de manière dénotative et déclarative. Il vous donne ce style impressionnant que la programmation fonctionnelle promis en premier lieu. Au lieu de dire de faire cela alors que, vous dites que c'est comment les choses. Juste sont. C'est la structure de mon programme, et c'est la nature de la relation entre chaque composante. Si vous utilisez déjà Haskell. Je n'aurais pas à vous expliquer les avantages d'un style déclaratif de haut niveau sur un impératif :) Cela étant dit, il ya des cas où Auto est soit le mauvais outil ou pas très utile. Cas impliquant un temps intrinsèquement continu. Auto est destiné aux situations où le temps progresse dans les tiques discrètes --- entiers, et non réels. Vous pouvez le faux en simulant le temps continu avec un échantillonnage discret. Mais FRP est un système d'abstraction beaucoup, beaucoup plus puissant et sûr pour la manipulation de ce que Auto est. Voir la section suivante sur le PRF. Cas où vous n'avez pas vraiment interactionsCompositions entre différents composants stateful. Si tout votre programme est juste un foldr ou scanl ou iterate. Et vous n'avez pas de multiples parties en interaction de votre état, Auto vraiment cant offrent beaucoup. Si, cependant, vous avez plusieurs plis ou états que vous voulez exécuter ensemble et composer, alors cela pourrait être utile Intense IO stuff et la gestion des ressources. Auto n'est pas des tuyaux ou conduit. Tous les OI sont effectués en dehors des composants Auto Auto peut être utile pour le traitement de fichiers et la modification de flux, mais seulement si vous manipulez séparément les parties IO. Auto fonctionne très bien avec les tuyaux ou le conduit de ces bibliothèques sont utilisées pour connecter Auto au mot extérieur, et de fournir une interface sécurisée. En d'autres termes, Auto gère les flux de valeurs, alors que les flux d'effets de la poignée des conduits se rapportent à FRP Auto emprunte beaucoup de concepts à partir de la programmation fonctionnelle réactive --- en particulier les bibliothèques à flèches et localisées comme netwire. Au mieux, Auto peut être dit apporter beaucoup d'idées d'API et emprunte certains aspects du modèle sémantique de PRF et les intègre comme une partie d'un modèle sémantique plus large plus approprié pour des contextes d'discret-temps discrets-temps. Mais, les utilisateurs de ces bibliothèques seraient probablement en mesure de ramasser rapidement Auto. Et l'inverse est (je l'espère) vrai aussi. Notez que cette bibliothèque n'est pas censée être une sorte de substitution significative pour la mise en œuvre des situations qui impliquent des concepts de temps continu (valeur réelle valeur, par opposition à valeur entière) (comme les jeux en temps réel), vous pouvez faux en utilisant Auto. Mais dans ces situations, le PRF fournit une sémantique et un ensemble de concepts bien supérieurs pour travailler dans de tels contextes. C'est-à-dire, vous pouvez faux, mais vous perdez alors presque tous les avantages de PRF en premier lieu. Les schémas de sérialisation de problèmes de Safecopy sont implicitement dérivés, mais si votre programme change, il est peu probable que le nouveau schéma de sérialisation puisse reprendre quelque chose de l'ancien. À l'heure actuelle, la solution est de sérialiser seulement les petits aspects de votre programme que vous pouvez gérer et manipuler directement lors de la modification de votre programme. Une meilleure solution pourrait exister. En principe, très peu de votre programme devrait être plus d'IO comme une monade. Mais parfois, il devient très pratique à des fins d'abstraction. Manipuler des erreurs d'E / S d'une manière robuste n'est pas tout à fait mon point fort, et donc alors que presque tous les idiomes auto éviter IO et runtime, pour certaines applications, il pourrait être inévitable. Auto n'est pas et ne sera jamais sur le streaming IO effets. Mais savoir quelles parties d'IO s'insèrent dans le modèle sémantique des transformateurs de flux de valeurs donnerait beaucoup de perspicacité. Aussi, la plupart des coureurs Auto (les fonctions qui traduisent un Auto dans IO qui s'exécute) pourrait être en mesure de bénéficier d'un look plus rigoureux aussi. Tests tests arent vraiment fait encore, désolé Travailler sur ceux :)


No comments:

Post a Comment