在不同终端中运行的两个EA之间交换数据 - 页 2

 

由于EA在逐点的基础上处理事件,我已经确定了这个方向。

写一个和读另一个的区别,从理论上讲,在下一个刻度上...

 

我想到了一个想法,通过注册表来交换数据 如何?创建一个密钥,删除一个密钥,所有相关的API似乎都在那里。我不知道它有多慢,但似乎被应用程序访问的部分可以一直在RAM中。

有没有人想过这个问题?只有对同一台机器上的终端才有效。

我将朝着这个方向挖掘:-)。

 
Andres писал(а)>>

我想到了一个想法,通过注册表来交换数据如何?创建一个密钥,删除一个密钥,所有相关的API似乎都在那里。我不知道它有多慢,但似乎被应用程序访问的部分可以一直在RAM中。

有没有人想过这个问题?只有对同一台机器上的终端才有效。

我将朝着这个方向挖掘:-)。

请给我一个与注册处合作的API的链接。

到目前为止,我正在考虑基于通过磁盘上的文件进行信息交流的变体。当然,这两个终端都在同一台电脑上工作。

我做了一些测试,在我看来,其速度足以在1秒内完成终端之间的数据交换,我认为这足以管理两个账户(买入和卖出账户)。

虽然,我最近工作很忙,所以我有几个星期没有处理这个问题了。

虽然我以前问过一个程序员朋友,但他警告我不要掺杂注册表来解决这个问题。他强烈建议我使用硬盘上的文件共享。

这就是我暂时停止的地方。一旦我有足够的空闲时间,我将尝试用文件实现这个变体。

 

http://yandex.ru/yandsearch?text=CreateFileMapping&stpar2=%2Fh0%2Ftm123%2Fs1&stpar4=%2Fs1

方便之处在于,在dll中实际上有一个对共享内存的引用。

这个地址可以作为一个结构地址。此外,你的想象力是唯一的限制 :)

 
solandr >> :

请给我一个与注册表合作的API的链接。

从注册表读取 的例子。

 

我已经写了一个小库,我的EA已经在通过注册表改变信息。事实上,它们是通过RAM改变的,没有读写到磁盘,我没有观察到。在MSDN中写到,最好不要把超过几百Kb的数据塞进注册表。

库的配置方式是,所有的键和参数都是在临时注册表区域创建的,不会写入永久注册表。重新启动后,这些钥匙就不见了。

一个BUT,该库只适用于字符串参数,长度不超过255个字符(MQL的限制)。但这已经很足够了。一般来说,注册表中的参数可以是不同的类型,而不仅仅是字符串,但在我看来,现在还不需要其他类型。现在我有两个通过注册表交换的EA,但可能需要更多:-)。另一个好处是,在Win API中,它可以连接到网络注册表。如果有人需要在同一网络中不同计算机上运行的EA之间交换信息,他们可以朝这个方向看。在我看来,它是快速、简单和可靠的,而且没有任何dlls和文件。你输入一个字符串,你得到一个字符串。

#include "RegLib.mqh"

int hKey;

int init()
{
   // инициализируем дефайны
   InitRegDefines();

   // создаём тестовый ключ
   hKey = CreateKey( HKEY_CURRENT_USER, "!MT4TestKey" );

   // создаём поля по умолчанию
   SetStringValue( hKey, "Bid", "0.0" );
   SetStringValue( hKey, "Ask", "0.0" );

   return( 0 );
}

int start()
{
   // записываем цены в реестр
   SetStringValue( hKey, "Bid", DoubleToStr( Bid, Digits ) );
   SetStringValue( hKey, "Ask", DoubleToStr( Ask, Digits ) );

   // получаем цены в виде строк из реестра
   string BidStr = GetStringValue( hKey, "Bid" );
   string AskStr = GetStringValue( hKey, "Ask" );

   // выводим цены из реестра
   Print( "Bid = ", BidStr, " ", "Ask = ", AskStr );
}

int deinit()
{
   // закрываем ключ
   CloseKey( hKey );
   
   return( 0 );
}
附加的文件:
reglib.zip  4 kb
 
Andres писал(а)>>

我想到了一个想法,通过注册表来交换数据如何?创建一个密钥,删除一个密钥,所有相关的API似乎都在那里。我不知道它有多慢,但似乎被应用程序访问的部分可以一直在RAM中。

有没有人想过这个问题?只有对同一台机器上的终端才有效。

我将朝着这个方向挖掘:-)。

你也可以尝试用灯泡来敲打钉子。这对一些人来说是有效的。

 
Integer >> :

你也可以尝试用灯泡敲击钉子。有些人可以做到这一点。

但它很美,你不觉得吗?你也可以尝试使用操作系统的变量。

 
granit77 писал(а)>>

但它很美,你不同意吗?你也可以尝试使用操作系统的变量。

你也可以尝试设置系统时间。

 
:))))))))))))))