Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 576

 

Hallo.

Können Sie mir bitte sagen, ob es möglich ist, den Text aus dem EA in die Zwischenablage zu kopieren, z. B. den Text des Alerts nach Bedingung.

Wenn ja, wie kann man das tun?

 
mila.com:

Hallo.

Können Sie mir bitte sagen, ob es möglich ist, den Text aus dem EA in die Zwischenablage zu kopieren, z. B. den Text des Alerts nach Bedingung.

Wenn ja, wie kann man das tun?

Nein. Die Arbeit mit der Zwischenablage ist eine Systemfunktion (Windows-API). In MQL5 gibt es keinen direkten Zugang zu WinAPI. Und warum mit der Zwischenablage arbeiten? Schließlich erzeugen Sie die Nachricht selbst - das bedeutet, dass Sie den Ausgangstext der Nachricht besitzen.
 
Karputov Vladimir:
Nein. Die Arbeit mit der Zwischenablage ist eine Systemfunktion (Windows-API). In MQL5 gibt es keinen direkten Zugang zu WinAPI. Und warum sollten Sie mit der Zwischenablage arbeiten? Schließlich erzeugen Sie die Nachricht selbst - Sie haben also den Quelltext der Nachricht.

Ja, der Quellcode ist da, aber ich brauche ihn unter einer bestimmten Bedingung in der Zwischenablage.

Sorry, ich habe nicht angegeben, ich brauche die Implementierung in MQL4.

Ist es möglich, die Zwischenablage irgendwie mit #import "user32.dll" zu öffnen?

 
mila.com:

Ja, der Quellcode ist da, aber ich brauche ihn unter einer bestimmten Bedingung in der Zwischenablage.

Sorry, ich habe nicht angegeben, ich brauche die Implementierung in MQL4.

Vielleicht können Sie die Zwischenablage irgendwie mit #import "user32.dll" öffnen?

Es ist an der Zeit, in MQL5 zu schreiben. Die Verwendung von dll ist der Gipfel der Rücksichtslosigkeit.

So wie ich es verstehe, wollen Sie die Informationen aus einem Programm eines Drittanbieters lesen. Verwenden Sie dann das Schreiben in eine Datei, die sich in einem gemeinsamen Verzeichnis aller Client-Terminals befindet: \Terminal\Common\Files. Bereits von diesem Verzeichnis aus können Sie die Datei mit einem Fremdprogramm lesen.

 
Karputov Vladimir:

Es ist höchste Zeit, in MQL5 zu schreiben. Die Verwendung einer Intelligenzbestie ist der Gipfel der Torheit.

So wie ich es verstehe, möchten Sie Informationen aus einem Drittanbieterprogramm lesen. Verwenden Sie dann das Schreiben in eine Datei, die in einem gemeinsamen Verzeichnis aller Client-Terminals \Terminal\Common\Files. Von diesem Verzeichnis aus können Sie die Datei mit einem Drittanbieterprogramm lesen.

Vielen Dank für die Empfehlungen, aber jetzt muss ich den Text in die Zwischenablage von MQL4 Programm zu kopieren.

 
Karputov Vladimir:

Gehen wir sie der Reihe nach durch. Hier ist die Vorlage:

Hängen Sie es an das Diagramm und einen Screenshot des Diagramms im Studio an, sowie die Einträge aus den Registerkarten "Log" und "Advisors" (falls sie dort erscheinen).

Hallo !!!

Für den Anfang habe ich die MT5-Plattform neu gestartet. Kompilieren Sie Ihre Vorlage. Das Ergebnis der Kompilierung ist unten dargestellt. Ich musste die Screenshots wegen der großen Menge wegwerfen

Ein EA ist im Navigator erschienen:

Werfen Sie den EA auf dem Chart und erlaubt den Handel in 3 Orten:

Ich habe das EA-Symbol statt eines Smileys auf dem Diagramm.

Hier ist ein Auszug aus dem Log 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) erfolgreich geladen

Im Folgenden finden Sie den Inhalt der Nachricht über das Laden des EA:

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 gestartet
HD 0 10:35:45.020 Terminal Windows 8.1 (x64 basierter PC), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminal C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Netzwerk '50016841': autorisiert auf Alpari-Ltd-MT5 über mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Netzwerk '50016841': vorherige erfolgreiche Autorisierung durchgeführt von 79.172.69.175 am 2016.05.10 23:47:58
FK 0 10:35:47.617 Netzwerk '50016841': Terminal synchronisiert mit Alpari Limited
RM 0 10:35:47.617 Netzwerk '50016841': Der Handel wurde aktiviert - Netting-Modus
OH 0 10:35:48.253 Netzwerk '50016841': Scannen des Netzwerks nach Zugangspunkten
CL 0 10:35:51.446 Netzwerk '50016841': Netzwerksuche beendet
ND 1 12:00:49.011 Netzwerk '50016841': Verbindung zu Alpari-Ltd-MT5 verloren
MR 0 12:01:08.842 Netzwerk '50016841': autorisiert auf Alpari-Ltd-MT5 über mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Netzwerk '50016841': vorherige erfolgreiche Autorisierung durchgeführt von 79.172.69.175 am 2016.05.11 10:35:52
PQ 0 12:01:08.907 Netzwerk '50016841': Terminal synchronisiert mit Alpari Limited
PH 0 12:01:08.907 Netzwerk '50016841': Der Handel wurde aktiviert - Netting-Modus
KL 0 12:41:45.169 Expert Advisor Test (GBPUSD,H1) erfolgreich geladen

Bitte sehen Sie es sich an. Vielleicht finden Sie die Ursache. Ich bin ratlos, vielleicht ist es ein Problem mit dem Build?

Vielen Dank !!!



Danke für die Hilfe !!!

 
Boris.45:

Hallo !!!

Für den Anfang habe ich die MT5-Plattform neu gestartet. Kompilieren Sie Ihre Vorlage. Das Ergebnis der Kompilierung ist unten dargestellt. Ich musste die Screenshots wegen der großen Menge wegwerfen

Ein EA ist im Navigator erschienen:

Werfen Sie den EA auf dem Chart und erlaubt den Handel in 3 Orten:

Ich habe das EA-Symbol statt eines Smileys auf dem Diagramm.

Hier ist ein Auszug aus dem Log 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) erfolgreich geladen

Nachfolgend finden Sie den Inhalt der Nachricht über das Laden des EA:

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 gestartet
HD 0 10:35:45.020 Terminal Windows 8.1 (x64 basierter PC), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminal C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Netzwerk '50016841': autorisiert auf Alpari-Ltd-MT5 über mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Netzwerk '50016841': vorherige erfolgreiche Autorisierung durchgeführt von 79.172.69.175 am 2016.05.10 23:47:58
FK 0 10:35:47.617 Netzwerk '50016841': Terminal synchronisiert mit Alpari Limited
RM 0 10:35:47.617 Netzwerk '50016841': Der Handel wurde aktiviert - Netting-Modus
OH 0 10:35:48.253 Netzwerk '50016841': Scannen des Netzwerks nach Zugangspunkten
CL 0 10:35:51.446 Netzwerk '50016841': Netzwerksuche beendet
ND 1 12:00:49.011 Netzwerk '50016841': Verbindung zu Alpari-Ltd-MT5 verloren
MR 0 12:01:08.842 Netzwerk '50016841': autorisiert auf Alpari-Ltd-MT5 über mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Netzwerk '50016841': vorherige erfolgreiche Autorisierung durchgeführt von 79.172.69.175 am 2016.05.11 10:35:52
PQ 0 12:01:08.907 Netzwerk '50016841': Terminal synchronisiert mit Alpari Limited
PH 0 12:01:08.907 Netzwerk '50016841': Der Handel wurde aktiviert - Netting-Modus
KL 0 12:41:45.169 Expert Advisor Test (GBPUSD,H1) erfolgreich geladen

Bitte sehen Sie es sich an. Vielleicht finden Sie die Ursache. Ich bin ratlos, vielleicht ist es ein Problem mit dem Build?

Vielen Dank !!!



Danke für die Hilfe !!!

Bringen Sie die Klemme über der defekten Klemme an. Sie kann geheilt werden.
 
Karputov Vladimir:

Es ist höchste Zeit, dass wir in MQL5 schreiben. Die Verwendung einer Intelligenzbestie ist der Gipfel der Torheit.

So wie ich es verstehe, möchten Sie Informationen aus einem Drittanbieterprogramm lesen. Verwenden Sie dann das Schreiben in eine Datei in einem gemeinsamen Verzeichnis für alle Client-Terminals \Terminal\Common\Files. Bereits von diesem Verzeichnis aus können Sie die Datei mit einem Fremdprogramm lesen.

Wenn es "der Gipfel der Torheit" wäre, wäre es verboten.

WinAPI erweitert die Möglichkeiten von MQL erheblich. Und man kann auch ohne dll etwas Dummes tun.

Und hier ist ein Beispiel für die Übergabe einer Zeichenkette an die Zwischenablage:

#define  CF_UNICODETEXT 13
#define  GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint dest, string src, uint count );
#import

string str = "АБВГД";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uint hwnd = (uint)ChartGetInteger( 0, CHART_WINDOW_HANDLE );
   
   int strSize = StringLen( str ) * 2 + 2;  // Получаем размер строки в байтах
   
   if( OpenClipboard( hwnd ) )    // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
      uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
      uint pMem = GlobalLock( hMem );    // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );  // Передаём память со строкой в буфер
      
      CloseClipboard();  // Закрываем буфер
   }
}
 
Artyom Trishkin:


Artem, sagen Sie mir, wenn ich all dies unter der Funktion On Start in die Funktion On Tick einfüge, wird das Skript auf die gleiche Weise ausgeführt, nur bei jedem Tick, richtig?

Oder muss etwas geändert werden?

Da sich die vorhergehenden Candlesticks, mit Ausnahme des aktuellen, nicht bei jedem Tick ändern, sollten wir wohl eine Bedingung hinzufügen, um sie einmal zu überprüfen, z. B. 1 - 2 Sekunden vor dem Schließen des aktuellen Candlesticks? Oder macht es keinen Sinn und wir können die Kontrolle bei jedem Häkchen belassen?

 
Andrey Koldorkin:

Artem, sagen Sie mir, wenn ich all dies unter der Funktion On Start in die Funktion On Tick einfüge, wird das Skript auf die gleiche Weise ausgeführt, nur bei jedem Tick, richtig?

Oder muss etwas geändert werden?

Da sich die vorherigen Candlesticks, mit Ausnahme des aktuellen, nicht bei jedem Tick ändern, sollten wir wohl eine Bedingung hinzufügen, um sie einmal zu überprüfen, z. B. 1 - 2 Sekunden bevor der nächste aktuelle Candlestick schließt? Oder macht es keinen Sinn und wir können die Kontrolle bei jedem Häkchen belassen?

Nun, ich würde das alles in eine Funktion packen und sie dann aufrufen, wenn ich sie brauche - bei jedem Tick (wenn es sinnvoll und notwendig ist), oder bei der Eröffnung einer neuen Kerze - einmal pro Stunde zum Beispiel, wenn wir mit H1 arbeiten.
Grund der Beschwerde: