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

 
Artyom Trishkin #:

伙计们,不管你想怎么做,如果你不记得最后一次检查时的循环索引值,那么你就有一个循环在所有可用的历史中运行。而且越是这样,循环就越长。

不确定

我还有2个具有类似设计的检查盈利能力的EA,它们都在15-20分钟内通过了测试器中的整个历史记录。

 
законопослушный гражданин #:

我不确定。

我还有2个具有相同设计的批量检查的EA,它们都在15-20分钟内通过了测试器的整个故事。

嗯,这取决于你。我不打算争论。

 
MakarFX #:

改变顺序 覆盖

类似地

 
законопослушный гражданин #:

是的,任何一对。

我对澳元/美元使用M15。

我在使用你的指标时遇到了同样的问题(附后)。

我通过排除法发现,这个东西减缓了进程。

缓存结果(在变量中)。而且,如果订单列表发生了变化,缓存也应该被更新。如果没有什么变化,那么就直接返回缓存中的值。

 
Artyom Trishkin #:

伙计们,不管你想怎么做,如果你不记得最后一次检查时的循环索引值,那么你就有一个循环在所有可用的历史中运行。而且数量越多,循环的时间就越长。

你应该时刻想到会有停电等情况。

历史上的一个EA应该在任何时候都能被配置和运行。

 
Volodymyr Zubov #:

总是要考虑断电等问题......

故事中的顾问应该在任何时候都能配置好并工作。

有一个VPS来保持灯火通明。

 
是的,你不需要一个局部变量 来查找顺序
 

我大致明白为什么会有问题。

现在我想做以下工作。

清理无效的OnTick

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
   {
  
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
   }
}

信号,使其成为这样的。

bool bSignalBuy()
  {
   if (openPrice > Open[1] && openPrice < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
   
  return(true);
   
  return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if(openPrice< Open[1] && openPrice > Close[1])

   return(true);

   return(false);
  }

其中openPrice试图以这种方式表达, 但它给出了一个错误。

由于类型转换而可能造成的数据损失

我是否正确使用了无效函数?

  void openPrice()
  {
  int OP=0;
  
  if (GetLotSize()>LotControl) OP = dMA + Deviation * _Point;
  else OP = dMA;
  }
 

通过画图和删除,在按下一个按钮后使一条线跟随鼠标光标。

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {    
    if(ObjectGetInteger(0,"button_bs",OBJPROP_STATE)){
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;
     
      if(id == CHARTEVENT_MOUSE_MOVE){
        if(ChartXYToTimePrice(0,x,y,window,dt,price)){
            ObjectDelete(0,"H Line");
            ObjectCreate(0,"H Line",OBJ_HLINE,window,dt,price);
            ChartRedraw(0);
        }
      }
    }
    else{
      ObjectDelete(0,"H Line");
    }
  }

也许有另一种方法?处理器冷却器开始有噪音了 :)

 
Volodymyr Zubov #:

总是要考虑断电等问题......

一个来自历史的顾问应该在任何时候都能配置好并工作。

应该如此。那么,如何记住循环索引,防止它在重启后翻阅历史?
原因: