Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 237

 
Sergey Likho:

Der Indikator von MT5 zeichnet eine Linie in zwei Farben.

Die Werte der Zeile befinden sich in demselben Puffer.

Gibt es eine Möglichkeit, die Farbe der Linie bei der Abfrage von Werten aus dem Indikator zu identifizieren?

Sie können. Die Farbe der Linie wird im Farbpuffer gespeichert. Wenn nur eine Zeile vorhanden ist, ist der Wertepuffer 0 und der Farbpuffer 1. Dementsprechend setzen Sie in CopyBuffer den zweiten Parameter auf 1.
 
Ventura:

Wenn es nicht möglich ist, das Parameterfenster programmatisch anzuzeigen, geben Sie bitte an, ob die Parameter auf irgendeine Weise initialisiert werden können

input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;
 
Евгений:

Was empfehlen Sie?

Zunächst müssen die Durchsuchungsbefehle nach Symbolen und Magiern gesichtet werden. Es bleiben Ihnen zwei Aufträge. Sie wählen den zu löschenden Eintrag in Ihrer Bedingung aus. Sie löschen einen und ändern den Stop-Loss.

 
Aleksei Stepanenko
input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;

Alexey, ich hatte um einen Vorschlag gebeten, wie man die Parameterberechnungsfunktion aufruft, BEVOR das Parameterfenster erscheint, nicht danach.

Die Frage ist offen: ist es möglich, das Parameterfenster PROGRAMMATISCH aufzurufen? Wenn nicht, ist es möglich, Parameter aus einer Funktion heraus zu initialisieren, BEVOR das Parameterfenster erscheint.

Ich würde gerne etwas wie folgt machen

input double BuyStop = GetMyBuyStop();

Ich erhalte jedoch die Fehlermeldung, dass nur Konstanten auf der rechten Seite stehen können (

 
Ventura:

Alexey, ich hatte um einen Vorschlag gebeten, wie man die Parameterberechnungsfunktion aufruft, BEVOR das Parameterfenster erscheint, nicht danach.

Die Frage ist offen: ist es möglich, das Parameterfenster PROGRAMMATISCH aufzurufen? Wenn nicht, ist es möglich, Parameter aus einer Funktion heraus zu initialisieren , BEVOR das Parameterfenster erscheint.

Ich würde gerne etwas wie folgt machen

input double BuyStop = GetMyBuyStop();

Es tritt jedoch ein Fehler auf, dass es nur eine Konstante auf der rechten Seite geben kann (

Es gibt nichts, bevor das Parameterfenster erscheint, alles beginnt erst später, wenn das Fenster bereits geladen ist

 

Genau das hat Vitaly gesagt!

Erstellen Sie ein Panel im Diagramm und verwalten Sie die Variablen von dort aus.

 
Vitaly Muzichenko:

Vor dem Erscheinen des Parameterfensters ist nichts zu sehen, es beginnt erst danach, wenn das Fenster bereits geladen ist.

Ich weiß das, deshalb warte ich auf professionellen Rat. Vielleicht kann dies auf nicht standardisierte Weise geschehen, durch Win API oder etwas anderes.

Gibt es wirklich keine Möglichkeit, das Fenster programmgesteuert über den Code anzuzeigen?

 
Ventura:

Ich weiß das, deshalb warte ich auf professionellen Rat. Vielleicht kann dies auf nicht standardisierte Weise geschehen, durch Win API oder etwas anderes.

Gibt es keine Möglichkeit, das Fenster programmgesteuert über den Code anzuzeigen?

Vor der Initialisierung des EA (und die Parameter werden vor der Initialisierung eingegeben), ist der EA nicht verfügbar, er funktioniert nicht... Vor der Initialisierung des Expert Advisors steht Ihnen das Fenster mit seinen Parametern zur Verfügung. Aber das passt nicht zu Ihnen. Verwenden Sie also eine andere Eingabe der Werte, die Sie benötigen - nach der Initialisierung des EA. Sie haben Zugriff auf das Fenster MessageBox(). Aber es wird Ihnen nicht viel helfen - es gibt keine Werteingabefelder - nur Schaltflächen zum Zustimmen/Ablehnen/Abbrechen.

Sie müssen also Ihr eigenes Fenster verwenden. Sie können sie selbst aus Objekten erstellen. Suchen Sie danach in ObjectCreate(). Oder verwenden Sie Canvas. Aber Kanvas ist nicht für einfaches Handwerk geeignet.

Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
ObjectCreate - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Wenn der EA nicht verfügbar ist, bevor er initialisiert wird (und die Parameter vor der Initialisierung eingegeben werden), funktioniert er nicht... Bevor der EA initialisiert wird, steht Ihnen sein Parameterfenster zur Verfügung. Aber das passt nicht zu Ihnen. Verwenden Sie also eine andere Eingabe der Werte, die Sie benötigen - nach der Initialisierung des EA. Sie haben Zugriff auf das Fenster MessageBox(). Aber es wird Ihnen nicht viel helfen - es gibt keine Werteingabefelder - nur Schaltflächen zum Zustimmen/Ablehnen/Abbrechen.

Sie müssen also Ihr eigenes Fenster verwenden. Sie können sie selbst aus Objekten erstellen. Suchen Sie danach in ObjectCreate(). Oder verwenden Sie Canvas. Aber Kanvas ist nicht für einfaches Handwerk geeignet.

Artem, danke, ich habe auf deinen Rat gewartet. Während ich wartete, suchte ich selbst nach möglichen Lösungen. Heute Morgen habe ich herausgefunden, wie man das Einstellungsfenster programmatisch anzeigen kann!

Ich habe herausgefunden, dass das Fenster durch Drücken von F7 aufgerufen wird. Eine Suche im Internet hat ergeben, dass ich mit MQL ein Softkey-Display erstellen kann.

Der Rest ist eine Frage der Technik. Ich füge den Code hier ein, um ihn mit Ihnen zu teilen, falls er für jemanden nützlich sein könnte:

extern double BuyStop, SellStop;

...

void SetParams()
  {
   BuyStop = CalcBuyStop();
   SellStop = CalcSellStop();
   int handle = WindowHandle(Symbol(), 0);
   PostMessageA(handle,WM_KEYDOWN,VK_F7,0);
  } 
 

Aber ich habe mich zu früh gefreut. Es ist mir gelungen, das Parameterfenster programmatisch zu öffnen, aber die Werte, die ich den Parametern in der Prozedur zugewiesen habe, wurden nicht gespeichert (((

Das heißt, wenn ich das Parameterfenster öffne, sehe ich die bei der Initialisierung angegebenen Werte, in meinem Fall Nullen.

Gibt es eine Möglichkeit, die berechneten Werte in das Parameterformular zu übertragen?