MQL4 Indikator zum Diagramm von EA hinzufügen - Seite 3

 
Georgiy Liashchenko:
Schlaf hat funktioniert, danke

Ich verwende den Code von Alain, und es funktioniert in dem Sinne, dass das klassische Indikatorformular erscheint und mich auffordert, die Parameter auszufüllen und dann auf Ok zu klicken, um den Indikator zu aktivieren, ähnlich wie beim manuellen Anlegen des Indikators. Ist es möglich, den gesamten Vorgang vollständig zu automatisieren, auch die Einstellungen der erforderlichen Parameter? Vielen Dank

 
alessandrovb:

Ich verwende den Code von Alain, und es funktioniert in dem Sinne, dass das klassische Indikatorformular erscheint und mich auffordert, die Parameter auszufüllen und dann auf Ok zu klicken, um den Indikator zu aktivieren, ähnlich wie beim manuellen Anlegen des Indikators. Ist es möglich, den gesamten Vorgang vollständig zu automatisieren, auch die Einstellung der erforderlichen Parameter? Vielen Dank

Sie müssen lediglich einen Code hinzufügen, der den Tastenanschlag simuliert, wie Sie es manuell tun.
 
Alain Verleyen:

Ich habe dieses Problem nicht (mit dem von mir geposteten Code).

Prüfen Sie, ob hWnd von 0 verschieden ist.

Sie können auch versuchen, den Sleep-Wert auf 50 oder 100 zu erhöhen.

Hallo,

Dieser Kommentar ist zu hilfreich, ich habe eine andere Frage,

Kann ich das Eingabe-Popup umgehen und die Standardeinstellung des Indikators verwenden? Wie kann ich kodieren?

Kann ich den Indikator aus dem Diagramm löschen?

 
Alain Verleyen:

Vielen Dank, das ist, was ich suche, ich kann meine benutzerdefinierte Indikator hinzufügen, nur eine weitere Frage, wie es zu entladen?

 
Alain Verleyen:

Herzlichen Glückwunsch, es funktioniert einwandfrei.

 
Alain Verleyen:

Ich habe dieses Problem nicht (mit dem von mir geposteten Code).

Prüfen Sie, ob hWnd von 0 verschieden ist.

Sie können auch versuchen, den sleep-Wert auf 50 oder 100 zu erhöhen.


Ich benutze deinen Code, aber ich habe ein Problem mit seinem Namen.

2018.01.11 12:06:15.864 kann die Datei 'C:\............\MQL4\indicators\MACDèõšp.ex4' nicht öffnen [123]

2018.01.11 12:04:00.518 kann die Datei 'C:\.............\MQL4\Indikatoren\MACD. ex4' nicht öffnen [123]

Erste Zeile wird ausgelöst, wenn

   uchar name2[4];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D';

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

Die zweite Zeile wird ausgelöst, wenn

   uchar name2[];

   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));


Ich habe den ersten Code geändert, jetzt funktioniert es!

   uchar name2[5];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D'; name2[4]=0;

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

Ich denke, mein Problem ist die Erkennung des Array-Endes!
 

Hallo zusammen,

Ich möchte Georgiy Liashchenko danken, und ich möchte meine aktualisierte Version seines Codes teilen, die den Indikator direkt in das Diagramm mitAutomaticallyAcceptDefaults (wenn es auf "true" ist) hinzufügen.

#import "user32.dll"
   int  RegisterWindowMessageW(string MessageName);
   int  PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);
   int  FindWindowW(string lpszClass,string lpszWindow);
#import

#define VK_RETURN 13 //ENTER key

void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
{
   Sleep(100);
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));
   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(100);
   if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);
   }
}

int OnInit()
{
   int hWnd = WindowHandle(Symbol(), 0);
   StartCustomIndicator(hWnd, "Indicator_name");
   return(INIT_SUCCEEDED);
}

Ich hoffe, es wird einigen Leuten helfen, die Indikatoren aus dem Experten einfügen müssen.

Hinweis : Es funktioniert für benutzerdefinierte Indikatoren, ansonsten ändern Sie den Fensternamen

Hinweis2: Verwenden Sie keine Indikatoren mit mehr als 15 Zeichen (vor dem ".ex4")

 
Kray:

Hallo zusammen,

Ich möchte Georgiy Liashchenko danken, und ich möchte meine aktualisierte Version seines Codes teilen, die den Indikator direkt in das Diagramm mitAutomaticallyAcceptDefaults (wenn es auf "true" ist) hinzufügen.

Ich hoffe, es wird einigen Leuten helfen, die Indikatoren aus dem Experten einfügen müssen.

Hinweis: Es funktioniert für benutzerdefinierte Indikatoren, ansonsten ändern Sie den Fensternamen.

Hinweis2: Verwenden Sie keine Indikatoren mit mehr als 15 Zeichen (vor dem ".ex4")

Sehr schön.


Ich habe entdeckt, dass mit:

int r=PostMessageW(hWnd,MessageNumber,13,name2);

Anstelle der Verwendung von:

int r=PostMessageW(hWnd,MessageNumber,15,name2);

Sie auch Standardindikatoren verwenden können, indem Sie den Namen des Standardindikators verwenden.

 

Ich erhalte eine

'name2' - parameter conversion not allowed
Fehlermeldung, wenn ich versuche, es zu kompilieren?!

 

Kray:

Hallo zusammen,

Ich möchte Georgiy Liashchenko danken, und ich möchte meine verbesserte Version seines Codes teilen, die den Indikator direkt in das Diagramm mitAutomaticallyAcceptDefaults (wenn es auf "true" ist) hinzufügen.

......

if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);


Ich benutze MT4 v4.00 Build 1090 (19. Mai 2017).

Die Funktion PostMessageW bringt mein MT4-Terminal zum Absturz, wenn ich sie aus einem Skript heraus verwende, um einen Indikator zu platzieren.

Ich habe SendMessageW als Alternative verwendet, um den Indikator zu platzieren, aber leider bedeutet dies, dass es keine Möglichkeit gibt, das Konfigurationsdialogfeld zu schließen, indem ich ein Tastaturereignis simuliere und die Eingabetaste drücke. Ich denke, das könnte daran liegen, dass die Funktion SendMessageW erst zurückkehrt, wenn die Fensterprozedur die Nachricht verarbeitet hat, was bedeutet, dass das Tastaturereignis erst verarbeitet werden kann, wenn das Dialogfeld nicht mehr vorhanden ist. Das wiederum bedeutet, dass FindWindowW nicht funktioniert, solange das Dialogfeld angezeigt wird, da SendMessageW erst zurückkehrt, wenn das Dialogfeld verschwunden ist.

Die ganze Sache ist eine einzige große Übung in Frustration für mich gewesen. Funktioniert PostMessageW noch auf dem neuesten Build von MT4? Weiß jemand, wie man das Konfigurationsdialogfeld des Indikators programmgesteuert schließen kann? Ich habe zwei andere Threads konsultiert, deren Empfehlungen ausprobiert und war nicht erfolgreich:

https://www.mql5.com/en/forum/155334

https://www.mql5.com/en/forum/115967

Kann mich jemand aufklären? Gibt es eine Möglichkeit, PostMessageW zum Laufen zu bringen oder das Konfigurationsdialogfeld auf eine andere Weise zu schließen?

Grund der Beschwerde: