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

 
Taras Slobodyanik # :

IsTesting yerine IsVisualMode kullanmak daha iyidir

IsVisualMode ve IsTesting olmadan mümkündür

Soru başka bir şeyle ilgiliydi.

 

sihir hakkında=rand()

yerel terver uzmanlarının hep bir ağızdan "Jobtv" diye haykırmamaları garip..

Burada programlama okuduğun için - sıçmanın ne kadar sürdüğünü kontrol et. Aşağı yukarı gerçek koşullarda kopya büyü elde etme şansı nedir? ve böyle bir tırmık üzerine basmaya değer mi

 
Valeriy Yastremskiy # :

Bu da mümkün. Maç şansı düşük.

Ayrıca bir maç için ek bir kontrol var, yani her şey yolunda.

 
Maxim Kuznetsov # :

sihir hakkında=rand()

yerel terver uzmanlarının hep bir ağızdan "Jobtv" diye haykırmamaları garip..

Burada programlama okuduğun için - sıçmanın ne kadar sürdüğünü kontrol et. Aşağı yukarı gerçek koşullarda kopya büyü elde etme şansı nedir? ve böyle bir tırmık üzerine basmaya değer mi

Yardımdan:
"Tekrarlanmayan bir dizi elde ettiğinizden emin olmak için MathSrand(GetTickCount()) çağrısını kullanın, çünkü GetTickCount() işletim sistemi başlangıcından beri artıyor ve 49 gün boyunca tekrarlanmayacak"

 
MakarFX # :
oh, işe yarıyor, teşekkürler... ahah, ancak şimdi düğmedeki her tıklamada durmadan 150 sipariş açıyorum...

öyle yaptı

 if (IsTesting()) 
     {
       if ( ObjectGetInteger ( 0 , "button1" , OBJPROP_STATE )== true )
        {
          ...
           ObjectSetInteger ( 0 , "button1" , OBJPROP_STATE , false );
        }
     }
 
Maxim Kuznetsov # :

yerel terver uzmanlarının hep bir ağızdan "Jobtv" diye haykırmamaları garip..

ikna et, tartış - kimse istemiyor, bir kişi çalışsın, çalışmasına izin ver .. her şeye gelecek

 
Maxim Kuznetsov # :

sihir hakkında=rand()

yerel terver uzmanlarının hep bir ağızdan "Jobtv" diye haykırmamaları garip..

///

Peki, ne kadar yapabilirsin?

 
Nerd Trader # :
oh, işe yarıyor, teşekkürler... ahah, ancak şimdi düğmedeki her tıklamada durmadan 150 sipariş açıyorum...

öyle yaptı

bu şekilde yap

 if (IsTesting()) 
     {
       if ( ObjectGetInteger ( 0 , "button1" , OBJPROP_STATE )== true )
        {
           ObjectSetInteger ( 0 , "button1" , OBJPROP_STATE , false );
           ...
        }
     }
 

Bu konudaki komut dosyası

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
enum EResult {Ok,AllocError};

template < typename T>
EResult GetRepeat( const T &arr[],T &ret[], uint count)
  {
   int size= ArraySize (arr);   // Присваиваем переменной количество элементов массива arr
   if ( ArrayResize (ret,size)!=size)
       return AllocError; // Устанавливаем новый размер массиву ret, равный size
   int ii= 0 ;
   for ( int i= 0 ; i<size;)
     {
      T tmp=arr[i];         // переменная перегруженной функции с значениями массива arr
       uint repeatCount= 1 ;   // будем считать одинаковые подряд значения массива arr
       while (++i<size&&arr[i]==tmp) // если следующее значение то же
         ++repeatCount;               // плюсуем repeatCount
       if (repeatCount>=count)
         ret[ii++]=tmp;
     }
   return ArrayResize (ret,ii)==ii?Ok:AllocError; // новый размер массива ret
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   int si= 0 ;
   int arr[]= { 1 , 2 , 4 , 4 , 4 , 4 , 4 , 4 , 7 , 55 , 55 , 7 , 7 , 7 , 7 , 79 , 77 , 66 , 66 , 2 , 2 , 2 , 2 , 2 };
   int ret[];
   if (!GetRepeat(arr,ret,cou))
      si= ArraySize (ret);
   for ( int i= 0 ; i<si; i++)
       Print (si, " ret[i] =" ,ret[i]);
  }    
//+------------------------------------------------------------------+

bu satırı anlamıyorum

 if (!GetRepeat(arr,ret,cou))

Neden "!" ile ? Numaralandırılmış tür neden seçildi?

 

Bunun neden yapıldığını bilmiyorum, ama özünde bir Boole işlevi.


Belki yazar şöyle bir şey düşünmüştür:

Enum'da öğeler sıfırdan başlar: Ok=0, AllocError=1

yani GetRepeat, 0 veya 1 döndürür,

ve cpp dilinde: 0 yanlış, 1 doğrudur,

sırasıyla ! GetRepeat, dönüş değerinin olumsuzlanmasıdır


Kafanı kırabilirsin çünkü kendini ve insanların kafasını kandırmamak çok kolay:

 bool GetRepeat(...)
   {
   ...
   return ArrayResize (ret,ii)==ii;
   }