Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 997

 

Saudações colegas programadores. Preciso da vossa ajuda. O Expert Advisor abre apenas um negócio no primeiro dia de negociação de um mês. Pode ser o primeiro ou o segundo ou o terceiro ou mesmo o quarto dia. A minha condição é assim: if(Day == 1 ||| Day == 2 ||| Day == 3 || Day == 4 ){comércio é aberto} Quero perguntar se existe alguma função na MQL5 que "diga à EA que hoje é o primeiro dia de negociação do mês"?

 
Kolya32:

Saudações colegas programadores. Preciso da vossa ajuda. O meu Expert Advisor abre apenas um negócio no primeiro dia de negociação de um mês, e pode ser o primeiro ou o segundo, o terceiro ou mesmo o quarto dia. A minha condição é assim: if(Day == 1 ||| Day == 2 ||| Day == 3 || Day == 4 ){comércio é aberto} Quero perguntar se existe alguma função na MQL5 que "diga à EA que hoje é o primeiro dia de negociação do mês"?

Não consegue encontrar o primeiro dia de negociação ou não consegue verificar a data do dia actual com o primeiro dia de negociação do mês?

É assim que pode descobrir com maior precisão a data de abertura do mês na actual TF(PERÍODO_CURSO pode, claro, ser alterado para qualquer dia, por exemplo).

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

Mas é melhor verificar cada funçãoiTime,Bars.

 
Kolya32:

Saudações colegas programadores. Preciso da vossa ajuda. O meu Expert Advisor abre apenas um negócio no primeiro dia de negociação de um mês, mas pode ser o primeiro ou o segundo, o terceiro ou mesmo o quarto dia. A minha condição é assim: if(Day == 1 ||| Day == 2 ||| Day == 3 || Day == 4 ){comércio é aberto} Quero perguntar se existe alguma função na MQL5 que "diga à EA que hoje é o primeiro dia de negociação do mês"?

Encontrar onde a abertura de um novo bar é discutida e substituir o período PERÍODO_MN1

A abertura de um novo bar será o primeiro dia de comércio do mês.

 
Aleksey Vyazmikin:

Não consegue identificar o primeiro dia de negociação ou não consegue verificar a data do dia actual com o primeiro dia de negociação do mês?

Não posso determinar o primeiro dia de negociação do mês. Obrigado pelas vossas recomendações Vou experimentar)

 
Alexey Viktorov:

Descubra onde é discutida a abertura de um novo bar e substitua o período PERÍODO_MN1

A abertura do novo bar será o primeiro dia de comércio do mês.

Obrigado. Também vou fazer experiências neste sentido)

 

Porque é que os autores utilizam colons para escrever? O código abaixo está simplesmente cheio de colons. Embora o mesmo::Sleep(5); pode ser escrito sem colónias?

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:

Porque é que os autores utilizam colons para escrever? O código abaixo está simplesmente cheio de colons. Mas podemos escrever o mesmo::Sleep(5); sem colónias?

Resolução de contexto de operação ( :: )

Cada função em programa mql5 tem o seu próprio contexto de execução. Por exemplo, a função do sistema Print() é executada no contexto global. As funções importadas são chamadas no contexto da importação correspondente. Funções-métodos de classes têm o contexto da classe correspondente. A sintaxe da operação de resolução do contexto:

[nome_do_contexto]::nome_da_função(parâmetros)

Se não houver um nome de contexto, é uma referência explícita à utilização de um contexto global. Se não houver uma operação de resolução de contexto, a função é procurada no contexto mais próximo. Se a função não estiver no contexto local, é pesquisada no contexto global.

Além disso, a operação de resolução de contexto é utilizada para determinar a função de membro de uma classe.

tipo Class_name::function_name(description_parameters)
{
// corpo funcional
}

Se um programa utilizar ou puder utilizar no futuro várias funções com o mesmo nome de diferentes contextos de execução, pode ocorrer ambiguidade. A ordem em que as funções são chamadas sem especificar explicitamente o contexto:

  1. Métodos de classe. Se a função com o nome dado não estiver especificada na classe, está à procura dela no nível seguinte.
  2. Funções da MQL5. Se não existir tal função na língua, estamos a olhar para o nível seguinte.
  3. Funções globais definidas pelo utilizador. Se não existe tal função, está a olhar para o nível seguinte.
  4. Funções importadas. Se a função não for encontrada entre as importadas, o compilador irá gerar um erro.

Para eliminar a ambiguidade de uma chamada de função, especificar explicitamente o âmbito utilizando a operação de resolução de contexto.

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

Operação de resolução de contexto ( :::: )

Presumo que o autor está a acelerar o processamento do código. Muito bem feito.

 

O histórico comercial está desenhado no gráfico, como é que desactivo este desenho?


 
BillionerClub:

O histórico comercial está desenhado no gráfico, como posso desactivar esse desenho?


Serviço - Definições - Negociar - "Mostrar negociações no gráfico em tempo real".