Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 997

 

Saludos compañeros programadores. Necesito tu ayuda. El Asesor Experto abre una sola operación el primer día de negociación de un mes. Puede ser el primero o el segundo o el tercero o incluso el cuarto día. Mi condición es la siguiente: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){se abre la operación} Quiero preguntar si hay alguna función en MQL5 que "le diga al EA que hoy es el primer día de negociación del mes".

 
Kolya32:

Saludos compañeros programadores. Necesito tu ayuda. Mi Asesor Experto abre sólo una operación el primer día de negociación de un mes, y puede ser el primero o el segundo, el tercero o incluso el cuarto día. Mi condición es la siguiente: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){se abre la operación} Quiero preguntar si hay alguna función en MQL5 que "le diga al EA que hoy es el primer día de negociación del mes".

¿No puede encontrar el primer día de negociación o no puede comprobar la fecha del día actual con el primer día de negociación del mes?

Así se puede conocer con mayor precisión la fecha de apertura del mes en la TF actual( por supuesto,PERIOD_CURRENT puede cambiarse por cualquier día, por ejemplo).

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

Pero es mejor comprobar cada funcióniTime,Bars.

 
Kolya32:

Saludos compañeros programadores. Necesito tu ayuda. Mi Asesor Experto sólo abre una operación el primer día de negociación de un mes, pero puede ser el primero o el segundo, el tercero o incluso el cuarto. Mi condición es la siguiente: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){se abre la operación} Quiero preguntar si hay alguna función en MQL5 que "le diga a mi EA que hoy es el primer día de operación del mes"?

Encuentre el lugar donde se discute la apertura de una nueva barra y sustituya allí el período PERIOD_MN1

La apertura de un nuevo bar será el primer día de negociación del mes.

 
Aleksey Vyazmikin:

¿No puede identificar el primer día de negociación o no puede comprobar la fecha del día actual con el primer día de negociación del mes?

No puedo determinar el primer día de negociación del mes. Gracias por sus recomendaciones voy a experimentar)

 
Alexey Viktorov:

Encuentre donde se discute la apertura de una nueva barra y sustituya el periodo PERIOD_MN1

La apertura del nuevo bar será el primer día de negociación del mes.

Gracias. También experimentaré en esta dirección)

 

¿Por qué los autores utilizan los dos puntos para escribir? El código siguiente está simplemente lleno de dos puntos. Aunque el mismo::Sleep(5); se puede escribir sin dos puntos?

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:

¿Por qué los autores utilizan los dos puntos para escribir? El código siguiente está simplemente lleno de dos puntos. ¿Pero podemos escribir lo mismo::Sleep(5); sin dos puntos?

Resolución del contexto de la operación ( :: )

Cada función en el programa mql5 tiene su propio contexto de ejecución. Por ejemplo, la función del sistema Print() se ejecuta en el contexto global. Las funciones importadas se llaman en el contexto de la importación correspondiente. Las funciones-métodos de las clases tienen el contexto de la clase correspondiente. La sintaxis de la operación de resolución del contexto:

[nombre_contexto]::nombre_función(parámetros)

Si no hay un nombre de contexto, es una referencia explícita para utilizar un contexto global. Si no hay ninguna operación de resolución de contexto, la función se busca en el contexto más cercano. Si la función no está en el contexto local, se busca en el contexto global.

Además, la operación de resolución del contexto se utiliza para determinar la función miembro de una clase.

tipo Nombre_de_la_clase::nombre_de_la_función(parámetros_de_descripción)
{
// cuerpo de la función
}

Si un programa utiliza o puede utilizar en el futuro varias funciones del mismo nombre desde diferentes contextos de ejecución, puede producirse una ambigüedad. El orden en que se llaman las funciones sin especificar explícitamente el contexto:

  1. Métodos de clase. Si la función con el nombre dado no se especifica en la clase, se busca en el siguiente nivel.
  2. Funciones MQL5. Si no existe tal función en el idioma, estamos ante el siguiente nivel.
  3. Funciones globales definidas por el usuario. Si no existe dicha función, se está ante el siguiente nivel.
  4. Funciones importadas. Si la función no se encuentra entre las importadas, el compilador generará un error.

Para eliminar la ambigüedad de una llamada a una función, especifique explícitamente el ámbito de aplicación mediante la operación de resolución del contexto.

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

Operación de resolución del contexto ( ::: )

Supongo que el autor está acelerando el procesamiento del código. Bien hecho.

 

El historial de operaciones se dibuja en el gráfico, ¿cómo puedo desactivar este dibujo?


 
BillionerClub:

El historial de operaciones se dibuja en el gráfico, ¿cómo puedo desactivar dicho dibujo?


Servicio - Ajustes - Comercio - "Mostrar las operaciones en el gráfico en tiempo real".

Razón de la queja: