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

 

Grüße an alle Programmierer. Ich brauche Ihre Hilfe. Der Expert Advisor eröffnet nur ein Geschäft am ersten Handelstag eines Monats, sei es am ersten, zweiten, dritten oder sogar vierten Tag. Meine Bedingung ist wie folgt: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade ist geöffnet} Ich möchte fragen, ob es irgendeine Funktion in MQL5, die "EA sagen würde, dass heute der erste Handelstag des Monats ist"?

 
Kolya32:

Grüße an alle Programmierer. Ich brauche Ihre Hilfe. Mein Expert Advisor eröffnet nur ein Geschäft am ersten Handelstag eines Monats, und das kann der erste oder der zweite, der dritte oder sogar der vierte Tag sein. Meine Bedingung ist wie folgt: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade ist geöffnet} Ich möchte fragen, ob es irgendeine Funktion in MQL5, die "EA sagen würde, dass heute der erste Handelstag des Monats ist"?

Sie können den ersten Handelstag nicht finden oder Sie können das Datum des aktuellen Tages nicht mit dem ersten Handelstag des Monats abgleichen?

Auf diese Weise können Sie das Eröffnungsdatum des Monats in der aktuellen TF genauer ermitteln(PERIOD_CURRENT kann natürlich z.B. auf einen beliebigen Tag geändert werden).

 datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_MN1,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);

Aber es ist besser, jede FunktioniTime,Bars zu überprüfen.

 
Kolya32:

Grüße an alle Programmierer. Ich brauche Ihre Hilfe. Mein Expert Advisor eröffnet nur ein Geschäft am ersten Handelstag eines Monats, es kann aber auch der erste, zweite, dritte oder sogar vierte Tag sein. Meine Bedingung ist wie folgt: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade ist geöffnet} Ich möchte fragen, ob es irgendeine Funktion in MQL5, die "sagen würde mein EA, dass heute der erste Handelstag des Monats ist"?

Suchen Sie die Stelle, an der die Eröffnung eines neuen Balkens diskutiert wird, und ersetzen Sie dort die Periode PERIOD_MN1

Die Eröffnung einer neuen Bar wird der erste Handelstag des Monats sein.

 
Aleksey Vyazmikin:

Sie können den ersten Handelstag nicht identifizieren oder das Datum des aktuellen Tages nicht mit dem ersten Handelstag des Monats abgleichen?

Ich kann den ersten Handelstag des Monats nicht bestimmen. Danke für Ihre Empfehlungen, ich werde experimentieren)

 
Alexey Viktorov:

Finden Sie heraus, wo die Eröffnung eines neuen Balkens besprochen wird und ersetzen Sie die Periode PERIOD_MN1

Die Eröffnung der neuen Bar wird der erste Handelstag des Monats sein.

Ich danke Ihnen. Ich werde auch in dieser Richtung experimentieren)

 

Warum verwenden die Autoren Doppelpunkte zum Schreiben? Der folgende Code ist einfach voller Doppelpunkte. Obwohl derselbe::Sleep(5); auch ohne Doppelpunkte geschrieben werden kann?

void CProgram::GetSymbols(void)
  {
   m_progress_bar.LabelText("Get symbols...");
   m_progress_bar.Update(1,2);
   ::Sleep(5);
//--- Освободить массив символов
   ::ArrayFree(m_symbols);
//--- Массив элементов строк
   string elements[];
//--- Фильтр названий символов
   if(m_symb_filter.IsPressed())
     {
      string text=m_symb_filter.GetValue();
      if(text!="")
        {
         ushort sep=::StringGetCharacter(",",0);
         ::StringSplit(text,sep,elements);
         //---
         int elements_total=::ArraySize(elements);
         for(int e=0; e<elements_total; e++)
           {
            //--- Чистка по краям
            ::StringTrimLeft(elements[e]);
            ::StringTrimRight(elements[e]);
           }
        }
     }
//--- Собираем массив форекс-символов
   int symbols_total=::SymbolsTotal(true);
   for(int i=0; i<symbols_total; i++)
     {
      //--- Получим имя символа
      string symbol_name=::SymbolName(i,false);
      //--- Скроем его в окне Обзор рынка
      ::SymbolSelect(symbol_name,false);
      //--- Если не форекс-символ, перейти к следующему
      if(::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_CALC_MODE)!=SYMBOL_CALC_MODE_FOREX)

         if(m_symb_filter.IsPressed())
           {
            bool check=false;
            int elements_total=::ArraySize(elements);
            for(int e=0; e<elements_total; e++)
              {
               //--- Ищем совпадение в названии символа
               if(::StringFind(symbol_name,elements[e])>-1)
                 {
                  check=true;
                  break;
                 }
              }
            //--- Перейти к следующему, если не пропускает фильтр
            if(!check)
               continue;
           }
      //--- Сохраним символ в массив
      int array_size=::ArraySize(m_symbols);
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=symbol_name;
     }
//--- Если массив пустой, установим текущий символ по умолчанию
   int array_size=::ArraySize(m_symbols);
   if(array_size<1)
     {
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=::Symbol();
     }
//--- Покажем в окне Обзор рынка
   int selected_symbols_total=::ArraySize(m_symbols);
   for(int i=0; i<selected_symbols_total; i++)
      ::SymbolSelect(m_symbols[i],true);
  }
 
BillionerClub:

Warum verwenden die Autoren Doppelpunkte zum Schreiben? Der folgende Code ist einfach voller Doppelpunkte. Aber können wir das gleiche::Sleep(5); ohne Doppelpunkte schreiben?

Auflösung des Operationskontexts ( :: )

Jede Funktion in mql5-program hat ihren eigenen Ausführungskontext. Zum Beispiel wird die Systemfunktion Print() im globalen Kontext ausgeführt. Die importierten Funktionen werden im Kontext des entsprechenden Imports aufgerufen. Funktionen/Methoden von Klassen haben den Kontext der entsprechenden Klasse. Die Syntax der Kontextauflösungsoperation:

[kontext_name]::funktion_name(parameter)

Wenn es keinen Kontextnamen gibt, handelt es sich um einen expliziten Verweis auf die Verwendung eines globalen Kontexts. Wenn es keine Kontextauflösung gibt, wird die Funktion im nächstgelegenen Kontext gesucht. Wenn es im lokalen Kontext keine Funktion gibt, wird sie im globalen Kontext gesucht.

Außerdem wird die Kontextauflösungsoperation verwendet, um die Mitgliedsfunktion einer Klasse zu bestimmen.

Typ Klassenname::Funktionsname(Beschreibung_Parameter)
{
// Funktionskörper
}

Wenn ein Programm mehrere gleichnamige Funktionen aus unterschiedlichen Ausführungskontexten verwendet oder in Zukunft verwenden könnte, kann es zu Mehrdeutigkeiten kommen. Die Reihenfolge, in der Funktionen aufgerufen werden, ohne dass der Kontext explizit angegeben wird:

  1. Methoden der Klasse. Wenn die Funktion mit dem angegebenen Namen nicht in der Klasse angegeben ist, suchen Sie sie auf der nächsten Ebene.
  2. MQL5-Funktionen. Wenn eine solche Funktion in der Sprache nicht vorhanden ist, befinden wir uns auf der nächsten Ebene.
  3. Vom Benutzer definierte globale Funktionen. Wenn es keine solche Funktion gibt, befinden Sie sich auf der nächsten Ebene.
  4. Importierte Funktionen. Wenn die Funktion nicht unter den importierten Funktionen gefunden wird, erzeugt der Compiler einen Fehler.

Um die Mehrdeutigkeit eines Funktionsaufrufs zu beseitigen, geben Sie den Anwendungsbereich mit Hilfe der Kontextauflösungsoperation explizit an.

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
-1. В частном случае одномерного массива из 50 элементов обращение к первому элементу будет выглядеть как array[0], к последнему элементу - array[49]. Вызов функции с аргументами x1, x2,..., xn Каждый аргумент может представлять собой константу, переменную или выражение соответствующего типа. Передаваемые аргументы разделяются запятыми и должны...
 
Artyom Trishkin:

Operation zur Kontextauflösung ( ::: )

Ich gehe davon aus, dass der Autor die Verarbeitung des Codes beschleunigen will. Gut gemacht.

 

Der Handelsverlauf wird auf dem Diagramm angezeigt. Wie kann ich diese Anzeige deaktivieren?


 
BillionerClub:

Der Handelsverlauf wird im Diagramm angezeigt. Wie kann ich diese Anzeige deaktivieren?


Service - Einstellungen - Handel - " Trades in Echtzeit auf dem Chart anzeigen".