MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1617

 
MakarFX # :

ve öyle olsa bile

Uzun zamandır çözümünüzün neden sonsuz bir döngüye neden olmadığını anlayamadım. Ancak, kendi başına da 1 kez çalışır. Ancak yukarıdaki çözüm, bir boole anahtarının oluşturulmasını sağladı.
 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 ;
      } 
  }
Artık kod yalnızca düğmeye tıklandığında yürütülür. Ancak terminal birkaç gün çalışırsa ne olur? Başka bir zaman döndürme yönteminin yardımı, bir taşma olacağını söylüyor.

 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 ;
      }
  }
Aynı kod, ancak GetMicrosecondCount yerine Seconds() ile çalışmıyor. "Saniye() > 20" daha yüksekse - düğme "basılı" durumda kalır. Daha düşükse çalışır, ancak o kadar hızlıdır ki neredeyse algılanamaz (yanıp söner).
 
Nerd Trader # :
Uzun zamandır çözümünüzün neden sonsuz bir döngüye neden olmadığını anlayamadım. Ancak, kendi başına da 1 kez çalışır. Ancak yukarıdaki çözüm, bir boole anahtarının oluşturulmasını sağladı.
Artık kod yalnızca düğmeye tıklandığında yürütülür. Ancak terminal birkaç gün çalışırsa ne olur? Başka bir zaman döndürme yönteminin yardımı, bir taşma olacağını söylüyor.

Aynı kod, ancak GetMicrosecondCount yerine Seconds() ile çalışmıyor. "Saniye() > 20" daha yüksekse, düğme "basılı" durumda kalır. Daha düşükse çalışır, ancak o kadar hızlıdır ki neredeyse algılanamaz (yanıp söner).

Sonra bu yüzden

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

Sonra bu yüzden

Hayır, bu şekilde çalışmaz, eğer saniyelerle çalışmadıysa, TimeCurrent() ile daha da fazla. Milisaniye ile, taşma tehdidine rağmen şimdiye kadar tek çalışma seçeneği.
 
Nerd Trader # :
Hayır, bu şekilde çalışmaz, eğer saniyelerle çalışmadıysa, TimeCurrent() ile daha da fazla. Milisaniye ile, taşma tehdidine rağmen şimdiye kadar tek çalışma seçeneği.
İşler!
 
MakarFX # :
İşler!
mmm bende çalışmıyor: düğme kendi kendine açılmıyor.
 
Nerd Trader # :
mmm bende çalışmıyor: düğme kendi kendine açılmıyor.
Artık piyasa kapanmıştır, TimeCurrent() değişmez. Kriptayı kontrol et, hafta sonları çalışıyor
 
MakarFX # :
Artık piyasa kapanmıştır, TimeCurrent() değişmez. Kriptayı kontrol et, hafta sonları çalışıyor
Kripto, hafta sonları aracı kurumda işlem görmez. Test cihazında denendi - çalışmıyor.
 
Nerd Trader # :
Brokerim hafta sonları kripto ticareti yapmıyor. Test cihazında denendi - çalışmıyor.
Demo A-Markets'ı açın. Zamanlayıcı test cihazında çalışmıyor.
 

Selamlar! bir dizi alıyorum

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

tüm sayıların mevcut olması ancak tekrar olmaması için nasıl değiştirilir?

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

Selamlar! bir dizi var

tüm sayıların mevcut olması ancak tekrar olmaması için nasıl değiştirilir?

Kütüphaneler olmadan mümkün mü?

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