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

 
C-4:
O que quer dizer com "alinhar"? Normalizar a mantissa pelo número de casas decimais? - É para isso que serve a função NormalizeDouble. Se houver outra coisa, descreva-a com mais detalhe.

A input qualquer duplo positivo, a output arredondado para o preço real que pode ser a este instrumento.

Se a etapa de preço for 0,25, então arredondar para 0,25. Mais ou menos como isto:

double RoundPrice(const double price)
{
   if(price<=0) return(-1);
   double tick_size=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE);
   double p=round(price/tick_size);
   return(NormalizeDouble(p*tick_size,_Digits));
}

Mas dito isto, se houver uma compensação (como 0,13; 0,38; 0,63; 0,88), então conta. Então:

na entrada 1.0 na saída 1.13;

1,25 como entrada e 1,38 como saída;

1,5 ---> 1,63...

Ao nível do API, isto poderia ser codificado em alguns comandos de linguagem de montagem e é claramente uma função básica. Pensei que houvesse um =/

 
como fazer uma actualização do novo edifício através de Live update. Onde está o Live update
 
Newalligator:
como fazer uma actualização do novo edifício através de Live update. Onde está esta actualização em directo
Deve abrir uma conta demo no servidor MetaQuotes-Demo e ligar-se a ele ocasionalmente para verificar as actualizações. Como abrir uma conta de demonstração no servidor MetaQuotes-Demo
 
Obrigado pela resposta, eu negoceio ao vivo e o MT5 está sempre ligado. Se o software diz que preciso de o actualizar, tudo bem. Se não, onde está a actualização ao vivo?
 
Newalligator:
Obrigado pela resposta, eu negoceio ao vivo e o MT5 está sempre ligado. Se o programa em si me incita a actualizar, é bom, mas se não, onde está essa actualização em directo?
Quando se ligar à sua conta no servidor MetaQuotes-Demo, o MetaTrader verificará automaticamente a existência de actualizações. Se houver uma actualização, a nova versão será descarregada automaticamente.
 

Bom dia a todos! Há um problema - não posso usar as leituras de outro indicador personalizado num indicador personalizado. Tenho quase a certeza que o estou a fazer mal, mas colarei o código de qualquer forma:

int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {
   
   if(rates_total < iPeriod ) {
      return(0);
   }
   
   int first;
   
   if ( prev_calculated == 0 ) {
      first = iPeriod + begin;
   } else {
      first = prev_calculated - 1;
   }
      
   // Пользовательский индикатор ROC для EURUSD   
   double aRocRatesEURUSD[];
   int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");   
   CopyBuffer(iRocHandleEURUSD, 0, 0, rates_total, aRocRatesEURUSD);

   for(int bar = first; bar < rates_total; bar++) {

Neste código, o tampão do indicador da Taxa de Alterações(aRocRatesEURUSD) não está disponível. Não compreendo como ligar correctamente este indicador, por favor ajude-me a compreendê-lo.

 
jommerbot:

Bom dia a todos! Há um problema - não posso usar as leituras de outro indicador personalizado num indicador personalizado. Tenho quase a certeza que o estou a fazer mal, mas colarei o código de qualquer forma:

Neste código, o tampão do indicador da Taxa de Alterações(aRocRatesEURUSD) não está disponível. Não consigo compreender como ligar correctamente este indicador, por favor ajude-me a compreendê-lo.

Os cabos indicadores devem ser declarados no OnInit():

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
// Пользовательский индикатор ROC для EURUSD   
   double aRocRatesEURUSD[];
   int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");   
  }
Caso contrário, cria-se um novo indicador personalizado cada vez que se chama OnCalculate().
 
barabashkakvn:

Os cabos indicadores devem ser declarados no OnInit():

Isto também não funciona. A matriz tampão acaba por ficar vazia ou cheia de valores à esquerda.
 
jommerbot:
Isto também não funciona. Como resultado, a matriz com o tampão está vazia ou cheia de valores esquerdos.
No entanto, é correcto declarar as pegas dos indicadores no OnInit(). Outra questão é porque precisa de escrever cada vez que chega um novo tick (a função OnCalculate())
rates_total,      // размер входных таймсерий

para o tampão

aRocRatesEURUSD

? Isto pode realmente atrasar o terminal. E além disso, esta é uma história muito profunda.

Penso que achará interessante ler o artigoThe Principles of Economical Recalculation of Indicators

E leia também a ajuda para a função OnCalculate().

 

OK, mesmo no caso mais simples, não funciona:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  Red

double ExtLineBuffer[];   
int iRocHandleEURUSD;  
int iPlotShift = 0;
int iPeriod = 6;
 
void OnInit() {
   SetIndexBuffer(0, ExtLineBuffer, INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_SHIFT, iPlotShift);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, iPeriod - 1);
   
   int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");    
   if( iRocHandleEURUSD == INVALID_HANDLE )
   {
      Print("Не удалось получить хендл индикатора ROC EURUSD");  
   }
}

int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {
   
   if(rates_total < iPeriod ) {
      return(0);
   }
   
   int first;
   double aRocRatesEURUSD[]; 
   
   if ( prev_calculated == 0 ) {
      first = iPeriod + begin;
   } else {
      first = prev_calculated - 1;
   }
   
   for(int bar = first; bar < rates_total; bar++) {
      CopyBuffer(iRocHandleEURUSD, 0, bar, 1, aRocRatesEURUSD);
      Print(aRocRatesEURUSD[ 0 ]);   
      ExtLineBuffer[ bar ] = NormalizeDouble(aRocRatesEURUSD[ 0 ], SYMBOL_DIGITS);
   }
     
   return(rates_total);
}

Não compreendo onde está o meu erro. Copiar o mesmo tampão indicador em EA e trabalhos de script, mas não em indicador. O manípulo indicador é rubricado sem erros.