讨论 "如何在10分钟内为MQL5编写一个DLL并交换数据"。

 

发表文章:如何在10分钟内为MQL5编写一个DLL并交换数据?:

事实上,现在很少有开发者记得如何编写一个简单的DLL,以及连接异质系统的特殊性。在10分钟内,我将尝试演示创建简单DLL的整个过程,并讨论我们绑定实现的一些技术细节。我将通过传递不同类型的变量(数字、数组、字符串等)以及在自定义DLL中保护客户终端免于崩溃的例子,展示在Visual Studio中创建DLL的一步步过程。

作者:Renat Fatkhullin

 

一篇非常有趣的文章。为了完整起见,它是缺失的。

1.我们从哪里获得报价,能否从hst文件中获取?

2.如何使这个库与2009a或2009b MateLab中的库兼容?他们那里也有C和C++,不是吗?

一个非常大的要求。

 
  1. 报价取自终端--它们现在既详细又深入(10年及以上)。

    在任何情况下,我们都不应该直接查看终端存储的二进制文件 - 这只会导致严重的数据访问冲突。即使测试显示 "工作正常,没有问题",仍然会出现终端和外部程序同时访问这些数据的时刻,有人会因此而崩溃。人们曾多次偶然发现它。

  2. 由于对DLL调用的stdcall/cdecl约定的透明支持,现在在MQL5中对接图书馆变得更加容易。

    如果有人写了一篇关于通过DLL连接MetaTrader 4/5和Matlab的详细的好文章,它将获得200美元或更多。

    MQL4.社区已经有关于Matcad - MetaTrader 4捆绑的文章。

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Renat,dll调用的速度如何?
我需要连接两个终端,以便它们将报价实时地翻译成Excel。
在MT4中,可以用DDE来完成。在MT5中,似乎通过DLL是唯一的出路。
但是,如果每个传入的tick将被传递给DLL...我认为这将是一种难以想象的缓慢。当然,我还没有尝试去实施它...但说实话,我并不想尝试。这将是一场恶梦。
简而言之,让我们把DDE返回到MT5。这是一个不合时宜的做法,但有时你可能需要它。

附注:感谢你的这篇文章,它非常及时。我一直缺少这样一份材料。
 
谢谢你!!!!。
 
benik:
Renat,dll的调用速度如何?

检查通话速度非常容易。例如,可以这样做一个粗略的计算。

_DLLAPI int __stdcall fnCalcSpeed(int var1,int var2,int var3)
  {
   return(0);
  }


#import "MQL5DLLSamples.dll"
int  fnCalcSpeed(int var1,int var2,int var3);
#import

   int calls=0;
   int ticks=GetTickCount();
   
   while(GetTickCount()-ticks<1000)
     {
      for(int i=0;i<1000;i++)
         fnCalcSpeed(1,2,3);
      calls++;
     }
   Print(calls * 1000, "вызовов в секунду");

我在Quad Q9400 @2.66Ghz上得到每秒57,000次呼叫。同样的代码在MetaTrader 4中每秒有大约20,000,000次调用,因为那里没有控制和管道。

我们一定会努力减少MetaTrader 5中DLL调用的损失。

 
Renat писал(а) :

每秒57,000个电话

啊,好吧,如果每秒有大约50,000次调用,我想通过DLL广播报价也是可能的。不会有任何损失。

谢谢你的代码。

 
在下一个版本中,DLL调用速度将提高到每秒20 000 000次 "空 "调用,就像MQL4中一样。
 

如果只能通过dll导出报价,那么原来必须在每个要导出的工具上放置一个脚本?如果有很多这样的人呢?例如,50?

我知道可以在一个脚本中传递许多工具的报价,但它不会完全替代DDE,因为在DDE中不会丢失点数。

 

问题是,我们的任务不是 "提供一个报价界面"。

我们的目标是为开发分析系统创造一个完整和自足的环境。这样的环境,甚至不需要使用第三方程序。

 
在任何情况下,Mql5都是一种乐趣。谢谢