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

 

leonerd #:
Здравствуйте. А как программно узнать символ и таймфрейм активного чарта в клиентском терминале? Т.е. чарта выбранного в настоящее время во вкладке. Есть какая-то функция из MQL5 для этого?

long  ChartGetInteger(
   long  chart_id,          // идентификатор графика
   int   prop_id,           // идентификатор свойства
   int   sub_window=0       // номер подокна, если требуется
   );

CHART_BRING_TO_TOP

Diagramm über allen anderen Diagrammen anzeigen

bool


string  ChartSymbol(
   long  chart_id=0      // идентификатор графика
   );
ENUM_TIMEFRAMES  ChartPeriod(
   long  chart_id=0      // идентификатор графика
   );

Wie definiere ich einen Diagrammbezeichner, der ebenfalls angezeigt wird?

Документация по MQL5: Операции с графиками
Документация по MQL5: Операции с графиками
  • www.mql5.com
Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

CHART_BRING_TO_TOP

Diagramm über allen anderen Diagrammen anzeigen

bool


Wie definiere ich eine Diagramm-ID, die ebenfalls angezeigt wird?

https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_foreground

Ich danke Ihnen. CHART_FOREGROUND ist wahrscheinlich am besten geeignet. Ich muss das aktive Diagramm nicht zwangsweise festlegen, sondern nur feststellen, welches Diagramm aktiv ist. Liege ich richtig in der Annahme, dass ich alle offenen Charts durchgehen muss, um CHART_FOREGROUND zu überprüfen ?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
  • www.mql5.com
Примеры работы с графиком - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
leonerd #:

https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_foreground

Ich danke Ihnen. CHART_FOREGROUND ist wahrscheinlich am besten geeignet. Es ist nicht so, dass ich das aktive Diagramm zwangsweise festlegen muss, sondern nur das aktive Diagramm identifizieren muss. Verstehe ich das richtig, dass ich alle offenen Charts durchgehen muss, um CHART_FOREGROUND zu überprüfen ?

CHART_FOREGROUND ist ein Diagramm im Vordergrund.

Und um es nicht zu erzwingen, sollten Sie ChartSetInteger durch ChartGetInteger ersetzen

 

Guten Tag.
Können Sie mir einen Tipp geben - ich denke über einen Roboter nach und es gibt vier verschiedene Bedingungen - ich weiß noch nicht, welche ich entfernen soll: Ich möchte das später herausfinden, wenn ich für verschiedene Zeitrahmen optimiere.

Das heißt: vier Bedingungen (f1,f2,f3,f4). Es kann viele Kombinationen geben (0,0,1,1) oder (1,0,1,0) und so weiter - insgesamt 16 Kombinationen. Genau 15 - die Variante (0, 0, 0, 0) wird nicht berücksichtigt.

Frage: Wie kann man eine Programmlogik erstellen, um nicht alle 15 Kombinationen im Code zu beschreiben? Es gibt eine Funktion, mit der jede dieser Bedingungen geprüft werden kann, und in welchen Kombinationen diese Bedingungen zutreffen - prüfen Sie, wie sonst.

Ich würde mich freuen, wenn Sie mir einen Expert Advisor zeigen könnten, der es mir erlaubt, viele Bedingungen in einen übersichtlichen Code einzugeben.

 
qadexys #:

Guten Tag.
Können Sie mir einen Tipp geben - ich denke über einen Roboter nach und es gibt vier verschiedene Bedingungen - ich weiß noch nicht, welche ich entfernen soll: Ich möchte das später herausfinden, wenn ich für verschiedene Zeitrahmen optimiere.

Das heißt: vier Bedingungen (f1,f2,f3,f4). Es kann viele Kombinationen geben (0,0,1,1) oder (1,0,1,0) und so weiter - insgesamt 16 Kombinationen. Genau 15 - die Variante (0, 0, 0, 0) wird nicht berücksichtigt.

Frage: Wie kann man eine Programmlogik erstellen, um nicht alle 15 Kombinationen im Code zu beschreiben? Es gibt eine Funktion, mit der jede dieser Bedingungen geprüft werden kann, und in welchen Kombinationen diese Bedingungen zutreffen - prüfen Sie, wie sonst.

Ich würde mich freuen, wenn Sie mir einen Expert Advisor zeigen könnten, der es mir ermöglicht, mehrere Bedingungen in einem übersichtlichen Code einzuführen.

Ich könnte so vorgehen:

input bool F1;
input bool F2;
input bool F3;
input bool F4;

   ...
   if(  ( !F1 || f1)
      &&( !F2 || f2)
      &&( !F3 || f3)
      &&( !F4 || f4)
     )
     {
      open_pos();
     }
   ...

Oder etwas in dieser Art:

#define  MODE_f1    0x1
#define  MODE_f2    0x2
#define  MODE_f3    0x4
#define  MODE_f4    0x8

bool expert::create_strategy(ulong m, int om, int cm)
  {
   magic=m;
   open_mode=om;
   close_mode=cm;
   ...
  }

int OnInit()
  {
   ...
   my_strat[i].create_strategy(MAGIC, MODE_f1|MODE_f2|MODE_f4,MODE_c2|MODE_c3);
   ...
  }

expert::check_open()
  {
   ...
   if(  ((open_mode & MODE_f1)==0 || f1)
      &&((open_mode & MODE_f2)==0 || f2)
      &&((open_mode & MODE_f3)==0 || f3)
      &&((open_mode & MODE_f4)==0 || f4)
     )
     {
      open_pos();
     }
   ...
  }
 
Alexey Viktorov #:

CHART_FOREGROUND ist das Diagramm im oberen Bereich

Und um es nicht zu erzwingen, ersetzen Sie ChartSetInteger durch ChartGetInteger

danke

 
JRandomTrader #:

Sie könnten dies tun:

Oder etwas in dieser Art:

Und hier ist die erste Konstruktion - wie würde sich der Code unter den Bedingungen (0, 1, 0, 1) verhalten?

Könnten Sie bitte den Hauptteil der If-Bedingung erklären

 
qadexys #:

Und hier ist die erste Konstruktion - wie wird sich der Code unter den Bedingungen (0, 1, 0, 1) verhalten?

Könnten Sie bitte den Wortlaut der Bedingung erläutern?

Hier ist es ganz einfach. Wenn F1==false ist, dann ist ( !F1 || f1) unabhängig von der Bedingung f1 wahr.

D.h. wenn Fn==true, wird die Bedingung fn geprüft, und wenn Fn==false, wird die Bedingung fn nicht geprüft.

Dementsprechend werden für (0, 1, 0, 1) nur die Bedingungen f2 und f4 geprüft, und wenn sie beide zutreffen, wird der open_pos()-Code ausgeführt

 
JRandomTrader #:

Das ist ganz einfach. Wenn F1==false ist, dann ist ( !F1 || f1) unabhängig von der Bedingung f1 wahr.

D.h. wenn Fn==true, wird die Bedingung fn geprüft, und wenn Fn==false, wird die Bedingung fn nicht geprüft.

Dementsprechend werden für (0, 1, 0, 1) nur die Bedingungen f2 und f4 geprüft, und wenn sie beide zutreffen, wird der Code open_pos() ausgeführt

Aber für den Fall, dass f1 und andere nicht nur 0 oder 1 sind. Ich dachte, wenn die Bedingung f1 für eine Short-Position erfüllt ist, dann wird eine zurückgegeben. Wenn es sich um eine Long-Position handelt, wird 2 zurückgegeben. Wenn die Bedingung überhaupt nicht erfüllt ist - 0.

Aber bei einer solchen Konstruktion sollten wir wahrscheinlich nicht mit einer solchen Vielfalt von Parameterwerten rechnen und die Bedingung auf andere Weise formulieren?

 
qadexys #:

Aber für den Fall, dass f1 und andere nicht nur 0 oder 1 sind. Ich dachte, wenn die Bedingung f1 für die Short-Position erfüllt ist, wird eine Eins zurückgegeben. Für eine Long-Position wird 2. Wenn die Bedingung überhaupt nicht erfüllt ist - 0.

Aber vielleicht sollten wir bei diesem Konstrukt nicht mit einer solchen Vielfalt von Parameterwerten rechnen und die Bedingung anders formulieren, oder?

Die Bedingungen für die Eröffnung von Long- und Short-Positionen werden getrennt betrachtet.

Ich meine, zum Beispiel so:

 ...
   if(  ( !F1 || f1==1 )
      &&( !F2 || f2==1 )
      &&( !F3 || f3==1 )
      &&( !F4 || f4==1 )
     )
     {
      open_short();
     }
   else if(  ( !F1 || f1==2 )
           &&( !F2 || f2==2 )
           &&( !F3 || f3==2 )
           &&( !F4 || f4==2 )
          )
     {
      open_long();
     }
 ...

Ich werde sogar ein Stück meines echten Codes verkaufen - ohne Informationen über die "Kampf"-Werte von Variablen und die Bedingungen für das Halten von Positionen wird er kein Know-how preisgeben.

Sie können hier eine von 224 Optionen angeben:

   if(true
      && ((OpenMode & MODE_St1)==0 || St_Buf[St_Rq-1]>80)
      && ((OpenMode & MODE_St2)==0 || St_Buf2[St_Rq-1]>80)
      && ((OpenMode & MODE_BB1)==0 || last_tick.bid > bb[BandsReq-1].U)
      && ((OpenMode & MODE_BB2)==0 || last_tick.bid > bb2[BandsReq-1].U)
      && ((OpenMode & MODE_D1)==0  || rt[RtReq-1].high<rt[RtReq-2].high) 
     )
     {
      switch(OpenMode & (MODE_VR|MODE_OR|MODE_A))
        {
         case 0 :
         case MODE_A :
           res=-2;
           break;
         case MODE_VR :
           if((1/VR)>VRO)
             res=-2;
           break;
         case MODE_OR :
           if((1/OR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_A :
           if((1/AVR)>VRO)
             res=-2;
           break;
         case MODE_OR|MODE_A :
           if((1/AOR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_OR :
           if((1/VR)>VRO && (1/OR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_OR|MODE_A :
           if((1/AVR)>VRO && (1/AOR)>VRO)
             res=-2;
           break;
        }
Grund der Beschwerde: