Metatrader 5 - DDE - Serveur Qu'est-ce qu'un serveur Metatrader 5-DDE? Pourquoi Metatrader 5-DDE? Serveur nécessaire Metatrader 5 est la prochaine version après Metatrader 4, la plateforme de trading mondiale. Par rapport à Metatrader 4 Metatrader 5 a changé et amélioré dans de nombreux domaines. Mais certaines fonctions ne sont plus disponibles dans la nouvelle version de Metatrader. Une de ces fonctions est le service DDE qui était dans Metatrader 4 une fonctionnalité très utile pour exporter des citations de Metatrader dans des programmes externes comme Excel, Amibroker ou autres clients DDE. Pour combler cette lacune, nous avons développé un serveur DDE pour compenser cela. Avec ce serveur, vous pouvez utiliser Metatrader 5 comme source de données et exporter des devis via DDE. Il fonctionne comme un connecteur entre Metatrader 5 et un ou plusieurs clients DDE. Utilisez les paramètres suivants: Service: MT5 Sujet: Symbole (le symbole d'origine de MT5, f. e. pour Us-Dollar contre Euro EURUSD) Article: BID o. DEMANDER o. DERNIER o. TEMPS o. VOLUME o. QUOTE BID explicite ASK auto-explicative LAST dernier devis d'une transaction TIME timestamp VOLUME explicite QUOTE toutes les valeurs séparées par un point-virgule SYMBOLBIDASKLASTTIMEVOLUMETle logiciel peut être téléchargé et installé directement. La routine d'installation contient tous les scripts et bibliothèques nécessaires. Après la première exécution, le programme peut être testé pendant 14 jours sans limitation. Après le procès a terminé, vous pouvez par une licence complète pour seulement 29,00 euro via PayPal. Le formulaire PayPal peut être démarré avec le bouton Obtenir une licence directement depuis le programme. Télécharger MT5DDE Setup Installation: Télécharger le programme d'installation Install-MT5DDE. exe Exécutez le programme d'installation et suivez les instructions Copiez le fichier DDE. dll dans le répertoire Bibliothèques de l'installation de Metarader 5 Copiez les fichiers DDE. ex5 et DDE. mq5 dans le répertoire Indicateurs dans l'installation de Metarader 5 Les deux répertoires se trouvent dans le répertoire MQL5 Activer dans Metarader 5 le point Autoriser les importations de DLL. Cela se trouve sous ToolsOptionsExpert Advisors Utilisation: Démarrez Metarader 5 et ouvrez un diagramme Démarrez le serveur MT5 - DDE Dans Metarader 5 ouvrez le navigateur et le point Indicateurs personnalisés Dans la liste, faites glisser l'indicateur DDE sur le graphique et déposez-le. Point Autoriser les importations DLL est activé Appuyez sur le bouton OK Maintenant vous devriez voir dans MT5 - DDE - serveur entrant qoutes Activer le serveur DDE avec un clic sur le bouton avec le symbole Pour arrêter le serveur DDE cliquez sur le bouton avec le symbole à nouveau Attention - Important Avant de fermer un graphique, assurez-vous d'avoir désactivé l'indicateur DDE via le menu contextuel. Sinon, la DLL impliquée doit bloquer le serveur DDE et les autres programmes et tous les programmes doivent être redémarrés. Services de programmation Investissement à risque élevé Avertissement: La négociation de devises ou de contrats pour des différences de marge comporte un risque élevé et peut ne pas convenir Pour tous les investisseurs. La possibilité existe que vous pourriez soutenir une perte en excès de vos fonds déposés et donc, vous ne devriez pas spéculer avec le capital que vous ne pouvez pas se permettre de perdre. Avant de décider de négocier les produits offerts par FXCM, vous devriez considérer attentivement vos objectifs, la situation financière, les besoins et le niveau d'expérience. Vous devez être conscient de tous les risques associés à la négociation sur la marge. FXCM fournit des conseils généraux qui ne tiennent pas compte de vos objectifs, de votre situation financière ou de vos besoins. Le contenu de ce site Web ne doit pas être interprété comme un conseil personnel. FXCM vous conseille de demander conseil à un conseiller financier distinct. Veuillez cliquer ici pour lire l'avertissement de risque complet. FXCM est un marchand de la Commission des contrats à terme enregistré et un détaillant de commerce de détail avec la Commodity Futures Trading Commission et est membre de la National Futures Association. NFA 0308179 Forex Capital Markets, LLC (FXCM LLC) est une filiale opérationnelle au sein du groupe de sociétés FXCM (collectivement, le Groupe FXCM). Toutes les références sur ce site à FXCM se rapportent au groupe FXCM. Veuillez noter que les informations contenues dans ce site Web sont destinées uniquement aux détaillants et que certaines des représentations qui y figurent peuvent ne pas s'appliquer aux participants admissibles (c'est-à-dire aux clients institutionnels) au sens de l'article 1 a) de la Loi sur l'échange de marchandises. Copie de copyright 2017 Forex Capital Markets. Tous les droits sont réservés. Interaction entre MetaTrader 4 et Matlab via DDE Introduction J'ai déjà publié un article sur l'échange de données entre MetaTrader 4 et Matlab via des fichiers CSV (MT 4 lt-CSV-gtMatlab ) ici. Cependant, l'approche décrite dans l'article est, dans de nombreux cas, impraticable et souvent même inacceptable. Le mécanisme de DDE (Dynamic Data Exchange) pris en charge dans MT 4 nous permet de transférer des données d'une application à une autre directement à travers la RAM des ordinateurs. Matlab a la fonctionnalité complète pour réaliser à la fois l'avant et l'arrière de DDE, donc nous aimerions profiter au mieux de cette opportunité. Le serveur DDE MetaTrader 4 ne fournit que les données les plus récentes. Cependant, même en tenant compte de ces limitations, DDE est plus préférable quand, par exemple, travailler avec des citations à l'intérieur des barres. Comme dans l'article de MT 4 lt-CSV-gtMatlab, je vais décrire la séquence de création d'un outil d'organisation d'échanges. N'oubliez pas d'activer le serveur DDE dans l'onglet Outils - gt Options - gt Server dans votre MetaTrader 4 Client Terminal, et nous pouvons commencer. Ainsi, dans l'organisation de l'échange de données à l'aide de DDE, il existe deux extrémités (front end et back end) entre lesquelles la connexion sera établie. Le front end est une application qui demande des données (Matlab, dans notre cas), le back-end est une application qui a ces données à sa disposition (MT 4). Les données peuvent être transférées du serveur au client via DDE de trois façons: - par la demande des clients, - par la demande des clients et après que le serveur a notifié que les données ont été préparées pour le transfert ou - lorsque les données sont prêtes Pour le transfert. Le serveur MetaTrader 4 DDE fonctionne dans un seul (le troisième) mode et envoie les données prêtes au client sans attendre des demandes, des confirmations et d'autres choses comme ça. ) Donc, la tâche de Matlab est d'informer MT 4 qu'il a un client, d'informer sur les données sont nécessaires, et d'attendre jusqu'à ce que les données arrivent. Dès que les données arrivent, nous allons simplement le montrer dans un graphique. Création d'une interface graphique Dans l'environnement Matlab, il est possible de créer une interface utilisateur graphique (GUI). Une fois que nous avons créé une interface graphique, nous allons combiner tous les contrôles, les tableaux de prix et les informations textuelles que nous estimons nécessaires pour afficher. La création d'une interface utilisateur graphique est décrite plus en détail dans la section 3 de l'article MT4 lt-CSV-gtMatlab, donc je ne mentionnerai que la commande console nommée guide qui lance l'assistant de création d'interface graphique et je donnerai la liste des objets graphiques dont nous avons besoin . Ainsi, nous avons besoin de ce qui suit: - zone de saisie Modifier le texte pour entrer le nom de la paire de devises - Axes pour afficher le graphique - deux champs de texte de sortie Texte statique pour afficher la valeur précise de la dernière citation ou pour autre chose. Voici comment j'ai placé les objets dans une feuille GUI: Vous devez définir les propriétés de l'objet graphique comme suit: Pour Axes: Tag axesChart (nous allons afficher le graphique ici) Box sur entourer la zone du graphique dans un rectangle plein, off encloses La zone de graphique avec une ligne de gauche et une ligne de fond FontSize 7 (la taille par défaut est juste énorme) Unités pixels (nous aurons besoin de cela à la cartographie pour définir l'échelle de 1: 1). Pour EditText: Tag editPair (nous entrerons le nom de la paire de devises dans ce champ). Pour StaticText en dessous du champ EditText: Tag textBid (nous entrerons la valeur exacte de la dernière citation ici) HorizontalAlignment à gauche (ce n'est pas très important, vous pouvez le laisser comme centre). Pour StaticText en bas de la feuille: Tag textInfo HorizontalAlignment left. Maintenant, nous pouvons appuyer sur RUN. J'ai nommé mon projet DDEs, donc si vous voulez que votre version n'a aucune divergence avec la mienne, veuillez nommer votre projet de la même. Si l'apparence de votre interface graphique vous convient et que le fichier m est prêt à être modifié, commencez à créer un client DDE. Initialisation de la connexion Tout d'abord, vous devez organiser le canal pour vous connecter au serveur lors du lancement de l'interface graphique, et prendre soin des pauses de connexion lors de la fermeture de l'interface. Dans Matlab, la connexion DDE est initialisée par la fonction: canal ddeinit (service, topic), où: nom du service DDE nom du serveur (MT4) d'une section de données. Dans notre cas, il peut prendre les valeurs de BID, ASK, QUOTE, etc. La fonction renvoie le descripteur du canal initialisé. Ce descripteur sera utilisé pour d'autres conversations avec le serveur DDE. Vous devez également spécifier la méthode d'échange. Dans Matlab, la méthode d'échange supportée par MT4 est appelée liaison de conseil et initialisée par la fonction: rc ddeadv (canal, élément, rappel, upmtx, format), où: descripteur de canal du canal initialisé, données d'article qui nous intéressent Le nom du symbole d'une paire de devises, le rappel d'une ligne à exécuter à l'arrivée des données du serveur, le nom du symbole upmtx de la variable pour placer les données reçues du serveur, le tableau de format de deux drapeaux, qui définit le format des données envoyées . La fonction ddeadv renvoie 1 si elle est réussie, sinon elle renvoie 0. S'il vous plaît ne pas qu'une expression de symbole est donnée comme le paramètre de rappel, pas un descripteur de fonction. En fait, nous exécuterons la fonction eval qui exécute la ligne comme si elle avait été tapée dans une console. Cette caractéristique produit la difficulté suivante: À l'arrivée d'une nouvelle citation, nous devons exécuter une grande fonction recevant la nouvelle citation. Dans le même temps, nous aimerions passer à cette fonction la structure des descripteurs des poignées qui sera utilisée pour accéder aux objets graphiques GUI. Cependant, je n'ai trouvé aucune méthode de passage du descripteur de structure des poignées dans la ligne exécutable ni la façon d'appeler la fonction située dans le m-fichier qui décrit l'interface graphique. Tout cela a eu comme conséquence que j'avais dû placer la nouvelle fonction de réception de devis dans un m-file séparé et l'appeler comme une fonction normale de Matlab. Cependant, l'inconvénient s'est avéré être un avantage après que j'aie découvert que je pourrais éditer la fonction de traitement sans interrompre les opérations de client de DDE. Ainsi, tout d'abord, permet de créer une fonction de traitement séparée qui affichera simplement les données reçues dans la console. Wavread (C: WINDOWSMediaWindows XP - launch. wav) lire le son wavplay (chanson, 40000) jouer le son avec le taux d'échantillonnage de 40 kHz L'exemple La fonction ci-dessus jouera également le fichier C: WINDOWSMediaWindows XP - launch. wav dès qu'une nouvelle citation arrive. Enregistrez le texte de la fonction newTick. m dans le répertoire de travail de MATLAB. Maintenant, nous allons éditer le m-fichier décrivant le comportement de notre GUI. Ajoutez l'initialisation de connexion à la fonction DDEsOpeningFcn et la désinitialisation sera ajoutée à la fonction figure1CloseRequestFcn. (Pour ajouter la fonction CloseRequestFcn au fichier m, vous devez exécuter les opérations suivantes dans l'éditeur GUI: View - gt View Callbacks - gt CloseRequestFcn). --- Exécute juste avant DDEs est rendu visible. Fonction DDEsOpeningFcn (hObject, eventdata, handles, varargin) Cette fonction n'a pas d'arguments de sortie, voir OutputFcn. HObject handle pour figurer eventdata reserved - à définir dans une future version de MATLAB handles structure avec handles et données utilisateur (voir GUIDATA) varargin arguments de ligne de commande à DDEs (voir VARARGIN) canal ddeinit (MT4, QUOTE) initialisation paire get (handles. EditPair, UserData) lisez le nom du symbole rc ddeadv (canal, paire, nouveauTick (x), x, 1 1) établissez la connexion if (rc1) si la connexion a été établie, disp (Connected) (HObject, handles) UIWAIT fait en sorte que les DDE attendent la réponse de l'utilisateur (voir UIRESUME) uiwait (handleles. figure1) --- Exécute lorsque les tentatives de l'utilisateur Pour fermer figure1. Function figure1CloseRequestFcn (hObject, eventdata, handles) hObjecteur handle to figure1 (voir GCBO) eventdata reserved - à définir dans une future version de MATLAB handles structure avec poignées et données d'utilisateur (voir GUIDATA) canal handles. chann obtenir l'ID de canal de poignées (Rc1) si tout est OK disp (Disconnected) informe la fin de la console Conseil: delete (hObject) ferme le nom du symbole ddeunadv (canal, paire) déconnecte rc ddeterm (canal) Figure delete (hObject) --- Exécute pendant la création de l'objet, après avoir défini toutes les propriétés. Function editPairCreateFcn (hObject, eventdata, handles) hObjecteur handle to editPair eventdata reserved - à définir dans une future version de MATLAB handles empty - handles non créés après tout CreateFcns set (hObject, String, EURUSD) Nom de symbole dans le champ de saisie (hObject, UserData, EURUSD) Dans le UserData du champ de saisie - save Conseil: les contrôles d'édition ont généralement un fond blanc sur Windows. Voir ISPC et COMPUTER. (HObject, BackgroundColor), get (0, defaultUicontrolBackgroundColor)) set (hObject, BackgroundColor, white) end J'ai donné ci-dessus les textes complets des fonctions de modification avec le texte préparé pour les fonctions de squelette vides par le Matlab Développeurs. Le dernier bloc indique le nom du symbole dans le champ correspondant avant le lancement de l'IHM. L'entrée sera copiée dans la propriété UserData. Nous utiliserons toujours la copie dans UserData, alors que nous n'utiliserons que le nom affiché dans le champ (String) si l'utilisateur essaie de changer la sécurité. Si l'utilisateur s'est trompé lors de la saisie et qu'un nom incorrect a été écrit dans String, nous retournerons au nom stocké dans UserData. Le code ci-dessous réalise la fonction du changement de nom de symbole utilisateur: function editPairCallback (hObject, eventdata, handles) hObject handle pour editPair eventdata reserved - à définir dans une future version de MATLAB handles structure avec handles et user data (HObject, String) nouveau nom de symbole channel handles. chann obtenir l'ID de la chaîne disconn ddeunadv (channel, oldPair) déconnecter si (disconn0) si vous ne parvenez pas à déconnecter set (voir la section GUIDATA) oldPair get (hObject, UserData) HObject, String, oldPair) restaurer l'ancien nom de symbole dans le champ de saisie else si diconnected conn ddeadv (canal, newPair, nouveauTick (x), x, 1 1) établir une nouvelle connexion si (conn1) si la connexion est établie set HObject, UserData, newPair) mémorise quel symbole est utilisé autrement si vous ne parvenez pas à établir une nouvelle connexion ddeadv (channel, oldPair, newTick (x), x, 1 1) restaurer l'ancien set (hObject, String, oldPair) (HObject, String)) renvoie le contenu de editPair comme un double Ticks Receiving Considérer que la connexion est établie et, à Arrivée d'un nouveau tick, la nouvelle fonction Tick (x) est appelée pour sceller l'argument reçu de MT 4 dans une console. Tout d'abord, affiche la dernière citation reçue dans la ligne correspondante de notre GUI. Pour cela, nous devons avoir une structure de descripteurs d'objets graphiques GUI - les poignées sont à la disposition de la fonction newTick. Utilise la fonction setappdata (h, nom, valeur) qui enregistre les données dans le domaine d'application. Spécifiez 0 comme ID d'application. Il est le descripteur de la racine de l'objet Matlab, il est invariant, donc nous pouvons toujours le savoir. Ajoutez la ligne de setappdata (0, hndls, handles) immédiatement après le titre de la fonction DDEsOpeningFcn: function DDEsOpeningFcn (hObject, eventdata, handles, varargin) setappdata (0, hndls, handles) Maintenant, dans la fonction newTick, Handles par la fonction de valeur getappdata (h, nom). Ayant spécifié 0 comme l'argument de h. Ensuite, nous serons en mesure de gérer les objets GUI à partir de la fonction newTick. Ensuite, nous transformons l'argument de chaîne passé à la fonction à partir du serveur DDE et affichons la valeur de Bid dans GUI. En outre, nous détectons l'heure locale de réception de la citation et de l'afficher, ainsi, mais dans la barre d'état GUI. L'heure locale est nécessaire, puisque le serveur DDE passe le temps avec précision jusqu'à minutes, ce qui est inacceptable pour le travail avec des tiques. La fonction now renvoie l'heure locale avec précision jusqu'à des fractions d'une milliseconde, donc nous ne serons pas inquiets que les différentes tiques auront le même temps fixé. Nous allons aussi extraire le temps du serveur de la ligne reçue du serveur DDE et le transformer en format d'heure Matlab. Voici un autre exemple de la fonction newTick: function newTick (simbols) NOUVEAU TICK PROCESSING timeLocal now Détecter l'heure locale exacte handles getappdata (0, hndls) Recevoir les poignées de root disp (simbols) mettre l'argument dans la console (commentée) song wavread (C: WINDOWSMediaWindows XP - launch. wav) lire le son wavplay (chanson, 40000) jouer le son avec la fréquence d'échantillonnage de 40 kHz set (handles. textInfo, String, datestr (timeLocal)) afficher l'heure locale dans GUI - - transformer la ligne reçue de MT 4 --- parties sscanf (simbols, iii i: iff) étudier la ligne selon le format: intintint int: int float float timeServerVect parties (1: 5) extraire le temps timeServerVect timeServerVect transpose (colonne En ligne) timeServerVect timeServerVect 00 ajouter secondes timeServer datenum (timeServerVect) transformer dans le format de temps Matlab Pièces d'enchères (6) extraire Demande Demande de pièces (7) extrait Demande --- fin de transformation --- set (handles. textBid, String, Enchère: num2str (Bid)) Afficher l'enchère dans l'interface graphique Dessiner un graphique de la coche Voici la suite de la fonction newTick qui a été commencée ci-dessus. Le code est fourni avec des commentaires détaillés, donc, je suppose, il ne sera pas difficile pour vous de faire la tête ou la queue de celui-ci. Je vais seulement expliquer que le tableau Bid quotes, comme celui des poignées, est stocké dans la zone d'objet racine. Mais enregistrées en tant que données. Les données stockées représentent une structure qui se compose de deux champs: data. name - nom de symbole d'une paire de devises data. array - tableau de guillements lui-même. Dans la fonction newTick, ces données sont sous le nom de ticks et les champs de la structure ont les noms ticks. name et ticks. array, respectivement. Ticks. array représente un tableau composé de trois colonnes: - heure locale au format Matlab (avec précision supportée par Matlab microsecondes) - heure du serveur au format Matlab (avec précision en minutes) - offre. La fonction newTick vide le tableau des guillemets, si le nom du symbole dans le champ editPair a changé et que les guillemets pour un autre symbole ont commencé à arriver. Si cela n'a PAS changé, les lignes sont ajoutées au tableau existant. Le bloc d'opérations avec le diagramme définit les paramètres (taille et position) de la fenêtre axesChart et extrait la largeur de la fenêtre en pixels d'eux. Ceci est nécessaire pour que le programme définisse l'échelle horizontale de l'affichage - une citation d'un pixel. S'il ya moins de citations que de pixels dans la largeur de la fenêtre, le graphique sera dessiné dans son ensemble. S'il ya plus de citations que de pixels, seules les données les plus récentes qui correspondent au graphique seront affichées. --- working with quotes array --- GUIpairName get (handles. editPair, UserData) nom du symbole if (isappdata (0, data)) si aucune donnée ticks. name GUIpairName forme le champ de nom ticks. array forme un champ - un vide (0, data, ticks) écrire les données dans la fin des racines getappdata (0, data) extraire des données si strcmp (ticks. name, GUIpairName) si le nom a changé ticks. name GUIpairName forme le champ nom ticks. array Un champ - un tableau vide setappdata (0, data, ticks) écrit les données dans l'extrémité racine ticks. array ticks. array timeLocal timeServer Bid ajoute une ligne contenant les nouvelles données au tableau de données existant setappdata (0, data, ticks) write Les données dans la racine --- fin du travail avec le tableau --- --- travaillant avec le diagramme --- chartSize get (handles. axesChart, Position) obtenir la taille de la fenêtre de diagramme chartSize chartSize (3) extraire la largeur de la fenêtre de graphique lenArray LenArray lenArray (1) extrait la quantité de lignes dans le jeu de tableau de données (handles. axesChart, NextPlot, replace) mode de dessin - remplacez l'ancien tableau par un nouveau si ( ChartSize gt lenArray) escaliers (handles. axesChart, ticks. array (:, 3)) dessiner tout le reste du graphique else (handles. axesChart, ticks. array (lenArray-chartSize1: lenArray, 3)) (Handles. axesChart, XLim, 1 chartSize) définir l'échelle - un compteur dans un ensemble de pixels de largeur (handles. axesChart, NextPlot, add) mode de dessin - ajout de tracé (handles. axesChart, 1 chartSize, Bid Bid, m ) Dessiner l'enchère horizontale Enregistrement des données dans le fichier La dernière fonction à décrire consiste à enregistrer les données d'un fichier par la demande des utilisateurs. Nous enregistrerons les données en appuyant sur un bouton, alors ajoutez l'objet Bouton-poussoir au formulaire GUI à l'aide de l'éditeur. Définissez les propriétés d'objet suivantes: Tag pushSave, String Save. En appuyant sur le bouton M-file Editor, le modèle de la fonction pushSaveCallback sera ajouté à la fin du DDEs. m automatiquement. Ci-dessous est le texte complet de la fonction qui enregistre les données: --- Exécute sur le bouton de presse dans pushSave. Function pushSaveCallback (hObject, eventdata, handles) hObjecteur handle à pushSave (voir GCBO) eventdata reserved - à définir dans une future version de MATLAB handles structure avec handles et données utilisateur (voir GUIDATA) date datestr (now, yyyy-mm-dd ) Get to know the date (chaîne) datetr (now, HH-MM-SS) connaître le temps (chaîne) nom get (handles. editPair, UserData) connaître le nom du symbole Nom du fichier userName, userPath uiputfile (template. txt) récupère le nom et le chemin de l'utilisateur si userName 0 si Cancel n'est pas pressé ticks getappdata (0, data) récupère les données de la racine timesStr datestr (ticks. array (: (1: length (bidStr)) forment un tableau de chaînes de temps et de date bidStr num2str (ticks. array (:, 3)) form array nommé BID delimStr Être transposée dans une colonne matrixtimesStr delimStr bidStr rassembler tout Str dans une matrice dlmwrite (userPath userName, matrix,) enregistrer la matrice dans une fin de fichier La fonction prépare le nom de fichier qui comprend la date, l'heure et le nom du symbole de la sécurité. Lors de l'enregistrement, les matrices de symboles sont préparées de manière préliminaire: - timesStr - heure locale et date correspondant aux guillemets - delimStr - délimiteurs - bidStr - colonne BID. Ensuite, ils sont tous réunis dans une seule matrice. DelimStr représente une ligne composée d'espaces, la longueur de la ligne est égale à la longueur de la colonne BID. Lors de la fusion, la ligne delimStr est transposée dans une colonne et sépare la colonne quotes de l'heure. Conclusion J'espère que la méthode décrite ci-dessus vous permettra d'utiliser l'abondance entière des fonctions mathématiques dans Matlab pour le développement et tester vos stratégies de négociation automatisée. Création d'un serveur DDE Quelqu'un at-il l'expérience de la mise en place d'un serveur DDE Im essayez d'obtenir plusieurs terminaux metatrader streaming Cocher les données dans ma base de données. J'ai utilisé pour le faire via des scripts avec des connexions à mysql, mais apparemment Im manquant ticks. Im regarder dans la mise en place d'un script qui capture les données des prix entrants et l'envoie via un serveur dde. Le serveur MT4 interne DDE est très bien pour ce qu'il fait, mais ne fonctionne pas sur plusieurs courtiers. Inscrit juin 2007 Statut: Soyez vous-même, tout le monde est pris 2,733 Posts Quelqu'un at-il l'expérience de la mise en place d'un serveur DDE Im essayez d'obtenir plusieurs terminaux metatrader streaming tick données dans ma base de données. J'ai utilisé pour le faire via des scripts avec des connexions à mysql, mais apparemment Im manquant ticks. Im regarder dans la mise en place d'un script qui capture les données des prix entrants et l'envoie via un serveur dde. Le serveur MT4 interne DDE est très bien pour ce qu'il fait, mais ne fonctionne pas sur plusieurs courtiers. Essayé de trouver un moyen avant - je ne crois pas qu'il peut être fait bases de données utiliser une syntaxe MT4 pour localiser le serveur DDE que tous MT4 plate-forme utilisent la même syntaxe - les données seraient appeler les informations de toutes les sources ouvertes en même temps, Et ne sera pas en mesure de l'organiser pour l'utilisation de la seule façon, je peux voir ce fait est de trouver le lien syntaxDDE serveur et renommer chacun des courtiers - thats façon sur ma tête si vous ouvrez une base de données avant d'ouvrir la plate-forme mt4, il Demander la permission d'ouvrir le terminal - si possible renommer le terminal pourrait aider l'autre option est d'exporter les données à un fichier CSV pré-dfined - via une EA (pas sûr si elle peut être fait avec des scripts) - puis votre appel de base de données Up le fichier csv pour les données Quelqu'un at-il l'expérience de la mise en place d'un serveur DDE Im essayez d'obtenir plusieurs terminaux metatrader streaming tick données dans ma base de données. J'ai utilisé pour le faire via des scripts avec des connexions à mysql, mais apparemment Im manquant ticks. Im regarder dans la mise en place d'un script qui capture les données des prix entrants et l'envoie via un serveur dde. Le serveur MT4 interne DDE est très bien pour ce qu'il fait, mais ne fonctionne pas sur plusieurs courtiers. Ronald, je pensais à mieux comprendre comment DDE fonctionne. Malheureusement, j'ai été très occupé avec le travail cette semaine. Im va voir ce que je peux modeler ce week-end et puis voir ce qui se passe vivre dans la semaine à venir. Pouvez-vous élaborer un peu plus sur l'infrastructure que vous avez à l'esprit Inscrit Oct 2005 Statut: Pip Slappa Extrordinaire 1,006 Posts Ive regardé dans ce genre de chose avant et a conclu qu'il n'était pas la peine de la peine. Si je devais entreprendre un projet comme le vôtre, Id écrire une DLL pour stocker les tiques de plusieurs instances MT4. Chaque instance exécute un indicateur qui ne fait rien sauf recevoir la coche et appeler la fonction de magasin DLL. Vous ne manquerez pas les tiques, les poignées de DLL faisant la queue les tiques entrant et stockant à la DB. Vous êtes dans un labyrinthe de petits passages tordus, tous pareils. J'ai essayé de trouver un moyen avant - je ne crois pas qu'il peut être fait bases de données utiliser une syntaxe MT4 pour localiser le serveur DDE comme tous les MT4 plate-forme utiliser la même syntaxe - les données serait appeler le Info de toutes les sources ouvertes en même temps, et ne sera pas capable de l'arranger pour l'usage la seule manière je peux voir ceci étant fait est de trouver le lien de serveur de syntaxDDE et de renommer chacun des courtiers - thats manière au-dessus de ma tête si vous ouvrez Une base de données avant d'ouvrir la plate-forme mt4 il demande l'autorisation d'ouvrir le terminal - si possible renommer le terminal pourrait aider. Im essayant de réduire la latence entre la source et le processeur. Il est pratiquement impossible d'utiliser le serveur DDE interne. J'ai vraiment besoin de construire mon propre serveur DDE et de le faire via EA ou script dans le terminal. Ronald, je pensais à mieux comprendre comment DDE fonctionne. Malheureusement, j'ai été très occupé avec le travail cette semaine. Im va voir ce que je peux modeler ce week-end et puis voir ce qui se passe vivre dans la semaine à venir. Pouvez-vous élaborer un peu plus sur l'infrastructure que vous avez à l'esprit que je travaille sur un meilleur système de prix pour augmenter mes systèmes de trading existants. Donc la façon dont je vois l'architecture: J'ai un serveur DDE et un client s'exécutant sur chaque terminal MT4 alimentant les informations de prix agrégateur. L'agrégateur ressemblera aux tables de négociation que j'ai eu quand j'ai travaillé pour RBS. L'agrégateur enverra la meilleure enchère et le meilleur demander pour chaque paire à une plate-forme de traçage (probablement un autre terminal MT4) sur lequel je placerai mes EE. Les EE enverront des signaux commerciaux basés sur les informations qu'ils reçoivent de l'agrégateur. Les signaux commerciaux passeront à un client DDE exécuté comme un script sur les plates-formes metatrader afin que je puisse obtenir mon métier (s) rempli et continuer à bouger. Ive regardé dans ce genre de chose avant et a conclu qu'il n'était pas la peine de la peine. Si je devais entreprendre un projet comme le vôtre, Id écrire une DLL pour stocker les tiques de plusieurs instances MT4. Chaque instance exécute un indicateur qui ne fait rien sauf recevoir la coche et appeler la fonction de magasin DLL. Vous ne manquerez pas les tiques, les poignées de DLL faisant la queue les tiques entrant et stockant à la DB. Ce n'est pas tant de taches de stockage que de pouvoir réagir à eux rapidement car ils viennent po Pour résumer ce que Im essayez de faire: Im en essayant de créer un script dans metatrader que je peux déposer sur un graphique, et ont le serveur DDE dans ce Script alimenter mon agrégateur tous les prix et les informations de position commerciale comme il vient po Ce script aura également un client DDE que je peux ensuite utiliser pour recevoir des demandes commerciales de mon agrégateur. Je configure un agrégateur ou même un client DDE sur une plate-forme metatrader qui génère les cartes hors connexion sur lesquelles je place mes EA. Ainsi, trois composantes: Noeud - Envoie des données de tarification commerciale et reçoit des commandes pour exécuter des transactions. Aggregator - Collecte les données de tarification, détermine la meilleure enchère et demande pour chaque paire, et l'envoie au maître. Maître - Crée des cartes hors ligne avec les meilleurs prix de mon harem de courtiers afin que mes EA peuvent placer des métiers et d'analyser le marché pleinement à travers autant de fournisseurs de liquidité différents que possible. Compte tenu de la taille du lot Im trading maintenant à travers mes systèmes, si je peux économiser une moyenne de 1,4 pips par commerce en raison de cela, je suis d'augmenter mes retours un autre 4-5. Je peux finir par juste embaucher quelqu'un pour écrire tout le code nécessaire pour moi. Mais si je peux le faire moi-même, d'autant mieux. Ouais, j'ai déjà des flux bruts de 3 courtiers. Mais je vois toujours des écarts de prix. Im pas tout à fait au niveau de négocier directement avec un fournisseur de liquidité (500M semble être le nombre magique), donc Im essayant de réduire mon risque en répartissant les affaires entre les courtiers multiples. Il est agréable d'avoir l'effet de levier pour dire au courtier, courtier Quai, je n'aime pas comment youre remplissant mes métiers, je pourrais juste déplacer mon volume à courtier en concurrence. Et ils donnent habituellement dans. Ceux qui n'ont pas perdu l'entreprise que j'ai offert. Je n'ai pas vraiment regardé cela encore, mais figure il peut être intéressant de publier: Quelqu'un at-il l'expérience de la mise en place d'un serveur DDE Im essayez d'obtenir plusieurs terminaux metatrader streaming tick données dans ma base de données. J'ai utilisé pour le faire via des scripts avec des connexions à mysql, mais apparemment Im manquant ticks. Im regarder dans la mise en place d'un script qui capture les données des prix entrants et l'envoie via un serveur dde. Le serveur MT4 interne DDE est très bien pour ce qu'il fait, mais ne fonctionne pas sur plusieurs courtiers. Désolé, hors sujet ici. Depuis votre le gars dans le savoir-faire, comment puis-je obtenir des temps de temps mutliple sur le même graphique. À-dire sur le diagramme de 5m je veux être capable de voir 4hr, 1hr, et les diagrammes de 30m dans un coin du diagramme de 5m. À-dire tous dans le même diagramme de 5 m. Merci d'avance. Inscrit mars 2008 Statut: Cointegrated Member 621 Messages RR, non sure où vous êtes actuellement sur ce. Ive a expérimenté avec cet outil, dataloggersuitedde-to-mssql-2.htm Permet d'interroger les données DDE directement dans une base de données en utilisant odbc ou d'autres pilotes spécifiques. Les données commerciales peuvent être tirées de Metatraders interface DDE de la même façon que les citations peuvent Le taux de rafraîchissement semble façon de ralentir, mais je pense qu'ils ont mis la démo de cette façon à dessein. EDIT: ah, 220 pour la version d'entreprise. J'ai été en mesure de tirer les données dde dans l'enregistreur, juste pas dans la base de données, car c'est un ajout commercial à la base de produits gratuits. Utilisez mysql Je veux créer des corrélations et d'autres modèles dans SPSS et voudrais utiliser mysql comme une interface entre metatrader et une dll SPSS qui peut être exposée via python. Ouais, j'ai déjà des flux bruts de 3 courtiers. Mais je vois toujours des écarts de prix. Im pas tout à fait au niveau de négocier directement avec un fournisseur de liquidité (500M semble être le nombre magique), donc Im essayant de réduire mon risque par la propagation d'affaires entre les courtiers multiples. Il est agréable d'avoir l'effet de levier pour dire au courtier, courtier Quai, je n'aime pas comment youre remplissant mes métiers, je pourrais juste déplacer mon volume à courtier en concurrence. Et ils donnent habituellement dans. Ceux qui n'ont pas perdu l'entreprise que j'ai offert.
No comments:
Post a Comment