Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 997

 

Приветствую товарищи программисты. Нужна Ваша помощь. В советнике открывается всего одна сделка в первый торговый день месяца, а это может быть и первое и второе и третье и даже четвертое число. У меня в условии примерно так: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){то сделка открывается} Хотел спросить а есть ли какая-нибудь функция на MQL5, которая бы "говорила советнику что сегодня первый торговый день месяца"?

 
Kolya32:

Приветствую товарищи программисты. Нужна Ваша помощь. В советнике открывается всего одна сделка в первый торговый день месяца, а это может быть и первое и второе и третье и даже четвертое число. У меня в условии примерно так: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){то сделка открывается} Хотел спросить а есть ли какая-нибудь функция на MQL5, которая бы "говорила советнику что сегодня первый торговый день месяца"?

Вы не  можете определить первый торговый день или не можете проверить дату текущего дня с первым торговым днем в месяце?

Вот так можно узнать поточней дату открытия месяца на текущем ТФ (PERIOD_CURRENT можете конечно поменять на любой, к примеру на день).

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

Но лучше делать проверки каждой функции iTime,Bars.

 
Kolya32:

Приветствую товарищи программисты. Нужна Ваша помощь. В советнике открывается всего одна сделка в первый торговый день месяца, а это может быть и первое и второе и третье и даже четвертое число. У меня в условии примерно так: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){то сделка открывается} Хотел спросить а есть ли какая-нибудь функция на MQL5, которая бы "говорила советнику что сегодня первый торговый день месяца"?

Найдите где обсуждается открытие нового бара и подставьте туда период PERIOD_MN1

Открытие нового бара и будет первый торговый день месяца.

 
Aleksey Vyazmikin:

Вы не  можете определить первый торговый день или не можете проверить дату текущего дня с первым торговым днем в месяце?

Не могу определить первый торговый день месяца. Спасибо за Ваши рекомендации буду экспериментировать)

 
Alexey Viktorov:

Найдите где обсуждается открытие нового бара и подставьте туда период PERIOD_MN1

Открытие нового бара и будет первый торговый день месяца.

Спасибо. Буду экспериментировать и в этом направлении)

 

Для чего авторы используют для написания двоеточия?  ниже код просто изобилует двоеточиями. Хотя тот же ::Sleep(5); можно писать без двоеточия?

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:

Для чего авторы используют для написания двоеточия?  ниже код просто изобилует двоеточиями. Хотя тот же ::Sleep(5); можно писать без двоеточия?

Операция разрешения контекста ( :: )

Каждая функция в mql5-программе имеет свой контекст исполнения. Например, системная функция Print() выполняется в глобальном контексте. Импортируемые функции вызываются в контексте соответствующего импорта. Функции-методы классов имеют контекст соответствующего класса. Синтаксис операции разрешения контекста:

[Имя_контекста]::Имя_функции(параметры)

Если имя контекста отсутствует, то это явное указание на использование глобального контекста. В случае отсутствия операции разрешения контекста, функция ищется в ближайшем контексте. В случае отсутствия функции в локальном контексте, поиск производится в глобальном контексте.

Также операция разрешения контекста используется для определения функции-члена класса.

тип Имя_класса::Имя_функции(описание_параметров)
   {
// тело функции
   }

Если в программе используются или могут в будущем использоваться несколько одноименных функций из разных контекстов исполнения, то может возникнуть неоднозначность. Порядок приоритета вызова функций без явного указания контекста:

  1. Методы класса. Если функция с заданным именем в классе не задана, то ищем на следующем уровне.
  2. Функции MQL5. Если такой функции в языке нет, то ищем на следующем уровне.
  3. Глобальные функции, определенные пользователем. Если такой функции нет, то ищем на следующем уровне.
  4. Импортируемые функции. Если функция не найдена среди импортируемых, то компилятор выдает ошибку.

Для устранения неоднозначности вызова функций явно указывайте область видимости с помощью операции разрешения контекста.

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

Операция разрешения контекста ( :: )

Я так понял так автор, ускоряет обработку кода. Ничего себе молодец. 

 

На графике рисуется история торгов, как отключить такое рисование?


 
BillionerClub:

На графике рисуется история торгов, как отключить такое рисование?


Сервис - Настройки - Торговля - "Показывать сделки на графике в режиме реального времени".