Intercambio de datos entre dos EAs que se ejecutan en diferentes terminales - página 2

 

Dado que el EA maneja el evento en una base de tic a tic, me he establecido en esa dirección.

La diferencia de escribir uno y leer el otro de un tic, en teoría en el siguiente tic...

 

Se me ocurrió una idea, ¿qué tal si se intercambian datos a través del registro? Crear una clave, eliminar una clave, todas las API para eso parecen estar ahí. No sé lo lento que es, pero parece que la parte a la que acceden las aplicaciones puede estar siempre en la RAM.

¿Se le ha pasado a alguien por la cabeza? Sólo funciona para terminales en la misma máquina.

Voy a indagar en esta dirección :-).

 
Andres писал(а) >>

Se me ocurrió una idea, ¿qué tal si se intercambian datos a través del registro? Crear una clave, eliminar una clave, todas las API para eso parecen estar ahí. No sé lo lento que es, pero parece que la parte a la que acceden las aplicaciones puede estar siempre en la RAM.

¿Se le ha pasado a alguien por la cabeza? Sólo funciona para terminales en la misma máquina.

Voy a indagar en esta dirección :-).

Por favor, dame un enlace a la API para trabajar con el registro.

Hasta ahora estoy considerando la variante basada en el intercambio de información a través de archivos en disco. Por supuesto, ambos terminales funcionan en el mismo ordenador.

He hecho algunas pruebas, y me parece que la velocidad es más que suficiente para intercambiar datos entre terminales en menos de 1 segundo, lo que creo que es suficiente para gestionar ambas cuentas (cuentas de COMPRA y VENTA).

Aunque últimamente he estado muy ocupado en el trabajo, así que no me he ocupado de este problema desde hace un par de semanas.

Aunque ya le pregunté a un compañero programador, pero me advirtió de que no metiera en el registro para solucionar el problema. Me aconsejó encarecidamente que utilizara el uso compartido de archivos en el disco duro.

Ahí es donde me he detenido por ahora. En cuanto tenga suficiente tiempo libre, intentaré realizar esta variante con archivo.

 

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

La conveniencia es que prácticamente hay una referencia a la memoria compartida en la dll.

Esta dirección se puede utilizar como dirección de la estructura. además, su imaginación es el único límite :)

 
solandr >> :

Por favor, dame un enlace a una API para trabajar con el registro.

Ejemplo de lectura del registro.

 

Ya he escrito una pequeña biblioteca, y mis EAs ya están cambiando la información a través del registro. De hecho, se cambian a través de la RAM, sin lectura-escritura en el disco no observo. En MSDN está escrito que es mejor no meter datos de más de un par de cientos de Kb en el registro.

La biblioteca está configurada de tal manera que todas las claves y parámetros se crean en el área de registro temporal y no se escriben en el registro permanente. Después de reiniciar, estas teclas han desaparecido.

Un PERO, la librería sólo funciona con parámetros de cadena, de no más de 255 caracteres (limitación en MQL). Pero esto es suficiente. En general los parámetros en el registro pueden ser de diferentes tipos, no sólo cadenas, pero por ahora otros tipos no son necesarios en mi opinión. Ahora mismo tengo dos EAs intercambiados a través del registro, pero puede que sean necesarios más :-). Otra cosa buena es que en Win API es posible conectarse al registro de la red. Si alguien necesita intercambiar información entre EAs que se ejecutan en diferentes ordenadores de la misma red, puede buscar en esta dirección. En mi opinión, es rápido, sencillo y fiable, y sin dlls ni archivos. Si pones una cadena, obtienes una cadena.

#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 );
}
Archivos adjuntos:
reglib.zip  4 kb
 
Andres писал(а) >>

Se me ocurrió una idea, ¿qué tal si se intercambian datos a través del registro? Crear una clave, eliminar una clave, todas las API para eso parecen estar ahí. No sé lo lento que es, pero parece que la parte a la que acceden las aplicaciones puede estar siempre en la RAM.

¿Se le ha pasado a alguien por la cabeza? Sólo funciona para terminales en la misma máquina.

Voy a indagar en esta dirección :-).

También puedes intentar clavar un clavo con una bombilla. A algunas personas les funciona.

 
Integer >> :

También puedes probar a clavar un clavo con una bombilla. Algunas personas pueden hacerlo.

Pero es hermoso, ¿no crees? También puedes intentar utilizar las variables del sistema operativo.

 
granit77 писал(а) >>

Pero es hermoso, ¿no estás de acuerdo? También puede intentar utilizar las variables del sistema operativo.

También puedes intentar ajustar la hora del sistema.

 
:))))))))))))))
Razón de la queja: