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

 

Boa tarde. algo parou de processar a bandeira no mt4 depois de um tempo. apenas o mt começa a ignorá-la, você poderia me dizer por quê:

void OnTimer()
  {
//---
   //-----------------
   int tmeLeftC = PeriodSeconds() - (TimeCurrent()-Time[0]);
   int tmeLeftL = PeriodSeconds() - (TimeLocal()-Time[0]);
   
   
//флаг на вкл отправки   
   if ((sendflag==0) && (tmeLeftC >= 10)) 
      {
         sendflag=1;
      }
      

//Условия на отправку 
///------BAY 
   if ((sendflag==1) && (fNewBar()) && (TimeHour(Time[0]) >= StartH) && (TimeHour(Time[0]) <= EndH) && ((tmeLeftC <= SecondsPrevToServer) || (tmeLeftL <= SecondsPrevToServer)))
      {
         Print("Predict data");
         sendSig();
         Print("Send data");
         sendflag=0;
      }
Arquivos anexados:
 
itslek:

Boa tarde. algo parou de processar a bandeira no mt4 depois de algum tempo. apenas o mt começa a ignorá-la, você poderia me dizer por quê:


tente uma freqüência de temporizador de 100-200ms,
500ms é muito para pegar 1 segundo

e o castiçal pode abrir alguns segundos ou até mesmo um minuto depois

 
Ivan Ivanov:

Experimente:

... Ou você realmente precisa do exterior?


Obrigado. Parece ter ajudado.

Qual é a diferença entre entrada e externa?

 
Taras Slobodyanik:

tente uma freqüência de temporizador de 100-200ms,
500ms é muito longo para pegar 1 segundo

e a vela pode abrir alguns segundos ou até mesmo um minuto depois


portanto, o problema não é que não esteja pegando. Não há nada de errado com isso.

O problema é que a bandeira pára de funcionar e começa a enviar um sinal a cada 500ms, ignorando as condições da bandeira. Não entendo o que está acontecendo lá...

 
RichLux: Qual é a diferença entre entrada e externa?


 

Você pode me dizer como reiniciar o buffer quando um novo aparece, mas para que os dados anteriores no buffer não sejam apagados, mas exibidos no gráfico. Por alguma razão não posso zerar o buffer e quando aparece uma nova barra, novos dados são sobrepostos aos antigos dados acumulados. O que eu não descrevi corretamente no código.

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
  
   
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
}
 
itslek:

portanto, o problema não é que ele não esteja pegando. Não há nada de errado com isso.

o problema é que a bandeira pára de funcionar e começa a enviar um sinal a cada 500ms, ignorando as condições da bandeira. não entendo o que está acontecendo lá...


Seu timing é confuso, tanto local quanto de servidor ao mesmo tempo.
Eu pegaria um segundo mais ou menos como este:

//+------------------------------------------------------------------+
bool NewBar()
{
static bool flag=false;
static int bar=Bars;
static datetime lasttime=0;

if (!flag && Bars!=bar)
   {
   bar=Bars;
   lasttime=TimeLocal();
   flag=true;
   }
if (flag && TimeLocal()-lasttime>=pause) //pause - пауза после начала бара, например 59 сек
   {
   flag=false;
   return(true);
   }
return(false);
}
 

Olá, você pode me dizer se você precisa digitar iData para este indicador, não importa se é algum programa ou referência aos dados da barra, onde você pode especificar o período de tempo, por que os dados de outros períodos de tempo não são refletidos corretamente no atual diferente no gráfico do período de tempo, mas apenas no gráfico do período de tempo especificado? Obrigado.

 

Olá, talvez alguém responda e ajude, vou tentar novamente. Aqui está um post na página 367, tudo isso está exposto lá.

 
Novaja:

Olá, talvez alguém responda e ajude, vou tentar novamente. Aqui está um post, página 367,, está tudo aí.


Confira.

Razão: