Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1693

 
Taras Slobodyanik #:

es mejor utilizar IsVisualMode en lugar de IsTesting

Puede hacerlo sin IsVisualMode y sin IsTesting

La pregunta era sobre otra cosa

 

sobre magic=rand()

Es extraño que los tervers locales no hayan exclamado "Yobtv"...

Ya que estudias programación aquí, comprueba cuánto tiempo se tarda en falsear. ¿Qué posibilidades hay de conseguir un duplicado mágico en condiciones más o menos reales? y ¿merece la pena pisar un rastrillo así

 
Valeriy Yastremskiy #:

Esto también es posible. Las posibilidades de coincidir son escasas.

También hay una comprobación adicional para un partido, por lo que está bien muelles.

 
Maxim Kuznetsov #:

sobre magic=rand()

Es extraño que los tervers locales no hayan exclamado "Yobtv"...

Ya que estudias programación aquí, comprueba lo que tarda en hacer el fackup. ¿Qué posibilidades hay de conseguir un duplicado mágico en condiciones más o menos reales? y ¿merece la pena pisar un rastrillo así

De la referencia:
"Para asegurarse de que obtiene una secuencia no repetitiva, utilice MathSrand(GetTickCount()), ya que GetTickCount() ha estado incrementando desde que se inició el sistema operativo y no se repetirá durante 49 días"

 
MakarFX #:
Oh, eso funciona, gracias... ahahh, sólo que ahora el botón está abriendo 150 órdenes cada tick sin parar...

lo hizo

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

es extraño que los expertos locales en terver no exclamaran a coro: "Yobtv"...

nadie quiere persuadir, nadie quiere discutir, dejemos que el hombre aprenda... él se dará cuenta por sí mismo

 
Maxim Kuznetsov #:

sobre magic=rand()

es extraño que los tervers locales no hayan exclamado a coro "Yobtv"...

///

Duck, ¿cuántas veces?

 
Nerd Trader #:
Oh, eso funciona, gracias... ahahh, sólo que ahora el botón me tiene abriendo 150 órdenes cada tick sin parar...

lo hizo

Haz esto

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

El guión es de este hilo.

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

No entiendo esta línea.

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

¿Por qué con "!" ? ¿Por qué se selecciona el tipo enumerado?

 

No sé por qué se hace esto, pero es esencialmente una función booleana.


El autor debió pensar en algo así:

Los elementos del enum empiezan por cero: Ok=0, AllocError=1

es decir, GetRepeat devuelve 0 o 1,

y en cp: 0 es falso, 1 es verdadero,

respectivamente. GetRepeat es una negación del valor de retorno


Es un rasguño en la cabeza, porque es muy fácil no meterse en la cabeza y en la de la gente:

bool GetRepeat(...)
   {
   ...
   return ArrayResize(ret,ii)==ii;
   }
Razón de la queja: