Austausch von Daten zwischen zwei EAs, die auf verschiedenen Terminals laufen - Seite 2

 

Da der EA das Ereignis auf einer Tick-by-Tick-Basis behandelt, habe ich mich für diese Richtung entschieden.

Der Unterschied zwischen dem Schreiben des einen und dem Lesen des anderen von einem Tick, theoretisch beim nächsten Tick...

 

Mir kam eine Idee: Wie wäre es mit dem Austausch von Daten über die Registrierung? Einen Schlüssel erstellen, einen Schlüssel löschen, alle APIs dafür scheinen vorhanden zu sein. Ich weiß nicht, wie langsam es ist, aber es scheint, dass der Teil, auf den die Anwendungen zugreifen, immer im RAM sein kann.

Ist das jemals jemandem in den Sinn gekommen? Es funktioniert nur für Terminals auf demselben Rechner.

Ich werde in dieser Richtung graben :-).

 
Andres писал(а) >>

Mir kam eine Idee: Wie wäre es mit dem Austausch von Daten über die Registrierung? Einen Schlüssel erstellen, einen Schlüssel löschen, alle APIs dafür scheinen vorhanden zu sein. Ich weiß nicht, wie langsam es ist, aber es scheint, dass der Teil, auf den die Anwendungen zugreifen, immer im RAM sein kann.

Ist das jemals jemandem in den Sinn gekommen? Es funktioniert nur für Terminals auf demselben Rechner.

Ich werde in dieser Richtung graben :-).

Bitte geben Sie mir einen Link zur API für die Arbeit mit der Registry.

Bisher habe ich die Variante in Betracht gezogen, die auf dem Informationsaustausch über Dateien auf der Festplatte basiert. Beide Terminals arbeiten natürlich mit demselben Computer.

Ich habe einige Tests durchgeführt, und es scheint mir, dass die Geschwindigkeit mehr als ausreichend ist, um Daten zwischen den Terminals in weniger als 1 Sekunde auszutauschen, was meiner Meinung nach ausreicht, um beide Konten (KAUF- und VERKAUFS-Konten) zu verwalten.

Allerdings war ich in letzter Zeit beruflich sehr eingespannt, so dass ich mich seit ein paar Wochen nicht mehr mit diesem Problem befasst habe.

Ich habe zwar schon einmal einen Programmiererkollegen gefragt, aber er hat mich davor gewarnt, in der Registrierung herumzupfuschen, um das Problem zu lösen. Er riet mir dringend, die gemeinsame Nutzung von Dateien auf der Festplatte zu verwenden.

Damit habe ich vorerst aufgehört. Sobald ich genug freie Zeit habe, werde ich versuchen, diese Variante mit Datei zu realisieren.

 

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

Die Bequemlichkeit besteht darin, dass es einen Verweis auf den gemeinsamen Speicher in der DLL gibt.

Diese Adresse kann als Strukturadresse verwendet werden. Außerdem sind Ihrer Fantasie keine Grenzen gesetzt :)

 
solandr >> :

Bitte geben Sie mir einen Link zu einer API für die Arbeit mit der Registry.

Beispiel für das Lesen aus der Registry.

 

Ich habe bereits eine kleine Bibliothek geschrieben, und meine EAs ändern bereits Informationen über die Registrierung. In der Tat, sie sind durch den RAM geändert, keine Lese-Schreib auf der Festplatte ich nicht beobachten. In MSDN steht geschrieben, dass es besser ist, keine Daten mit mehr als ein paar hundert Kb in die Registrierung zu schieben.

Die Bibliothek ist so konfiguriert, dass alle Schlüssel und Parameter im temporären Registrierungsbereich erstellt und nicht in die permanente Registrierung geschrieben werden. Nach einem Neustart sind diese Tasten verschwunden.

Ein ABER, die Bibliothek arbeitet nur mit String-Parametern, die nicht mehr als 255 Zeichen lang sind (Einschränkung in MQL). Aber das ist völlig ausreichend. Im Allgemeinen können die Parameter in der Registrierung von verschiedenen Typen sein, nicht nur von Strings, aber im Moment sind andere Typen meiner Meinung nach nicht erforderlich. Im Moment habe ich zwei EAs, die über die Registrierung ausgetauscht werden, aber vielleicht werden mehr benötigt :-). Eine weitere gute Sache ist, dass es in Win API möglich ist, eine Verbindung zur Netzwerkregistrierung herzustellen. Wenn jemand Informationen zwischen EAs austauschen muss, die auf verschiedenen Computern im selben Netzwerk laufen, kann er in diese Richtung schauen. Meiner Meinung nach ist es schnell, einfach und zuverlässig, und das ganz ohne Dlls und Dateien. Sie geben eine Zeichenfolge ein und erhalten eine Zeichenfolge.

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

Mir kam eine Idee: Wie wäre es mit dem Austausch von Daten über die Registrierung? Einen Schlüssel erstellen, einen Schlüssel löschen, alle APIs dafür scheinen vorhanden zu sein. Ich weiß nicht, wie langsam es ist, aber es scheint, dass der Teil, auf den die Anwendungen zugreifen, immer im RAM sein kann.

Ist das jemals jemandem in den Sinn gekommen? Es funktioniert nur für Terminals auf demselben Rechner.

Ich werde in dieser Richtung graben :-).

Du kannst auch versuchen, einen Nagel mit einer Glühbirne einzuschlagen. Bei manchen Menschen funktioniert das.

 
Integer >> :

Sie können auch versuchen, einen Nagel mit einer Glühbirne einzuschlagen. Manche Menschen können das.

Aber es ist wunderschön, finden Sie nicht auch? Sie können auch versuchen, OS-Variablen zu verwenden.

 
granit77 писал(а) >>

Aber es ist wunderschön, finden Sie nicht auch? Sie können auch versuchen, OS-Variablen zu verwenden.

Sie können auch versuchen, die Systemzeit einzustellen.

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