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

 
Taras Slobodyanik #:

é melhor usar o IsVisualMode em vez do IsTesting

Você pode fazer isso sem IsVisualMode e sem IsTesting

A pergunta era sobre algo mais

 

sobre magic=rand()

É estranho que os tervers locais não tenham exclamado "Yobtv".

Já que você estuda programação aqui, verifique quanto tempo leva para falsificá-la. Quais são as chances de conseguir um duplicado mágico em condições mais ou menos reais? e vale a pena pisar em tal ancinho?

 
Valeriy Yastremskiy #:

Isto também é possível. As chances de uma partida são mínimas.

Há também um cheque extra para uma partida, portanto está tudo bem nas docas.

 
Maxim Kuznetsov #:

sobre magic=rand()

É estranho que os tervers locais não tenham exclamado "Yobtv".

Já que você estuda programação aqui, verifique quanto tempo demora a falsificação. Quais são as chances de conseguir um duplicado mágico sob condições mais ou menos reais? e vale a pena pisar em tal ancinho?

Da referência:
"Para garantir que você obtenha uma seqüência não repetitiva, use MathSrand(GetTickCount()), uma vez que GetTickCount() tem sido incrementada desde o início do sistema operacional e não será repetida por 49 dias".

 
MakarFX #:
oh, isso funciona, obrigado... ahahh, só agora o botão está abrindo 150 pedidos a cada tique sem parar...

fez isso

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

é estranho que os especialistas locais não exclamassem com um refrão: "Yobtv"...

ninguém quer persuadir, ninguém quer discutir, deixar o homem aprender... ele vai descobrir por si mesmo

 
Maxim Kuznetsov #:

sobre magic=rand()

é estranho que os tervers locais não exclamassem com um refrão "Yobtv"...

///

Pato, quantas vezes?

 
Nerd Trader #:
oh que funciona, obrigado... ahahh, só agora o botão me faz abrir 150 pedidos a cada tique sem parar...

fez isso

Faça isso

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

O roteiro é a partir deste fio condutor.

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

Eu não entendo esta linha.

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

Por que com "!" ? Por que o tipo enumerado é selecionado?

 

Não sei porque isto é feito, mas é essencialmente uma função booleana.


O autor deve ter pensado em algo como isto:

Em enumeração, os elementos começam com zero: Ok=0, AllocError=1

ou seja, a GetRepeat retorna 0 ou 1,

e em cp: 0 é falso, 1 é verdadeiro,

respectivamente ! GetRepeat é uma negação do valor de retorno


É um arranha cabeças, porque é muito fácil não mexer com a cabeça e com a cabeça das pessoas:

bool GetRepeat(...)
   {
   ...
   return ArrayResize(ret,ii)==ii;
   }
Razão: