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

 
MakarFX #:

如果是这样

我花了很长时间才搞清楚为什么你的解决方案不会导致无限循环。尽管如此,它也会自己执行1次。但上述解决方案促使我创建了一个布尔开关。
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;
      } 
  }
现在,只有当按钮被按下时,代码才会被执行。但是,如果终端运行了几天,会发生什么?另一个返回时间的方法的帮助,它说会有一个溢出。

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;
      }
  }
同样的代码,但用Seconds()代替GetMicrosecondCount,就不能工作。"Seconds() > 20 "如果更高--按钮冻结在 "按下 "状态。如果低一点--就会起作用,但速度快得几乎让人察觉不到(闪烁)。
 
Nerd Trader #:
很久以来都不明白为什么你的解决方案不会导致无限循环。尽管如此,它也会自行执行1次。但上面的解决方案促使我创建了一个布尔型开关。现在,代码只在按钮被按下时执行。但是,如果终端运行了几天,会发生什么?另一个返回时间的方法的帮助说会发生溢出。 同样的代码,但用Seconds()代替GetMicrosecondCount,就不能工作。"Seconds() > 20 "如果更高 - 按钮冻结在 "按下 "状态。如果低一点--它就会起作用,但速度快得几乎看不见(眨眼)。


然后是这样的

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

然后是这样的

不,它不是那样工作的,如果秒不工作,TimeCurrent()就更不工作了。到目前为止,Mileseconds是唯一可行的变体,尽管它可能导致溢出。
 
Nerd Trader #:
不,它不是那样的,如果秒没有作用,那么TimeCurrent()就更有作用了。到目前为止,mile-seconds是唯一可行的变体,尽管它可能导致溢出。
它是有效的!
 
MakarFX #:
它是有效的!
mmm对我不起作用:按钮不能自行释放。
 
Nerd Trader #:
mmm对我不起作用:按钮不能自行释放。
现在市场已经关闭,TimeCurrent()没有变化。检查加密货币,它在周末工作
 
MakarFX #:
现在市场已经关闭,TimeCurrent()没有变化。检查加密货币,它在周末工作
我的经纪人的加密货币在周末不交易。在测试器中试了一下--不起作用。
 
Nerd Trader #:
我的经纪人周末的加密货币没有交易。在测试器中试了一下--不起作用。
打开A-Markets演示。计时器在测试器中不起作用。
 

问候,我得到一个数组。

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

我怎样才能改变它,使所有的数字都存在,但没有重复?

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

问候,有一个数组

我怎样才能改变它,使所有的数字都出现,但不重复?

你可以不使用库来做这件事

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