Un artículo muy útil. Gracias por la presentación detallada.
Sí, muchas gracias.
Eh, Metaquotes intentó mejorar el rendimiento, alejarse del byte-code... ¡y seguimos metiendo todos los programas en él! )))
Pregunta al autor: ¿se han realizado pruebas comparativas del tiempo de ejecución de programas MQL5 puros, DLLs y monstruos .NET? Sería interesante echarles un vistazo.
Sí, gracias.
Eh, Metaquotes intentó mejorar el rendimiento, alejarse del byte-code... ¡y seguiremos metiendo todos los programas! )))
Pregunta al autor: ¿se han realizado pruebas comparativas del tiempo de ejecución de programas MQL5 puros, DLLs y monstruos .NET? Sería interesante echarles un vistazo.
Creo que en principio es muy útil para abrir posibles recursos y encontrar este artículo es muy intersting. Pero no soy muy experimentado programador y por lo tantotengo algunas preguntas.
Desde mi punto de vista código no administrado me da la posibilidad de desarrollar la plataforma undepended. Pero si alguien usa Metatrader, tiene una plataforma definida.
¿Cuál es el beneficio con código no administrado en general y en combinación con MQL5 ? - Por favor, corrígeme si he entendido algo mal!
hola,
Creo que en principio es muy útil para abrir posibles recursos y encontrar este artículo es muy intersting. Pero no soy muy experimentado programador y por lo tantotengo algunas preguntas.
Desde mi punto de vista código no administrado me da la posibilidad de desarrollar la plataforma undepended. Pero si alguien usa Metatrader, tiene una plataforma definida.
¿Cuál es el beneficio con código no administrado en general y en combinación con MQL5 ? - Por favor, corrígeme si he entendido algo mal!
Hola smartwart,
El beneficio es que hay una gran cantidad de código ya desarrollado en C # que se puede utilizar para fines comerciales. Leerás más en mi próximo artículo.
cheerz,
Investeo
¡Esto es lo mejor! ¡Me encanta C# y estaba buscando cualquier posibilidad de hacerlo funcionar! ¡La mejor noticia del año! Creo que esta fue la última vez que escribí EA en MQL5. Pondré toda la lógica en librerías y usaré una plantilla EA.mq5 para todos mis EAs (sólo que estarán enlazados con diferentes librerías).
¡Gracias!
Sí, gracias.
Eh, Metaquotes intentó mejorar el rendimiento, alejarse del byte-code... ¡y seguiremos metiendo todos los programas! )))
Pregunta al autor: ¿se han realizado pruebas comparativas del tiempo de ejecución de programas MQL5 puros, DLLs y monstruos .NET? Sería interesante echarles un vistazo.
¿De qué bytecode se han librado? ¿Lo tenían en 4? Sólo había un compilador lento sin optimización.
En .NET no hay bytecode, al arrancar todo se compila en código máquina nativo, con optimización para un procesador concreto. Si el tiempo para la primera compilación es crítico, usa ngen http://msdn.microsoft.com/ru-ru/library/6t9t5wcf.aspx.
Y las pruebas sí... sería interesante
Personalmente sólo uso 2 de los métodos descritos, de los otros sólo he oído hablar. No entendí cómo COM-interop puede ayudar, pero esto es probablemente para completar el cuadro. El artículo es 5.
- msdn.microsoft.com
¿De qué tipo de código de bytes se alejaban? ¿Lo tenían en 4? Sólo había un compilador lento sin optimización.
MQL4 tenía bytecode, mientras que MQL5 se compila en bytecode con una posterior precompilación en x86 o x64 nativo antes de la ejecución. MQL5 se comporta como .NET
MQL5 como lenguaje se seguirá desarrollando (los desarrolladores demandan más funcionalidad y mejor compatibilidad con C++), y se mejorará su optimizador.
En las últimas versiones, ahora es posible incluir recursos (.BMP y .WAV) directamente en los archivos EX5 a través de #resource, lo que permite crear aplicaciones autosuficientes. Esta es una buena base para desarrollar y vender aplicaciones completas para la plataforma MetaTrader 5. Pronto se lanzará la versión beta del MQL5 Market, donde cualquier desarrollador podrá vender sus aplicaciones (tras una estricta moderación), y todos los traders tendrán acceso directo a esta tienda.
¿Soy el único que no puede compilar plantillas para exportación no gestionada para VS C#?
Tomé la plantilla del artículo (no está completa, le falta dll) y la complementé con librerías de R. Giesecke tomadas aquí . Giesecke bibliotecas tomadas aquí http://sites.google.com/site/robertgiesecke/Home/uploads,
tomé la plantilla original de R. Giesecke, también hice una mezcla de las dos plantillas, no sale nada.
Al compilar la plantilla original el compilador da lo siguiente:
------ Построение начато: проект: 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 ==========
Al compilar otras plantillas más o menos lo mismo.
Sistema: W7 x64 SP1 Home Prem Lic.
IDE: VS 2010.
Google no ayuda (.
He creado la dll del proyecto manualmente y la he complementado según las recomendaciones de R. Giesecke, sin resultado tampoco.
Por favor, ayudar con consejos.
- sites.google.com
No he compilado una plantilla para la exportación no administrado a VS C #?
Tomó una plantilla del artículo (no es completa, no carece de dll) añade a las bibliotecas de R. Giesecke tomado aquí http://sites.google.com/site/robertgiesecke/Home/uploads ,
tomó la plantilla original de R. Giesecke, al igual que una mezcla de dos plantillas, no funciona.
Al compilar el compilador plantilla original genera la siguiente:
Al compilar otras plantillas sobre el mismo.
Sistema: W7 x64 SP1 Home Prem Lic.
IDE: VS 2010.
Google no ayuda (.
Dll crear manualmente un proyecto y lo complementa de acuerdo con las recomendaciones de R. Giesecke, el resultado también no está disponible.
Ayuda pliz consejo.
Hola kPVT,
¿Hay algo de Windows7 - XP modo de compatibilidad con versiones anteriores ind Win7? Si la dll funciona en modo 32 bits, significa que hay que recompilarla a 64 bits para que funcione.
Intentaré preguntar al propio RGiesecke en stackoverflow.com.
Un saludo,
Investeo
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Exponer código C# a MQL5 usando exportaciones no gestionadas:
En este artículo presento diferentes métodos de interacción entre código MQL5 y código gestionado C#. También facilito varios ejemplos sobre cómo ordenar estructuras MQL5 en contraposición a C#, y cómo invocar funciones DLL exportadas en scripts MQL5. Creo que los ejemplos que proporciono podrán servír como base para estudios futuros sobre escritura de DLLs en código gestionado. Este artículo también abre puertas para MetaTrader para usar varias bibliotecas que ya están implementadas en C#.
Autor: investeo