Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1617

 
MakarFX #:

Et si oui

Il m'a fallu beaucoup de temps pour comprendre pourquoi votre solution ne provoque pas une boucle infinie. Néanmoins, il s'exécute aussi 1 fois. Mais la solution ci-dessus m'a incité à créer un interrupteur booléen.
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;
      } 
  }
Maintenant le code n'est exécuté que lorsque le bouton est pressé. Mais que se passe-t-il si le terminal fonctionne pendant plusieurs jours ? Dans l'aide pour une autre méthode de retour du temps, il est dit qu'il y aura un débordement.

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;
      }
  }
Le même code mais avec Seconds() au lieu de GetMicrosecondCount ne fonctionne pas. "Seconds() > 20" si plus élevé - le bouton se fige dans l'état "pressé". Si elle est inférieure, elle fonctionne, mais si rapidement qu'elle passe presque inaperçue (clignotement).
 
Nerd Trader #:
Je n'ai pas compris pendant longtemps pourquoi votre solution ne provoque pas une boucle infinie. Néanmoins, il s'exécute aussi tout seul 1 fois. Mais la solution ci-dessus m'a incité à créer un interrupteur booléen.
Maintenant le code n'est exécuté que lorsque le bouton est pressé. Mais que se passe-t-il si le terminal fonctionne pendant plusieurs jours ? L'aide pour une autre méthode de retour du temps indique qu'un débordement se produira.

Le même code mais avec Seconds() au lieu de GetMicrosecondCount ne fonctionne pas. "Seconds() > 20" si plus élevé - le bouton se fige dans l'état "pressé". Si elle est inférieure, elle fonctionne, mais si rapidement qu'elle est presque invisible (elle clignote).

Alors c'est comme ça

//+------------------------------------------------------------------+
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 #:

Alors c'est comme ça

Non, cela ne fonctionne pas ainsi, et si les secondes ne fonctionnent pas, TimeCurrent() d'autant plus. Mileseconds est la seule variante utilisable jusqu'à présent, bien qu'elle puisse provoquer un débordement.
 
Nerd Trader #:
Non, ça ne marche pas comme ça, si les secondes ne marchent pas, alors TimeCurrent() d'autant plus. Mileseconds est la seule variante utilisable jusqu'à présent, bien qu'elle puisse provoquer un débordement.
Ça marche !
 
MakarFX #:
Ça marche !
mmm ne fonctionne pas pour moi : le bouton ne se débloque pas tout seul.
 
Nerd Trader #:
mmm ne fonctionne pas pour moi : le bouton ne se débloque pas tout seul.
Le marché est maintenant fermé, TimeCurrent() ne change pas. Vérifiez la cryptographie, elle fonctionne le week-end.
 
MakarFX #:
Le marché est maintenant fermé, TimeCurrent() ne change pas. Vérifiez la cryptographie, elle fonctionne le week-end.
Chez mon courtier, le Crypto ne se négocie pas le week-end. J'ai essayé dans le testeur - ça ne marche pas.
 
Nerd Trader #:
Le Crypto chez mon courtier ce week-end ne se négocie pas. J'ai essayé dans le testeur - ça ne marche pas.
Ouvrez la démo de A-Markets. La minuterie ne fonctionne pas dans le testeur.
 

Salutations, je reçois un tableau.

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

Comment puis-je le modifier pour que tous les chiffres soient présents mais sans répétitions ?

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

Salutations, il y a un tableau

Comment puis-je le modifier pour que tous les chiffres soient présents, mais sans répétition ?

Vous pouvez le faire sans utiliser les bibliothèques

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);
}
//+------------------------------------------------------------------+
Raison: