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

 
Tapochun:

1. determinar a hora de abertura da vela diária;

Determine o número de barras numéricas na TF que pretende (se quiser verificar o extremo do dia de 15 em 15 minutos - barras M15);

3. Receber os dados em altura para as barras numéricas;

3. No laço, comparar todos os valores de barras altas com a variável dayHigh para a vela do dia desejado (inicialmente dayHigh = 0);

4. Se elevado > dayHigh, armazena o novo valor na variável dayHigh;

Isto é compreensível, obrigado. Mas até agora é complicado para mim... ou melhor, ponto 2, é necessário fazer cálculos para cada TF e colocá-lo em intervalos para encontrar o número de castiçais?

Não podemos simplesmente descobrir a data do prazo actual e procurar em todos os valores a data, sem contar com o número de velas que passaram?

 
-Aleks-:

Isso é compreensível, obrigado. Mas até agora é complicado para mim... ou mais precisamente o ponto 2, é fazer um cálculo para cada TF e colocá-lo em intervalos para encontrar o número de castiçais?

Não podemos simplesmente descobrir a data do prazo actual e procurar em todos os valores a data, sem determinar o número de velas que passaram?

É fácil determinaro número de barras dentro do dia. Por exemplo, para um gráfico de 15 minutos. Dividir o número de minutos num dia por 15 (1440 / 15 = 96 barras ou outro PERÍODO_D1/PERIOD_M15 = 96)
 
Vitalii Ananev:
O número de barras intradiárias é simples de determinar. Por exemplo, para um gráfico de 15 minutos. Dividir o número de minutos num dia por 15 (1440 / 15 = 96 barras ou outro PERÍODO_D1/PERIOD_M15 = 96)
Não deve fazer isto! Nunca aceite como um facto que o número de bares num determinado dia na TF será o mesmo!
 
Vitalii Ananev:
É fácil de determinar o número de barras num dia. Por exemplo, para um gráfico de 15 minutos. Dividir o número de minutos num dia por 15 (1440 / 15 = 96 barras ou outro PERÍODO_D1/PERIOD_M15 = 96).

Compreendo isso matematicamente, mas como fazê-lo com funções - essa é a questão! Suponha que obtenho a hora actual usando o Tempo, e depois como

Penso em fazer um contador para cada TF, com uma nova barra, que será reposta no início de um novo dia, e reposta a zero para um dia máximo, e antes disso fazer uma comparação de cada barra, mas como programá-la?

 
Tapochun:
Não deve fazer isso! Nunca deve ser considerado como um facto que o número de bares num determinado dia pela TF será o mesmo!

Sim, por exemplo, pode haver uma hora de fecho antecipada numa sexta-feira.

Por isso tem de definir um dia, e tomar uma matriz para encontrar o máximo para o dia sem ter em conta o número de castiçais, como é que o faz?

 
-Aleks-:

Compreendo isso matematicamente, mas como fazê-lo com funções - essa é a questão! Suponha que obtenho a hora actual usando o Tempo, e depois como

Penso que devo fazer um contador para cada TF, com uma nova barra, que será reposta a zero no caso de um novo dia. Quero repor a zero por um dia no máximo e comparar cada barra antes disso; mas como devo programá-la?

Esta é aproximadamente a forma como podemos encontrar a primeira barra correspondente ao início do dia.

 datetime BeginDay = iTime(Symbol(), PERIOD_D1, iBarShift(Symbol(), PERIOD_D1, Time[NumberBar]));  

 int StartBar = iBarShift(Symbol(), 0, BeginDay);
 
Vitalii Ananev:

Esta é aproximadamente a forma de encontrar a primeira barra correspondente ao início do dia.

Por exemplo, temos este algoritmo.

Encontrámos a primeira barra - no momento da sua formação, esta barra será o ponto alto do dia. Depois, obtemos a próxima barra e verificamos o seu máximo, se for mais alta que a anterior, significa que é uma nova alta do dia. E assim por diante até à última barra do dia.

 
#property script_show_inputs
#property strict
//+------------------------------------------------------------------+
//| Входные параметры                                                |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES inpUserTimeframe=PERIOD_M15;   // Пользовательский ТФ
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Определяем время открытия текущего дня
   datetime open_D1=iTime(_Symbol,PERIOD_D1,0);

// Определяем номер первого сформированного бара по пользовательскому ТФ за текущий день
   int last_utf = iBarShift( _Symbol, inpUserTimeframe, open_D1, true );
   if( last_utf == -1 )
     {
      Alert(EnumToString(inpUserTimeframe)+" ОШИБКА #",GetLastError(),": номер бара не определен! "+TimeToStr(open_D1));
      return;
     }

// Определяем максимум дня
   double dayHigh=0;
   double high;
   int highNum=0;

   for(int i=1; i<=last_utf; i++) // Цикл по сформированным свечам за текущий день
     {
      high = iHigh( _Symbol, inpUserTimeframe, i );   // Максимум на i свече
      if( high > dayHigh )                            // Если максимум дня превышен
        {
         dayHigh = high;                              // Запоминаем новый максимум
         highNum = i;                                 // Запоминаем номер свечи
        }
     }

   Alert(EnumToString(inpUserTimeframe)+": максимум дня = ",DoubleToString(dayHigh,_Digits)," обнаружен на свече #",highNum);
  }
Arquivos anexados:
toAleks.mq4  3 kb
 
Tapochun, Vitalii Ananev- Obrigado! Vou agora tentar aplicar o que aprendi.
 
Tapochun:
Posso ver um indicador em vez de um guião? Estou a passar um mau bocado com todas estas matrizes de tempo... Gostaria de aprender com um exemplo.
Razão: