Article très utile ! Merci pour cette présentation détaillée.
Oui, merci.
Eh, Metaquotes a essayé d'améliorer les performances, de s'éloigner du byte-code... et nous continuons à y coller tous les programmes ! )))
Question à l'auteur: des tests comparatifs du temps d'exécution des programmes MQL5 purs, des DLL et des monstres .NET ont-ils été effectués ? Il serait intéressant d'y jeter un coup d'œil.
Oui, merci.
Eh, Metaquotes a essayé d'améliorer les performances, de s'éloigner du byte-code... et nous continuerons à y mettre tous les programmes ! )))
Question à l'auteur: des tests comparatifs de temps d'exécution de programmes MQL5 purs, de DLL et de monstres .NET ont-ils été effectués ? Il serait intéressant d'y jeter un coup d'œil.
Je pense qu'en principe il est très utile d' ouvrir les ressources possibles et je trouve cet article très intéressant. Mais je ne suis pas un programmeur très expérimenté et j'ai doncquelques questions.
De mon point de vue, le code non géré me donne la possibilité de développer la plateforme sans restriction. Mais si quelqu'un utilise Metatrader, il a une plateforme définie.
Quel est l' avantage avec un code non géré en général et en combinaison avec MQL5 ? - Corrigez-moi si j' ai mal compris quelque chose !
Bonjour,
Je pense qu'en principe il est très utile d' ouvrir les ressources possibles et je trouve cet article très intéressant. Mais je ne suis pas un programmeur très expérimenté et j'ai doncquelques questions.
De mon point de vue, le code non géré me donne la possibilité de développer la plateforme sans restriction. Mais si quelqu'un utilise Metatrader, il a une plateforme définie.
Quel est l' avantage avec un code non géré en général et en combinaison avec MQL5 ? - Corrigez-moi si j' ai mal compris quelque chose !
Bonjour smartwart,
L'avantage est qu'il existe une grande quantité de code déjà développé en C# que vous pouvez utiliser à des fins commerciales. Vous en saurez plus dans mon prochain article.
Bravo,
Investeo
C'est la meilleure chose qui soit ! J'adore le C# et je cherchais toutes les possibilités pour le faire fonctionner ! La meilleure nouvelle de l'année ! Je pense que c'est la dernière fois que j'ai écrit un EA en MQL5. Je vais placer toute la logique dans des bibliothèques et utiliser un modèle EA.mq5 pour tous mes EA (ils seront simplement liés à des bibliothèques différentes).
Je vous remercie !
Oui, merci.
Eh, Metaquotes a essayé d'améliorer les performances, de s'éloigner du byte-code... et nous continuerons à y mettre tous les programmes ! )))
Question à l'auteur: des tests comparatifs de temps d'exécution de programmes MQL5 purs, de DLL et de monstres .NET ont-ils été effectués ? Il serait intéressant d'y jeter un coup d'œil.
De quel bytecode se sont-ils affranchis ? L'avaient-ils en 4 ? Il n'y avait qu'un compilateur lent sans optimisation.
Sous .NET, il n'y a pas de bytecode, au démarrage tout est compilé en code machine natif, avec une optimisation pour un processeur particulier. Si le temps de la première compilation est critique, utilisez ngen http://msdn.microsoft.com/ru-ru/library/6t9t5wcf.aspx.
Et des tests, oui... ce serait intéressant
Je n'utilise personnellement que 2 des méthodes décrites, j'ai seulement entendu parler des autres. Je n'ai pas compris comment COM-interop peut aider, mais c'est probablement pour compléter le tableau. L'article est le 5.
- msdn.microsoft.com
De quel type de code d'octets s'éloignaient-ils ? L'avaient-ils en 4 ? Il n'y avait qu'un compilateur lent sans optimisation.
MQL4 avait du bytecode, alors que MQL5 est compilé en bytecode avec une précompilation ultérieure en x86 ou x64 natif avant l'exécution. MQL5 se comporte comme .NET
MQL5 en tant que langage sera développé plus avant (les développeurs demandent plus de fonctionnalités et une meilleure compatibilité avec C++), et son optimiseur sera amélioré.
Dans les dernières versions, il est désormais possible d'inclure des ressources (.BMP et .WAV) directement dans les fichiers EX5 via #resource, ce qui permet de créer des applications autonomes. Il s'agit d'une bonne base pour développer et vendre des applications complètes pour la plateforme MetaTrader 5. La version bêta du marché MQL5 sera bientôt disponible, où tout développeur pourra vendre ses applications (après une modération stricte), et tous les traders auront un accès direct à cette boutique.
Suis-je le seul à ne pas pouvoir compiler les modèles d'exportation non gérée pour VS C# ?
J'ai pris le modèle de l'article (il n'est pas complet, il manque la dll) et je l'ai complété avec les bibliothèques de R. Giesecke prises ici . Les bibliothèques de Giesecke sont disponibles ici http://sites.google.com/site/robertgiesecke/Home/uploads,
a repris le modèle original de R. Giesecke, j'ai aussi fait un mélange des deux modèles, mais rien ne sort.
Lors de la compilation du modèle original, le compilateur donne le résultat suivant :
------ Построение начато: проект: UnmanagedExportLibrary8, Конфигурация: Debug Any CPU ------ Построение начато 15.03.2011 19:02:04. CoreCompile: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /define:DEBUG;TRACE /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug+ /debug:full /out:obj\Debug\UnmanagedExportLibrary8.dll /target:library DllExport\DllExportAttribute.cs UnmanagedExports.cs Properties\AssemblyInfo.cs CopyFilesToOutputDirectory: Копирование файла из "obj\Debug\UnmanagedExportLibrary8.dll" в "bin\Debug\UnmanagedExportLibrary8.dll". UnmanagedExportLibrary8 -> d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll Копирование файла из "obj\Debug\UnmanagedExportLibrary8.pdb" в "bin\Debug\UnmanagedExportLibrary8.pdb". AfterBuild: ILDasm: calling 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe' with /quoteallnames /unicode /nobar /linenum "/out:c:\Temp\tmpF417\UnmanagedExportLibrary8.il" "d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll" ILDasm: ildasm 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe' returned gracefully. d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll : Export warning EXP0009: Platform is AnyCpu, creating binaries for each CPU platform in a separate subfolder... ILAsm: Found method: UnmanagedExportLibrary8.UnmanagedExports..method private hidebysig static float64 'AddDays'(float64 'dateValue', int32 'days') cil managed ILAsm: Removing RGiesecke.DllExport.DllExportAttribute from UnmanagedExportLibrary8.UnmanagedExports.AddDays ILAsm: Parsing 242 lines of IL took 66 ms. ILAsm: calling 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILAsm.exe' with /nologo "/out:d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\x86\UnmanagedExportLibrary8.dll" "c:\Temp\tmpF417\UnmanagedExportLibrary8.x86.il" /DLL "/resource=c:\Temp\tmpF417\UnmanagedExportLibrary8.res" /debug ILAsm: ILAsm 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILAsm.exe' returned gracefully. d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembling 'c:\Temp\tmpF417\UnmanagedExportLibrary8.x86.il' to DLL --> 'd:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\x86\UnmanagedExportLibrary8.dll' d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Source file is UNICODE d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_CallingConvention d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_CallingConvention d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_ExportName d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_ExportName d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : ***** FAILURE ***** d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : в RGiesecke.DllExport.Parsing.IlParser.RunILTool(String installPath, String toolFileName, String requiredPaths, String workingDirectory, String settingsName, String arguments, String toolLoggingCode, String verboseLoggingCode, DllExportNotifier notifier, Int32 timeout) в RGiesecke.DllExport.Parsing.ILAsm.RunCore(CpuPlatform cpu, String fileName, String ressourceParam, String ilSuffix) в RGiesecke.DllExport.Parsing.ILAsm.Run(String outputFile, String ilSuffix, CpuPlatform cpu) в RGiesecke.DllExport.Parsing.ILAsm.ReassembleFile(String outputFile, String ilSuffix, CpuPlatform cpu) в RGiesecke.DllExport.DllExportWeaver.RunILAsm(ILAsm ilAsm) в RGiesecke.DllExport.DllExportWeaver.Run() в RGiesecke.DllExport.MSBuild.DllExportTask.Execute() СБОЙ построения. Затраченное время: 00:00:01.85 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Lors de la compilation des autres modèles, c'est à peu près la même chose.
Système : W7 x64 SP1 Home Prem Lic.
IDE : VS 2010.
Google n'aide pas (.
J'ai créé la dll du projet manuellement et je l'ai complétée selon les recommandations de R. Giesecke, sans résultat non plus.
Merci de m'aider avec des conseils.
- sites.google.com
Je n'ai pas compilé de template pour l'export non géré vers VS C # ?
J'ai pris un modèle dans l'article (il n'est pas complet, il ne manque pas de dll) et je l'ai ajouté aux bibliothèques de R. Giesecke repris ici http://sites.google.com/site/robertgiesecke/Home/uploads ,
a pris le modèle original de R. Giesecke, ainsi qu'un mélange de deux modèles, cela ne fonctionne pas.
Lors de la compilation du modèle original, le compilateur génère ce qui suit :
Lors de la compilation d'autres modèles, le résultat est à peu près le même.
Système : W7 x64 SP1 Home Prem Lic.
IDE : VS 2010.
Google n'aide pas (.
Dll crée manuellement un projet et le complète conformément aux recommandations de R. Giesecke, le résultat est également indisponible.
Help pliz advice.
Bonjour kPVT,
Existe-t-il un mode de rétrocompatibilité Windows7 - XP dans Win7 ? Si la dll fonctionne en mode 32 bits, cela signifie qu'elle doit être recompilée en 64 bits pour fonctionner.
Je vais essayer de poser la question à RGiesecke lui-même sur stackoverflow.com.
Meilleures salutations,
Investeo
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Un nouvel article Exposer le code C# à MQL5 à l'aide d'exportations non gérées a été publié :
Dans cet article, j'ai présenté différentes méthodes d'interaction entre le code MQL5 et le code C# géré. J'ai également fourni plusieurs exemples sur la façon de rassembler des structures MQL5 contre C# et d'appeler des fonctions DLL exportées dans des scripts MQL5. Je pense que les exemples fournis peuvent servir de base à de futures recherches sur l'écriture de DLL en code géré. Cet article ouvre également la porte à MetaTrader pour utiliser de nombreuses bibliothèques déjà implémentées en C#.
Étant donné que la plupart des lecteurs ne sont peut-être pas conscients de la différence entre le code géré et non géré, je vais le décrire en quelques phrases. Fondamentalement, MetaTrader utilise le langage MQL pour implémenter des règles de trading, des indicateurs, des conseillers experts et des scripts. Il peut cependant utiliser des bibliothèques déjà implémentées dans d'autres langages et les lier dynamiquement pendant l'exécution. Ces bibliothèques sont également appelées DLL ou Dynamic Link Libraries.
Les bibliothèques sont en fait des fichiers binaires contenant du code source compilé pouvant être invoqué par un certain nombre de programmes externes pour effectuer des opérations spécifiques. Par exemple, la bibliothèque de réseau neuronal peut exporter des fonctions pour la formation et les tests de réseaux de neurones, la bibliothèque de dérivée peut exporter des calculs de différentes dérivées, la bibliothèque de matrices peut exporter des opérations sur des matrices. Les DLL pour MetaTrader sont devenues de plus en plus populaires car elles permettaient de masquer des parties de l’implémentation d'indicateurs ou d' Expert Advisors L'une des principales raisons d'utiliser les bibliothèques est de réutiliser le code existant sans avoir besoin de l'implémenter encore et encore.
Avant que .NET n'existe, toutes les DLL compilées par Visual Basic, Delphi, VC++, que ce soitCOM, Win32 ou C++ simple, pouvaient être directement exécutées par le système d'exploitation. Nous appelons ce code non géré ou code natif. Ensuite, .NET a vu le jour et a fourni un environnement très différent.
Le code est contrôlé (ou géré) par .NET Common Language Runtime -CLR. Les compilateurs CLR sont tenus de produire à partir du code source, qui peut être écrit dans plusieurs langues différentes, des métadonnées et un langage intermédiaire commun -CIL.
CIL est un langage de niveau supérieur indépendant de la machine et les métadonnées décrivent entièrement les types d'objets décrits par CIL conformément à la spécification de type commun -CTS Étant donné que CLR connait tout sur les types, il peut nous fournir un environnement d'exécution géré. La gestion peut être considérée comme un ramasse-miettes - gestion automatique de la mémoire et suppression d'objets et assurer la sécurité - protection contre les erreurs courantes dans les langues natives qui pourraient provoquer l'exécution de code étranger avec des privilèges d'administrateur ou simplement une surcharge de mémoire.
Il faut mentionner que le code CIL n'est jamais exécuté directement - il est toujours traduit en code machine natif par JIT (Just-In-Time) compilation ou par pré -compilation du CIL en assembleur. Pour une personne qui lit ceci pour la première fois, la notion de code en mode géré peut être déroutante, c'est pourquoi je colle le flux général dans CLR ci-dessous :
Figure 1. Common Language Runtime
Auteur : investeo