Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 804

 
Andrey Sokolov:

Você pode me dizer o que significa o verbete

int i,limit=prev_calculated==0 ? tarifas_total-1 : tarifas_total-prev_calculadas;

"==" , "?" , ": "

?

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
É simplesmente horrível! Se eu ainda puder rastrear a lógica nos Consultores Especialistas, corrigir algumas coisas, adicionar mais algumas... Eu não entendo nada do código de indicadores(
 
prom18:

Obrigado, Igor. Não o declarei corretamente. O indicador é calculado e desenhado para um número especificado de barras (50 neste caso) e em uma janela separada. Não precisa do preço aberto, mas da primeira barra do dia para indicar o MA. Mas de qualquer forma, obrigado.

leia SetIndexDrawBegin() - esta é uma restrição para desenhar o buffer indicador, nunca utilizado

ou, no meu exemplo, você pode fazer isso dessa maneira:

input int BarCount = 50;
....

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
   static double dayopen=0.0;
   static int lastday=0;
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      dayopen=0.0;
      lastday=0;
     }
   else limit=rates_total-prev_calculated;
   limit = fmin(BarCount,limit);
   for(i=limit; i>=0; i--)
     {
      if(TimeDay(time[i])!=lastday)
        {
         dayopen=open[i];
         lastday= TimeDay(time[i]);
        }
      Label1Buffer[i]=dayopen;
     }
   return(rates_total);
  }

ou seja, restringir o cálculo dos buffers indicadores à configuraçãoBarCount

 
Andrey Sokolov:

Você pode me dizer o que significa o verbete

int i,limit=prev_calculated==0 ? tarifas_total-1 : tarifas_total-prev_calculadas;

"==" , "?" , ": "

?

https://docs.mql4.com/ru/basis/operators/ternary


Eu reescrevi meu exemplo, na primeira versão ele não funcionaria corretamente ao trocar os TFs, você precisa reiniciar o dia aberto e o último dia, eles são descritos com o modificador estático

Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Artyom Trishkin:

Retornar também o índice no parâmetro de função passado por referência

Devolvido:

duplo GetPatt5barsDN()
{
duplo baixo3 = 0;
índice int = 0;
for(int i=1; i<20; i++)
{
se
((Fechar[i] > Abrir[i]) &&
(Fechar[i+1] > Abrir[i+1]) &&
(Fechar[i+2] > Abrir[i+2]) && //Baixo[i+2] é necessário nesta vela
(Fechar[i+3] < Abrir[i+3]) &&
(Fechar[i+4] < Abrir[i+4])

low3 = Low[i+2];
índice = i+2;
}

retorno(baixo3);
retorno(índice);
}


O que devo fazer a seguir?

 
Sfinks35:

Devolvido:

duplo GetPatt5barsDN()
{
duplo baixo3 = 0;
índice int = 0;
for(int i=1; i<20; i++)
{
se
((Fechar[i] > Abrir[i]) &&
(Fechar[i+1] > Abrir[i+1]) &&
(Fechar[i+2] > Abrir[i+2]) && //Baixo[i+2] é necessário nesta vela
(Fechar[i+3] < Abrir[i+3]) &&
(Fechar[i+4] < Abrir[i+4])

low3 = Low[i+2];
índice = i+2;
}

retorno(baixo3);
retorno(índice);
}


O que devo fazer a seguir?

Isso não é maneira de recuperá-lo.


Assim.

int GetPatt5barsDN()
      {
       double low3 = 0;
       int index = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          } 
           
          return(index);
      }


Mais

double min = Low[GetPatt5barsDN()];
 
Sfinks35:

Devolvido:

duplo GetPatt5barsDN()
{
duplo baixo3 = 0;
índice int = 0;
for(int i=1; i<20; i++)
{
se
((Fechar[i] > Abrir[i]) &&
(Fechar[i+1] > Abrir[i+1]) &&
(Fechar[i+2] > Abrir[i+2]) && //Baixo[i+2] é necessário nesta vela
(Fechar[i+3] < Abrir[i+3]) &&
(Fechar[i+4] < Abrir[i+4])

low3 = Low[i+2];
índice = i+2;
}

retorno(baixo3);
retorno(índice);
}


O que devo fazer a seguir?

Onde está o retorno do índice através de um parâmetro por referência?

E por favor, insira o código corretamente:


 
Existe alguma função na MQL4 que possa detectar se uma cotação é de 5 ou 4 casas decimais, quantas casas decimais um ativo tem, por exemplo EURJPY tem 2 casas decimais, EURUSD tem 4 casas decimais?
 
Seric29:
Existe alguma função na MQL4 que possa identificar cotações de um tipo de conta, como 5 ou 4 casas decimais, quais são as formas de identificar quantos zeros um ativo tem depois do ponto decimal, por exemplo EURJPY tem 2 casas decimais, EURUSD tem 4 casas decimais?

https://docs.mql4.com/ru/predefined/digitsvar

Digits - Предопределенные переменные - Справочник MQL4
Digits - Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Digits - Предопределенные переменные - Справочник MQL4
 
Artyom Trishkin:

Onde está o retorno do índice através de um parâmetro por referência?

E por favor, insira o código corretamente:


Boa tarde!
Parece que estou conseguindo agora mesmo:
double GetPatt5barsDN(int &index)
      {
       double low3 = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          }           
     return(low3);
     }

Mas na compilação ele gera um aviso: possível perda de dados devido à conversão do tipo on line:
índice = GetPatt5barsDN(índice);

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index);
   index = GetPatt5barsDN(index);
   Print("low3= ", low3);
   Print("index= ", index);

Não há erros no cabeçalho da função (ou na própria função) durante a compilação.