Tuesday 14 February 2017

Mysql Trading Système

Deutsche Boerse acquiert le trading de devises La Deutsche Boerse a annoncé dimanche qu'elle achèterait le système de trading FX 360T, basé en Allemagne, pour 725 millions d'euros (796 millions d'euros). 360T est parmi une poignée de multi-banque, systèmes multi-utilisateurs qui ont effectivement changé de forex trading au cours des années précédentes. Deutsche Boerse a battu les actifs américains ainsi que le chauffeur d'échange de devises CME Group (CME. O) dans l'enchère publique, selon des ressources connues de l'offre. 30 JANVIER 21:30 Buck Falls comme usine de fabrication L'échelle de Bloombergs du papier-monnaie contre 10 pairs a glissé suite à son gain idéal de deux jours en 3 semaines parmi les enregistrements révélant la production a diminué le plus en plus d'un an en Mars ainsi que la fabrication commerciale chuté. Client confiance en soi soudainement chuté en avril au degré le plus faible en 7 mois. Les enregistrements économiques ont effectivement suivi les estimations des experts depuis le début du mois, selon une procédure de choc financier Bloomberg. JANUARY 30 21:30 Duping Band-Aids dans FX blog Actuellement, c'est le moment de libérer des systèmes de profession d'article qui sont adaptés à un marché qui reste à introduire rapidement tout en développant en outre droit dans une société à marge réduite. Le blog post profession cadre dans la zone aujourd'hui a été créé lorsque la société de la voix a été la principale méthode de négociation. Avec le commerce numérique changeant de voix pour la majeure partie des achats, la profession de manutention besoin de progresser en outre. Laisser un commentaireBien regarder autour. Problème a été autour pendant un certain temps. Aucune bonne solution trouvée. Ce qui serait bien est la source MQL4 pour ANSI2UNICODE et UNICODE2ANSI. Je n'aime pas vraiment utiliser des wrappers qui semble être la solution suggérée Je suis en utilisant une bibliothèque pour mes fonctions MySQL et je voudrais qu'il soit commun pour MQL5 et MQL4 (Compiler directives acceptées) et il a ces fonctions dans MQL5 Puis-je Vous suggérons de ne pas répondre à l'intérieur de la citation. C'est très ennuyeux. Je vous remercie. Désolé de trouver la solution. L'auteur de l'ANSI2UNICODE et UNICODE2ANSI avait fait une mise à jour du code d'origine à partir de 2010 Rechercher dans les commentaires Très simple à modifier avec les directives du compilateur pour que le code fonctionne à la fois en MQL4 et MQL5 Testé OK, Case closed Beaucoup, Enfants, dans les années de début des années 90 fous, deux langues étaient dans la bataille dans le monde de développeur. Pascal, avec une syntaxe intuitive, facile à comprendre, bien adaptée à un langage de haut niveau, et C, avec une syntaxe plus cryptique, mais plus rapide à utiliser, bien adaptée à son niveau moyen. C a gagné la bataille, et. MetaTrader 5 - Intégration Comment accéder à la base de données MySQL à partir de MQL5 (MQL4) Introduction Le problème de l'interaction de MQL avec les bases de données n'est pas nouveau, mais toujours pertinent. L'utilisation de bases de données peut grandement améliorer les possibilités de MetaTrader: stockage et analyse de l'historique des prix, la copie des métiers d'une plate-forme de négociation à l'autre, offrant quotestrades en temps réel, lourds calculs analytiques sur le côté serveur andor ou à l'aide d'un calendrier, Des comptes utilisant des technologies Web. Quoi qu'il en soit, il y avait beaucoup de tentatives de bénéficier de la combinaison de MQL et MySQL, certaines solutions sont disponibles dans la CodeBase. Par exemple MySQL enveloppe - bibliothèque pour MetaTrader 4 est le projet, à partir de laquelle de nombreux programmeurs démarrer leurs propres développements avec des ajouts supplémentaires. À mon avis, l'un des inconvénients de cette solution est l'allocation de tableaux spéciaux pour lire les données de la base de données. Un autre projet MySQL logger 1 - EA pour MetaTrader 4 est hautement spécialisé, il n'utilise pas de wrapper pour accéder à la bibliothèque standard libmysql. dll. Par conséquent, il ne fonctionne pas dans MetaTrader4 Build 600, car les caractères char ont été remplacés par wchart. Et l'utilisation du type int au lieu du pointeur de structure TMYSQL provoque des fuites de mémoire dans le projet (la mémoire allouée ne peut pas être contrôlée). Un autre projet intéressant est EAXMysql - bibliothèque MySQL - bibliothèque pour MetaTrader 5. C'est une bonne mise en œuvre. La liste des inconvénients énoncée par l'auteur impose certaines restrictions à son utilisation. Quiconque a besoin d'utiliser des bases de données dans ses projets MQL a deux options: soit développer sa propre solution et connaître chaque partie de celle-ci, soit utiliser toute solution tierce, apprendre à l'utiliser et détecter tous ses défauts qui peuvent gêner Leur projet. J'ai fait face à une telle nécessité et les deux options tout en développant un robot commercial assez complexe. Après avoir cherché à travers des projets existants et étudié un très grand nombre de solutions, j'ai réalisé que non des implémentations trouvées pourraient aider à apporter mon robot commercial au niveau professionnel. De plus, il y avait aussi des solutions absurdes, par exemple: les opérations DMLDDL (données inserttupdatedelete, objets createdrop dans la base de données) ont été exécutées en utilisant la libmysql. dll standard, et la sélection des données (SELECT) a effectivement été implémentée comme une requête HTTP (using inet. dll) À un script PHP situé sur le serveur web du côté du serveur MySQL. Les requêtes SQL ont été écrites dans le script PHP. En d'autres termes, pour exécuter le projet, il faut garder les composants suivants disponibles, configurés et exécutés: serveur MySQL, serveur web ApacheIIS, scripts PHPASP côté serveur. Une combinaison d'un assez grand nombre de technologies. Bien sûr, dans certaines circonstances cela peut être acceptable, mais quand la seule tâche est de sélectionner des données de la base de données - c'est absurde. En outre, le soutien d'une telle solution encombrante prend du temps. La plupart des solutions n'avaient aucun problème à insérer des données, à créer des objets, etc. Le problème était la sélection des données, car les données devaient être retournées à l'environnement appelant. J'ai pensé que l'utilisation de tableaux à cet effet était impraticable et gênant, tout simplement parce que dans le cours de developmentdebuggingsupport du projet principal, sélectionnez les requêtes à la base de données peut être changé, alors que vous devez également contrôler l'allocation de mémoire correcte pour les tableaux. Eh bien, cela peut et doit être évité. L'interface MQL lt-gt MySQL ci-après est basée sur une approche typique utilisée dans Oracle PLSQL, MS SQL T-SQL, AdoDB - utilisation de curseurs. Cette interface a été développée pour faciliter la programmation et la maintenance, ainsi qu'un minimum de composants. Il est implémenté en tant que wrapper DLL à la bibliothèque standard libmysql. dll et un ensemble de fonctions d'interface en tant que fichier. mqh. 1. MQL lt-gt Interface MySQL L'interaction entre le terminal MetaTrader (via les programmes MQL) peut être implémentée à l'aide des composants suivants: 1. La bibliothèque d'interface MQLMySQL. mqh. Il est ajouté au projet en utilisant le répertoire include et peut être modifié à votre goût. Il contient les directives pour l'importation de fonctions de la bibliothèque dynamique MQLMySQL. dll, ainsi que des fonctions pour les appeler et traiter les erreurs. 2. La bibliothèque dynamique MQLMySQL. dll. Il s'agit d'un wrapper pour accéder aux fonctionnalités de la bibliothèque standard libmysql. dll. En outre, la bibliothèque MQLMySQL. dll traite les résultats des opérations et l'accès partagé aux connexions et aux curseurs de base de données. Cela signifie que vous pouvez créer et utiliser plusieurs connexions à la fois (à partir d'un ou plusieurs programmes MQL), garder quelques curseurs ouverts, avec des requêtes vers une ou plusieurs bases de données. Les mutex sont utilisés pour séparer l'accès aux ressources partagées. 3. La bibliothèque dynamique standard libmysql. dll est un pilote d'accès natif. Vous pouvez le copier à partir de n'importe quelle distribution de base de données MySql dans C: WindowsSytem32 ou ltTerminalgtMQL5Libraries (pour MetaTrader 4 dans ltTerminalgtMQL4Libraries). En fait, il est responsable de l'envoi des requêtes à la base de données et de la récupération des résultats. Permettez-nous de s'attarder sur les principaux points, tels que: openingclosing la connexion, effectuer des requêtes DMLDDL et la sélection des données. 1.1. Ouverture et fermeture de la connexion La fonction MySqlConnect a été implémentée pour ouvrir la connexion avec la base de données MySQL: Cette fonction implémente la connexion avec la base de données et retourne un identificateur de connexion. Cet ID sera nécessaire pour interroger la base de données. En cas de défaillance de connexion, la valeur de retour est -1. Pour les détails d'erreur, vérifiez les variables MySQLErrorNumber et MySqlErrorDescription. En règle générale, cette fonction est appelée lors de la manipulation de l'événement OnInit () dans le programme MQL. Le nom DNS ou l'adresse IP du serveur MySQL Utilisateur de base de données (par exemple, root) Le mot de passe de l'utilisateur de base de données Le nom de la base de données Le port TCPIP de la base de données (habituellement 3306) Le socket Unix (pour les systèmes Unix) Combinaison de drapeaux spéciaux (généralement 0) La fonction d'interface MySqlDisconnect a été implémentée pour la fermeture de la connexion: Cette fonction ferme la connexion avec la base de données MySQL. En règle générale, cette fonction est appelée lors de la manipulation de l'événement OnDeinit () dans le programme MQL. Il convient de noter que la base de données MySQL peut fermer la connexion de son propre chef en cas de défaillance matérielle, de congestion réseau ou de timeout (lorsque aucune requête n'est envoyée à la base de données pendant longtemps). Souvent, les développeurs utilisent l'événement OnTick () pour écrire des données dans la base de données. Cependant, quand vient le week-end et le marché est fermé, la connexion est toujours suspendue. Dans ce cas, MySQL fermera son timeout (la valeur par défaut est de 8 heures). Et lundi, quand le marché est ouvert, les erreurs se trouvent dans le projet. Il est donc fortement recommandé de vérifier la connexion et / ou de se reconnecter à la base de données après un intervalle de temps inférieur au délai spécifié dans les paramètres du serveur MySQL. 1.2. Exécution des requêtes DMLDDL Les opérations DML sont utilisées pour les manipulations de données (D Anticulation D antimulation D ata). Les manipulations de données comprennent l'ensemble suivant d'instructions: INSERT, UPDATE et DELETE. Les opérations DDL sont utilisées pour la définition des données (D af fi nition de D définitions). Cela comprend la création (CREATE) d'objets de base de données (tables, vues, procédures stockées, déclencheurs, etc.) et leur modification (ALTER) et suppression (DROP). Ses déclarations DMLDDL ne sont pas toutes, mais DCL (D ataControl L anguage) est utilisé pour séparer l'accès aux données, mais nous ne ferons pas de plongée dans les fonctionnalités de SQL. L'une de ces commandes peut être exécutée à l'aide de la fonction d'interface MySqlExecute: En tant que requête SQL, vous pouvez également utiliser la commande USE pour sélectionner la base de données. Je voudrais mentionner l'utilisation de requêtes multi-instructions. Il s'agit d'un ensemble de commandes SQL séparées par le caractère. Pour activer le mode multi-instructions, la connexion avec la base de données doit être ouverte avec l'indicateur CLIENTMULTISTATIONS: Dans ce fragment, 3 entrées seront insérées dans la table EURUSD avec un seul appel à la base de données. Chacune des requêtes stockées dans la variable SQL est séparée par. Cette approche peut être utilisée pour des insertupdate fréquents un ensemble de commandes nécessaires est combiné en un seul paquet, ce qui soulage le trafic réseau et améliorer la performance de la base de données. La syntaxe INSERT dans MySQL est assez bien développée en termes de gestion des exceptions. Par exemple, si la tâche consiste à déplacer l'historique des prix, une table doit être créée pour les paires de devises avec la clé primaire du type datetime, car la date et l'heure d'une barre sont uniques. En outre, il convient de vérifier si les données d'une barre particulière existent dans la base de données (pour améliorer la stabilité de la migration des données). Avec MySQL cette vérification n'est pas nécessaire, puisque l'instruction INSERT supporte ON DUPLICATE KEY. Dans les mots plus simples, si une tentative est faite pour insérer des données, et que la table a déjà une entrée avec la même date et heure, l'instruction INSERT peut être ignorée ou remplacée par UPDATE pour cette ligne (voir. Dev. mysqldocrefman5.0eninsert - On-duplicate. html). 1.3. Sélection des données L'instruction SQL SELECT est utilisée pour récupérer les données de la base de données. La séquence d'actions ci-dessous est utilisée pour sélectionner les données et récupérer le résultat de la sélection: Préparation de l'instruction SELECT. Ouverture du curseur. Obtention du nombre de lignes renvoyées par la requête. Boucler et récupérer chaque ligne de la requête. Extraction de données aux variables MQL à l'intérieur de la boucle. Fermeture du curseur. Bien sûr, il s'agit d'un schéma général, donc pas toutes les opérations sont nécessaires pour chaque cas. Par exemple, si vous voulez vous assurer qu'une ligne existe dans la table (par n'importe quel critère), il suffira de préparer une requête, d'ouvrir un curseur, d'obtenir le nombre de lignes et de fermer le curseur. En fait, les parties obligatoires sont - la préparation de l'instruction SELECT, l'ouverture et la fermeture du curseur. Qu'est-ce qu'un curseur? C'est une référence à la zone de mémoire de contexte, en fait - l'ensemble de valeurs résultant. Lorsque vous envoyez la requête SELECT, la base de données alloue de la mémoire pour le résultat et crée un pointeur vers une ligne que vous pouvez déplacer d'une ligne à l'autre. Ainsi, il est possible d'accéder à toutes les lignes dans l'ordre d'une file d'attente définie par la requête (clause ORDER BY de l'instruction SELECT). Les fonctions d'interface suivantes sont utilisées pour la sélection des données: Ouverture du curseur: l'identificateur de curseur retourné par MySqlCursorOpen La fermeture d'un curseur est une opération critique. N'oubliez pas de fermer les curseurs. Imaginez que vous ouvrez le curseur et oubliez de le fermer. Supposons que les données soient récupérées sur le curseur à chaque virgule lors de la manipulation de l'événement OnTick (), et chaque fois qu'un nouveau curseur est ouvert, la mémoire est allouée pour lui (côté client et serveur). À un certain moment, le serveur refusera le service parce que la limite des curseurs ouverts est atteinte, ce qui pourrait provoquer le débordement de la mémoire tampon. Bien sûr, son exagéré, un tel résultat est possible lorsque vous travaillez avec libmysql. dll directement. Toutefois, la bibliothèque dynamique MQLMySQL. DLL distribue la mémoire pour les curseurs et refuse d'ouvrir un curseur qui dépasse la limite autorisée. Lors de la mise en œuvre de tâches réelles, il suffit de garder 2 ou 3 curseurs ouverts. Chaque curseur peut gérer une mesure cartésienne de données en utilisant deux à trois curseurs simultanément (imbriqués, par exemple, lorsqu'un paramètre dépend d'un autre curseur) couvre deux ou trois dimensions. C'est parfaitement bien pour la plupart des tâches. En outre, pour la mise en œuvre de la sélection de données complexes, vous pouvez toujours utiliser ces objets pour représenter la base de données (VIEW), les créer sur le côté serveur et leur envoyer des requêtes à partir du code MQL en tant que tables. 1.4. Informations supplémentaires Les éléments suivants peuvent être mentionnés comme des caractéristiques supplémentaires: 1.4.1. Lecture de données à partir d'un fichier. INI Souvent, le stockage des informations sur les connexions à la base de données (adresse IP du serveur, port, nom d'utilisateur, mot de passe, etc.) directement dans le code MQL (ou paramètres de l'Expert Advisor, indicateur de script) n'est pas Rationnel, parce que le serveur peut être déplacé, son adresse peut changer dynamiquement, etc. Vous aurez besoin de modifier le code MQL dans ce cas. Ainsi, toutes ces données devraient être mieux stockées dans le fichier. INI standard, alors que seul son nom devrait être écrit dans le programme MQL. Ensuite, utilisez la fonction ReadINI pour lire les paramètres de connexion et les utiliser. Par exemple, le fichier INI contient les informations suivantes: Pour obtenir l'adresse IP du serveur, exécutez les opérations suivantes: Le fichier INI se trouve à C: MetaTrader5MQL5Experts et est appelé MyConnection. ini, vous accédez à la clé Server de la section MYSQL. Dans un fichier INI, vous pouvez stocker des paramètres sur différents serveurs utilisés dans votre projet. 1.4.2. Tracer les zones problématiques La bibliothèque d'interface fournit le mode trace, qui peut être activé pour le débogage de requêtes SQL n'importe où dans un programme MQL. Spécifiez les éléments suivants dans la zone de problème: Si vous activez le traçage au début du programme MQL et ne le désactivez pas, tous les appels à la base de données seront enregistrés. Le journal est conservé dans la console de terminal (à l'aide de la commande Imprimer). 2. Exemples Cette section fournit quelques exemples de connexion et d'utilisation des bibliothèques développées. Les voir et estimer l'utilité de la solution logicielle. L'exemple MySQL-003.mq5 montre ce qui suit: connexion à une base de données (les paramètres de connexion sont stockés dans le fichier. ini), création d'une table, insertion de données (également à l'aide d'instructions multiples) et déconnexion de la base de données. Exemple MySQL-004.mq5 montre la sélection des données d'une table créée par le script MySQL-003.mq5. Les exemples ci-dessus contiennent le traitement typique des erreurs utilisé dans les projets réels. En fait, chaque requête utilisée dans un programme MQL doit être débogée dans n'importe quel client MySQL (PHPMyAdmin, DB Ninja, console MySQL). Personnellement, j'utilise et recommande des logiciels professionnels pour le développement de base de données Quest TOAD for MySQL. Conclusion Cet article ne décrit pas les détails de la mise en œuvre de MQLMySQL. DLL développé dans l'environnement Microsoft Visual Studio 2010 (CC). Cette solution logicielle est conçue pour une utilisation pratique et a plus de 100 implémentations réussies dans divers domaines du développement de logiciels MQL (de la création de systèmes de négociation complexes à la publication Web). Les versions des bibliothèques pour MQL4 et MQL5 sont jointes ci-dessous. Les pièces jointes incluent également un fichier zip avec le code source de MQLMySQL. DLL La documentation est incluse dans les archives Pour utiliser les exemples, n'oubliez pas de spécifier les paramètres de connexion à votre base de données dans le fichier ScriptsMyConnection. ini.


No comments:

Post a Comment