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

 
-Aleks-:

Alternativamente

if (StatTime==1)

 Time=iTime(NULL,1440,0);

 StatTime=0;

 }

       if(Time!=iTime(NULL,1440,0))

           {

  StatTime=1;

           } 

Penso que isto seria mais interessante

variante 1

bool NevDay()
  {
   static datetime StatTime;

   if(StatTime!=iTime(NULL,PERIOD_D1,0))
     {
      StatTime=iTime(NULL,PERIOD_D1,0);
      return(true);
     }
   return(false);
  }

versão 2

bool NevDay()
  {
   static int den;

   if(den!=Day())
     {
      den=Day();
      return(true);
     }
   return(false);
  }
 

Olá!

Há um código de funções "newt" e "dlt" que resolvem algum algoritmo. Por favor, diga-me, o que é este algoritmo? Que problema é que estas funções resolvem?

int    period=150;
int    shift_1=10;
double shift_2=3.0;
int    history=300;
double hpf[];
double HPF[];
//+------------------------------------------------------------------+
init()
  {
   SetIndexBuffer(0,HPF);
   ArrayResize(hpf,period);
   return(0);
  }
//+------------------------------------------------------------------+
start()
  {
   for(int bar=history; bar>=0; bar--)
     {
      for(int i=period-1;i>=0;i--)
         hpf[i]=Close[i];

      HPF[bar]=newt(hpf,shift_1,shift_2);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double newt(double x[],int pos,double n)
  {
   double r=x[pos],k=1;
   int l=MathCeil(n),i;
   if(pos+l>=ArraySize(x)) l=ArraySize(x)-pos-1;
   if(n==0) return(r);
   if(n<0) return(EMPTY_VALUE);
   for(i=1; i<=l; i++)
     {
      k*=n/i;
      r+=k*dlt(x,pos,i);
     }
   return(r);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double dlt(double x[],int pos,int d)
  {
   double r=0;
   int i, k=1, pod=pos+d, l=d>>1;
   if(pos>=ArraySize(x)) return(EMPTY_VALUE);
   if(pos+d>=ArraySize(x)) return(0);
   if(d%2>0)
      for(i=0; i<=l; i++,pos++,pod--)
        {
         r+=k*(x[pos]-x[pod]);
         k*=i-d;
         k/=i+1;
        }
   else
     {
      for(i=0; i<l; i++,pos++,pod--)
        {
         r+=k*(x[pos]+x[pod]);
         k*=i-d;
         k/=i+1;
        }
      r+=k*x[pos];
     }
   return(r);
  }
 

Estou a pedir a ajuda da comunidade.

// MQL4
// Последняя известная цена продажи (запрашиваемая цена) текущего инструмента. Для обновления необходимо использовать функцию RefreshRates().
Ask 

// MQL5
// 1
Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK)      // Возвращает лучшее предложение на покупку (Так в справочнике MQL5)
// 2
SymbolInfoTick(_Symbol,last_tick))              // Возвращает текущие цены  для указанного символа в переменной типа MqlTick
Ask = last_tick.ask								

Qual é a diferença entre o valor Ask obtido em duas funções MQL5?
Qual destas funções retorna um valor semelhante ao Ask da MQL4?

 
MikeZv:

Estou a pedir a ajuda da comunidade.

Qual é a diferença entre o valor Ask obtido em duas funções MQL5?
Qual destas funções retorna um valor semelhante ao Ask da MQL4 ?

Ambos os exemplos funcionam

 
MikeZv:

Estou a pedir a ajuda da comunidade.

Qual é a diferença entre o valor Ask obtido em duas funções MQL5?
Qual destas funções retorna um valor semelhante ao Ask da MQL4?

Antes de escrever algo (em termos de código), pense na forma mais económica e correcta de resolver o problema. No primeiro caso, apenas o preço Ask actual é solicitado, enquanto no segundo caso, toda a estrutura do tick é solicitada. Muito provavelmente (temos de o medir), o segundo caso funciona muito mais lentamente e se apenas for necessário perguntar o preço, não vale a pena obter a estrutura.
 
Alexey Kozitsyn:
Antes de escrever qualquer coisa (em termos de código), pense na forma mais eficiente e correcta de resolver o problema. No primeiro caso apenas o preço pedido actual é solicitado, no segundo caso toda a estrutura do tick é solicitada. Muito provavelmente (deve ser medido) o segundo caso funciona muito mais lentamente e se apenas for necessário perguntar o preço, não vale a pena obter a estrutura.
Estou a reescrever o meu Expert Advisor de MT4 para MT5. Antes de mais, preciso de saber como obter a estrutura chamada Ask in MQL4. Mais tarde pensarei em questões de desempenho. :)
 
MikeZv:
Estou actualmente a reescrever o meu Expert Advisor de MT4 para MT5. Antes de mais, preciso de saber como obter um Ask in MQL4. Pensarei em questões de desempenho mais tarde. :)
Lamento, não percebi logo a sua pergunta. Escrevi que estas duas variantes funcionam no MT4, enquanto no MT5 são análogas de ask e MarketInfo(_Symbol,SYMBOL_ASK); do antigo MT4
 
Sergey Gritsay:
Oh desculpe não ter percebido logo a sua pergunta, escrevi que ambas estas variantes funcionam no MT4, e no MT5 são análogas de ask e MarketInfo(_Symbol,SYMBOL_ASK); do antigo MT4

Havia duas variantes da MQL5 ...
E são análogos de "ask and MarketInfo(_Symbol,SYMBOL_ASK)do antigo MT4", será que o entendi correctamente?

 
MikeZv:

Havia duas variantes de MQL5 ...
E são análogos a "perguntar e MarketInfo(_Symbol,SYMBOL_ASK)do antigo MT4", será que o entendi correctamente?

Sim, é isso mesmo.

 
Sergey Gritsay:
Oh, desculpe não ter percebido logo a sua pergunta, escrevi que ambos funcionam na MT4, mas na MT5 são análogos de ask e MarketInfo(_Symbol,SYMBOL_ASK); da antiga MT4
SymbolInfoDouble(Symbol(),SYMBOL_ASK);