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

 
vladzeit:

Obrigado pelo exemplo.

Poderia por favor esclarecer... se bem entendi.

Com isto=(data/hora)OrderGetInteger. estamos a dizer à OrderGetInteger para tomar o tipo dedata/horaexplícita.?

Esta regra aplica-se a todas as funções que não têm um tipo explícito ou que não correspondem ao tipo da variável a ser atribuída? ou é apenas um caso especial?

Quero compreender se isto é uma regra ou apenas um caso especial a recordar.

Não se trata de um caso especial. Se escrever um valor de um tipo diferente numa variável de um tipo, o compilador avisá-lo-á sobre isso. E cabe-lhe a si decidir de que variável tirar os dados.

No seu caso - ao devolver um valor de data/hora explícito de uma função com o tipo longo, claro, é seguro e deve especificar explicitamente o tipo de valor que obtém da função.

Mas se se levar um valor duplo para int-variable, então cabe-lhe a si compreender se os dados não serão perdidos por tal tarefa. Se souber com certeza que o valor de retorno caberá em int, então especifique int explicitamente, se não souber, então tome-o como uma variável dupla.

 
Artyom Trishkin:

Este não é um caso especial. Se escrever um valor de outro tipo numa variável de um tipo, o compilador avisá-lo-á sobre isso. E cabe-lhe a si decidir de que variável tirar os dados.

No seu caso - ao devolver um valor de data/hora explícito de uma função com o tipo longo, é claro que é seguro e deve especificar explicitamente o tipo do valor que obtém da função.

Mas se se tomar um valor duplo para int-variable, então deve compreender por si próprio se haverá ou não perda de dados durante tal atribuição. Se souber com certeza que o valor devolvido caberá em int, especifique int explicitamente, se não souber, leve-o para uma variável dupla.

Obrigado pela sua resposta detalhada. Já está.

 

(Boa tarde a todos vós)))


Já dominei MT4, mas MT5 .... não compreendo((( Não há muitos exemplos, e aqueles que não explicam o que preciso.

Aconselhar como utilizar o MT5 com algumas amostras do código MT4 ou dar-me alguns links para os indicadores com casos semelhantes.


1.

if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)


2.

while(A<1)
  {
   ObjectDelete("MB");
   OP=iOpen(NULL,Timeframe,br);
   CL=iClose(NULL,Timeframe,br);
 if(OP>CL)
   bear=(OP-CL)/_Point;
 if(SizeCandles*FactorCandleы <= bear)
   A=2;
 if(br>iBars(NULL,Timeframe))
  {
   Lab("MB", " No Bear candle", 4, 510, 1, clrWhite);
   break;
  }
   br++;
  }


3. não entendo como fazer comparação de elementos com o cabo do iMa. Eu conheço as estruturas!!! Experimentei-o, mas MT5 não é tão claro como MT4.

   
 for(int i=limit; i>0 && !IsStopped(); i--)
   {
   ma1=iMA(NULL,Period(),Ma1,0,MAMethod1,MAPrice1,i);
   ma2=iMA(NULL,Period(),Ma2,0,MAMethod2,MAPrice2,i);
   ma3=iMA(NULL,Period(),Ma3,0,MAMethod3,MAPrice3,i);
   ma4=iMA(NULL,Period(),Ma4,0,MAMethod4,MAPrice4,i);
   MA=iMA(NULL,Period(),MAPeriod,0,MAMethod,MAPrice,i);
//----
 if(filtercase==true && xPer==Period())
  {
//--- High signal
 if(Open[i]<Close[i] && MA>Open[i] && MA<Close[i] && ma1>ma2 && ma1<ma3 && MA<ma4)  
   ExtLineBuffer1[i]=High[i]+shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer1[i]=0.0;
//--- Low signal
 if(Open[i]>Close[i] && MA<Open[i] && MA>Close[i] && ma1<ma2 && ma1>ma3 && MA>ma4)  
   ExtLineBuffer2[i]=Low[i]-shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer2[i]=0.0;
  } 
 

As diferenças gerais de programação em MT5 já são entendidas! Mas ainda não consigo programar (os dados não somam)))))

É importante para mim OUVIR na minha cabeça estas partes e módulos de MT5.... Compreendo a lógica rapidamente em MT4, mas MT5 apenas "cubos" ....

Obrigado pelas dicas))))

 
Por favor, mude o lote fixo do meu robot para % lote. O código está na minha mensagem privada.
 
Sprut112:
Por favor, mude o lote fixo do meu robot para % lote. Código em privado.

Freelance.

 
kopeyka2:

(Boa tarde a todos vós)))


Já dominei MT4, mas MT5 .... não compreendo((( Não há muitos exemplos, e aqueles que não explicam o que preciso.

Aconselhar como utilizar o MT5 com algumas amostras do código MT4 ou dar-me alguns links para os indicadores com casos semelhantes.


1.


2.


3. não entendo como fazer comparação de elementos com o cabo do iMa. Eu conheço as estruturas!!! Experimentei-o, mas MT5 não é tão claro como MT4.

As diferenças gerais de programação em MT5 já são entendidas! Mas ainda não consigo programar (os dados não somam)))))

É importante para mim OUVIR na minha cabeça estas partes e módulos de MT5.... Compreendo a lógica rapidamente em MT4, mas em MT5 apenas "dados"....

Obrigado pelas dicas))))

Primeiro, leia atentamente a documentação. A secção"Acesso a séries cronológicas e indicadores".

Deve ser claro como obter a hora, "colocá-la" na estrutura, e depois obter hora e minuto separadamente.

Há também o CopyBuffer para obter valores indicadores pelo seu cabo.

Se ainda tiver dúvidas...


 
kopeyka2:

(Boa tarde a todos vós)))


Já dominei MT4, mas MT5 .... não compreendo((( Não há muitos exemplos, e aqueles que não explicam o que preciso.

Aconselhar como utilizar o MT5 com algumas amostras do código MT4 ou dar-me alguns links para os indicadores com casos semelhantes.


1.


2.


3. não entendo como fazer comparação de elementos com o cabo do iMa. Eu conheço as estruturas!!! Experimentei-o, mas MT5 não é tão claro como MT4.

As diferenças gerais de programação em MT5 já são entendidas! Mas ainda não consigo programar (os dados não somam)))))

É importante para mim OUVIR na minha cabeça estas partes e módulos de MT5.... Em MT4 entendo a lógica rapidamente, mas em MT5 apenas "cubos" ....

Obrigado pelas dicas))))

Se precisar de comparar várias séries cronológicas de um período de tempo, trabalhe com um array comoMqlRates-> e useCopyRates para preencher este array.

É conveniente armazenar a hora numa estruturaMqlDateTime-> usarTimeToStruct para converter a hora dadata para a estruturaMqlDateTime.

Agora o seu exemplo 1 será parecido com este:

//+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
#property script_show_inputs
//--- input parameters
int InpBarTime=3; // Bar where we compare the time
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);

   int start_pos  =0;                           // start position 
   int count=(InpBarTime<10)?10:InpBarTime+1;   // data count to copy 

   int result=CopyRates(Symbol(),Period(),start_pos,count,rates);
   if(result!=count)
     {
      Print("Ordered: ",IntegerToString(count),", received ",IntegerToString(result));
     }

//--- example 1
// if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)
   MqlDateTime SDateTime;
   TimeToStruct(rates[InpBarTime].time,SDateTime); // Converts a value of datetime type into a structure variable MqlDateTime
   if(Period()<=PERIOD_H4 && SDateTime.hour==0 && SDateTime.min==0)
     {

     }
  }
//+------------------------------------------------------------------+
Arquivos anexados:
Test_en.mq5  3 kb
 
Por favor, digam-me se existe uma regra.
Em mql5 uma e a mesma tarefa pode ser resolvida de muitas maneiras.
Se eu me referir a um exemplo de uma classe num código, por exemplo: CSymbolInfo. m_symbol.Ask()... e assim por diante.
e no mesmo código atribuo um valor Ask sem referência à classe. por exemplo
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digitos);

Pergunta: isto causa erros ou é normal dentro dos limites de um código ou mesmo de uma função?

 
kopeyka2:

(Boa tarde a todos vós)))


Já dominei MT4, mas MT5 .... não compreendo((( Não há muitos exemplos, e aqueles que não explicam o que preciso.

Aconselhar como utilizar o MT5 com algumas amostras do código MT4 ou dar-me alguns links para os indicadores com casos semelhantes.


1.


2.


3. não entendo como fazer comparação de elementos com o cabo do iMa. Eu conheço as estruturas!!! Experimentei-o, mas MT5 não é tão claro como MT4.

As diferenças gerais de programação em MT5 já são entendidas! Mas ainda não consigo programar (os dados não somam)))))

É importante para mim OUVIR na minha cabeça estas partes e módulos de MT5.... Em MT4 entendo a lógica rapidamente, mas em MT5 apenas "cubos" ....

Obrigado pelas dicas))))

Trabalho com indicadores - utilizando o códigoMA Force como exemplo

Passo 1: a nível de programa global declarar a variável handle_iMA, que armazenará o manípulo indicador

int    handle_iMA;                           // variable for storing the handle of the iMA indicator

Passo 2: criar um indicador no OnInit() e devolver a variávelhandle_iMA

//--- create handle of the indicator iMA
   handle_iMA=iMA(m_symbol.Name(),Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Inp_MA_period),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

Passo 3: fazer um pedido em OnTick() - copiar uma certa quantidade de dados(contagem) do indicador para a matrizma[].

   double ma[],force[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(force,true);
   int start_pos=0,count=InpTrendBars+3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) || 
      !iGetArray(handle_iForce,0,start_pos,count,force))
     {
      PrevBars=0;
      return;
     }

Passo 4: trabalhar com a matriz de dados indicadores e comparar os seus elementos:

   bool trend_up=(ma[1]>ma[2]);
   bool trend_down=(ma[1]<ma[2]);
 
vladzeit:
Por favor, digam-me se existe uma regra.
Em mql5 uma e a mesma tarefa pode ser resolvida de muitas maneiras.
Se eu me referir a um exemplo de uma classe num código, por exemplo: CSymbolInfo. m_symbol.Ask()... e assim por diante.
e no mesmo código atribuo um valor Ask sem referência à classe. por exemplo
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digitos);

Pergunta: isto causa erros ou é normal dentro dos limites de um código ou mesmo de uma função?

É melhor não confundir e usar uma abordagem: ou a classe comercialCSymbolInfo ou funções de sistema como SymbolInfoXXXX.

Razão: