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

 
MakarFX #:

E se assim for

Demorei muito tempo para descobrir por que sua solução não causa um loop infinito. No entanto, ela também se executa 1 vez. Mas a solução acima me levou a criar um interruptor booleano.
ulong ms=0;
bool msFlag=0;

void OnTimer(){
  if(msFlag!=0 && GetMicrosecondCount()-ms > 100000){
    ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
    msFlag=0;
  }
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {
    if(id==CHARTEVENT_OBJECT_CLICK && sparam=="button1"){
      ms=GetMicrosecondCount();
      msFlag=1;
      } 
  }
Agora o código é executado somente quando o botão é pressionado. Mas o que acontece se o terminal funcionar por vários dias? A ajuda para outro método de retorno de tempo, diz que haverá um transbordo.

ulong ms=0;
bool msFlag=0;

int OnInit()
{
    EventSetMillisecondTimer(1);
    ...
}

void OnTimer(){
  if(msFlag!=0 && Seconds() > 20){
    ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
    msFlag=0;
  }
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {
    if(id==CHARTEVENT_OBJECT_CLICK && sparam=="button1"){
      msFlag=1;
      }
  }
O mesmo código, mas com Seconds() em vez de GetMicrosecondCount, não funciona. "Seconds() > 20" se maior - botão congela no estado "pressionado". Se mais baixo - funciona, mas tão rápido que é quase invisível (pisca).
 
Nerd Trader #:
Não conseguiu entender por muito tempo porque sua solução não causa um loop infinito. No entanto, ela também executa por conta própria 1 vez. Mas a solução acima me levou a criar um interruptor booleano.
Agora o código só é executado quando o botão é pressionado. Mas o que acontece se o terminal funcionar por vários dias? A ajuda para outro método de retorno de tempo diz que um transbordo ocorrerá.

O mesmo código, mas com Seconds() em vez de GetMicrosecondCount, não funciona. "Seconds() > 20" se maior - botão congela no estado "pressionado". Se mais baixo, funciona, mas tão rápido que é quase imperceptível (pisca).

Então é assim

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
      if(id==CHARTEVENT_OBJECT_CLICK && sparam=="button1")
         {ms=TimeCurrent();}
  }
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(ms!=0&&TimeCurrent()>ms)
     {
      ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
      ms=0;
     }
  }
//+------------------------------------------------------------------+
 
MakarFX #:

Então é assim

Não, não funciona assim, e se os segundos não funcionam, o TimeCurrent() ainda mais. Milesegundos é a única variante viável até agora, embora possa causar um transbordamento.
 
Nerd Trader #:
Não, não funciona dessa forma, se os segundos não funcionaram, então o TimeCurrent() ainda mais. Milesegundos é a única variante viável até agora, embora possa causar um transbordamento.
Funciona!
 
MakarFX #:
Funciona!
mmm não funciona para mim: o botão não se solta por si só.
 
Nerd Trader #:
mmm não funciona para mim: o botão não se solta por si só.
O mercado agora está fechado, a TimeCurrent() não muda. Verificação do criptograma, funciona nos fins de semana
 
MakarFX #:
O mercado agora está fechado, a TimeCurrent() não muda. Verifique o criptograma, está funcionando nos fins de semana
Crypto no meu corretor não negocia nos fins de semana. Experimentei-o no testador - não funciona.
 
Nerd Trader #:
A criptografia no meu corretor no fim de semana não é comercial. Experimentei-o no testador - não funciona.
Demonstração do A-Markets aberto. O temporizador não funciona no testador.
 

Saudações, estou recebendo uma matriz.

int arr[]={6,4,6,7,55,55,7,6,77,66,66,2,2};

Como posso mudá-lo para que todos os números estejam presentes, mas sem repetições?

int re[]={6,4,7,55,77,66,2};
 
Galim_V #:

Saudações, há uma série

Como posso mudar para que todos os números estejam presentes, mas sem repetição?

Você pode fazer isso sem usar bibliotecas

int arr[]= {6,4,6,7,55,55,7,6,77,66,66,2,2};
int re[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
  int AS=ArraySize(arr);
  int n=0;
  for(int i=0; i<AS; i++) {
    if(ArraySearch(re, arr[i])==-1) {
      n++;
      ArrayResize(re,n);
      re[n-1]=arr[i];
    }
  }
  ArrayPrint(re);
}
//===============================================================================================
//------------------------------ Функция удаляет копии с массива -------------------------------+
//===============================================================================================
int ArraySearch(int& m[], int e)
{
  for(int i=0; i<ArraySize(m); i++) {
    if(m[i]==e) return(i);
  }
  return(-1);
}
//+------------------------------------------------------------------+