Questions des débutants MQL5 MT5 MetaTrader 5 - page 997

 

Salutations à tous les programmeurs. J'ai besoin de votre aide. Le conseiller expert n'ouvre qu'une seule transaction le premier jour de bourse d'un mois, que ce soit le premier, le deuxième, le troisième ou même le quatrième jour. Ma condition est la suivante : if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} Je veux demander s'il existe une fonction dans MQL5 qui "dirait à l'EA qu'aujourd'hui est le premier jour de trading du mois" ?

 
Kolya32:

Salutations à tous les programmeurs. J'ai besoin de votre aide. Mon conseiller expert n'ouvre qu'un seul ordre le premier jour de négociation d'un mois, et cela peut être le premier ou le deuxième, le troisième ou même le quatrième jour. Ma condition est la suivante : if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} Je veux demander s'il existe une fonction dans MQL5 qui "dirait à l'EA qu'aujourd'hui est le premier jour de trading du mois" ?

Vous ne trouvez pas le premier jour de bourse ou vous ne pouvez pas vérifier la date du jour actuel avec le premier jour de bourse du mois ?

C'est ainsi que l'on peut connaître avec plus de précision la date d'ouverture du mois dans le TF actuel(PERIOD_CURRENT peut bien sûr être changé en n'importe quel jour, par exemple).

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

Mais il est préférable de vérifier chaque fonctioniTime,Bars.

 
Kolya32:

Salutations à tous les programmeurs. J'ai besoin de votre aide. Mon conseiller expert n'ouvre qu'une seule transaction le premier jour de négociation d'un mois, mais cela peut être le premier ou le deuxième, le troisième ou même le quatrième jour. Ma condition est la suivante : if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} Je voudrais savoir s'il existe une fonction dans MQL5 qui pourrait "dire à mon EA qu'aujourd'hui est le premier jour de trading du mois" ?

Trouvez l'endroit où l'on parle de l'ouverture d'une nouvelle barre et remplacez-la par la période PERIOD_MN1.

L'ouverture d'un nouveau bar sera le premier jour de négociation du mois.

 
Aleksey Vyazmikin:

Vous ne pouvez pas identifier le premier jour de bourse ou vous ne pouvez pas vérifier la date du jour avec le premier jour de bourse du mois ?

Je ne peux pas déterminer le premier jour de bourse du mois. Merci pour vos recommandations, je vais expérimenter)

 
Alexey Viktorov:

Trouvez l'endroit où l'ouverture d'une nouvelle barre est discutée et substituez la période PERIOD_MN1

L'ouverture du nouveau bar sera le premier jour de négociation du mois.

Merci. Je vais expérimenter dans cette direction également)

 

Pourquoi les auteurs utilisent-ils les deux-points pour écrire ? Le code ci-dessous est tout simplement plein de deux-points. Bien que le même::Sleep(5) ; puisse être écrit sans deux-points ?

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:

Pourquoi les auteurs utilisent-ils les deux-points pour écrire ? Le code ci-dessous est tout simplement plein de deux-points. Mais peut-on écrire le même::Sleep(5) ; sans les deux-points ?

Résolution du contexte de l'opération ( : : )

Chaque fonction de mql5-program a son propre contexte d'exécution. Par exemple, la fonction système Print() est exécutée dans le contexte global. Les fonctions importées sont appelées dans le contexte de l'importation correspondante. Les fonctions-méthodes des classes ont le contexte de la classe correspondante. La syntaxe de l'opération de résolution du contexte :

[nom_contexte]::nom_fonction(paramètres)

S'il n'y a pas de nom de contexte, il s'agit d'une référence explicite pour utiliser un contexte global. S'il n'y a pas d'opération de résolution de contexte, la fonction est recherchée dans le contexte le plus proche. Si la fonction ne se trouve pas dans le contexte local, elle est recherchée dans le contexte global.

De même, l'opération de résolution de contexte est utilisée pour déterminer la fonction membre d'une classe.

type Nom_de_classe::nom_de_fonction(description_paramètres)
{
// corps de la fonction
}

Si un programme utilise ou peut utiliser à l'avenir plusieurs fonctions du même nom à partir de contextes d'exécution différents, une ambiguïté peut apparaître. L'ordre dans lequel les fonctions sont appelées sans spécifier explicitement le contexte :

  1. Méthodes de cours. Si la fonction portant le nom donné n'est pas spécifiée dans la classe, vous la recherchez au niveau suivant.
  2. Fonctions MQL5. Si une telle fonction n'existe pas dans la langue, nous nous situons au niveau suivant.
  3. Fonctions globales définies par l'utilisateur. Si une telle fonction n'existe pas, vous vous trouvez au niveau suivant.
  4. Fonctions importées. Si la fonction n'est pas trouvée parmi celles qui sont importées, le compilateur génère une erreur.

Pour éliminer l'ambiguïté d'un appel de fonction, spécifiez explicitement la portée en utilisant l'opération de résolution de contexte.

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

Opération de résolution du contexte ( :: : )

Je suppose que l'auteur accélère le traitement du code. Bien joué.

 

L'historique des transactions est dessiné sur le graphique, comment puis-je désactiver ce dessin ?


 
BillionerClub:

L'historique des transactions est dessiné sur le graphique, comment puis-je désactiver ce dessin ?


Service - Paramètres - Trading - "Afficher les transactions sur le graphique en temps réel".