新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1693

 
Taras Slobodyanik #:

最好使用IsVisualMode而不是IsTesting。

你可以在没有IsVisualMode和IsTesting的情况下进行。

这个问题是关于其他方面的

 

关于magic=rand()

奇怪的是,当地的热心人并没有感叹 "Yobtv"...

既然你在这里学习编程,那就检查一下它需要多长时间来进行fackup。在或多或少的真实条件下,得到一个神奇的复制品的机会是什么? 它是否值得踩在这样的耙子上?

 
Valeriy Yastremskiy #:

这也是可能的。匹配的机会很渺茫。

还有一个额外的检查是匹配的,所以它是OK的码头。

 
Maxim Kuznetsov #:

关于magic=rand()

奇怪的是,当地的热心人并没有感叹 "Yobtv"...

既然你在这里学习编程,那就检查一下它需要多长时间来进行fackup。在或多或少的真实条件下,得到一个神奇的复制品的机会是什么? 以及是否值得踩着这样的耙子?

来自参考资料:
"为了确保得到一个不重复的序列,使用MathSrand(GetTickCount()),因为 GetTickCount() 从操作系统开始就一直在递增,在49天内不会重复"

 
MakarFX #:
哦,这很有效,谢谢...ahahh,只是现在这个按钮每隔一段时间就会打开150个订单,没有停止过。

这样做

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

奇怪的是,当地的专家们并没有大喊:"Yobtv"......

没人愿意劝说,没人愿意争论,让他学习......他自己会明白的

 
Maxim Kuznetsov #:

关于magic=rand()

奇怪的是,当地的热心人并没有大喊 "Yobtv"......

///

鸭子,有多少次?

 
Nerd Trader #:
哦,这很有效,谢谢...ahahh,只是现在这个按钮让我每一次打钩都要开150个订单,没有停止过......这样做



这样做

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

脚本来自这个主题。

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

我不明白这句话。

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

为什么用"!"?为什么选择枚举

 

我不知道为什么这样做,但它本质上是一个布尔函数。


作者肯定想到了这样的事情。

在枚举中,元素以零开始:Ok=0,AllocError=1

也就是说,GetRepeat返回0或1。

而在cp中:0为假,1为真。

分别是 !GetRepeat是对返回值的否定


这是一个令人头疼的问题,因为要不乱自己和别人的脑子是很容易的。

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