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

 

如何清空指标的高值和低值?例如,如果我设置一个最大值为100,最小值为0,然后我需要指标将所有内容可视化,我如何组织?问题是,我写了一个有几种模式的指标,其中一个使用最大和最小,但在输入参数中切换模式后,最大仍是100,最小也是0。


MQL5

 
Alekseu Fedotov:

你已经调用并传递了偏差(Kanal)返回的值给Envelopes(........) 函数。

而在Envelopes(........) 函数本身中,你声明了最后一个参数,它将采用这个值


像这样

谢谢你,现在更有意义了。

 

根据你的建议,对MT5的代码稍作修改,结果是这样的。

input  string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

input  ENUM_TIMEFRAMES   Time_Frames    = PERIOD_M5;             // Временной период
       int                Ma_Period     = 120;                   // Период
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_MA_METHOD     Ma_Method     = MODE_SMMA;             // Mетод усреднения
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE;           // Tип цены
//************************************************************************************************/
void OnTick()
{
//---------------------------------------------------
   double Signal_Sell = Envelopes(0, Deviation(1)); // Сигнал на Продажу
   Print ("Signal_Sell = ", Signal_Sell);
    if (Signal_Sell < 0) { Print("Signal_Sell error #",GetLastError()); }
   double  Signal_Buy = Envelopes(1, Deviation(1));  // Сигнал на Покупку
   Print ("Signal_Buy = ", Signal_Sell);
     if (Signal_Buy < 0) { Print("Signal_Buy error #",GetLastError()); }
//---------------------------------------------------
   double Signal_Sell_2 = Envelopes(0, Deviation(2));
   Print ("Signal_Sell_2 = ", Signal_Sell);
      if (Signal_Sell_2 < 0) { Print("Signal_Sell_2 error #",GetLastError()); }
   double  Signal_Buy_2 = Envelopes(1, Deviation(2));
   Print ("Signal_Buy_2 = ", Signal_Sell);
       if (Signal_Buy_2 < 0) { Print("Signal_Buy_2 error #",GetLastError()); }
//---------------------------------------------------
}
//************************************************************************************************/
double Envelopes(int buff, double _Deviation)
{
  double buf[1];
  int handle=iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, _Deviation);
   if(handle<0)
   {
    Print("Failed to create handle iEnvelopes, Error: ",GetLastError());
    return(WRONG_VALUE);
   } else
   {
    if(CopyBuffer(handle,buff,0,1,buf)<0)
    {
     Print("Failed to copy data from the indicator iEnvelopes, Error: ",GetLastError());
     return(WRONG_VALUE);
    }
   }
   return(buf[0]);
}
//************************************************************************************************/

只是现在我不明白,为什么在每一个刻度 上,第一个计算值都被写在各个地方。

计算方式

你能告诉我如何修复它吗?
 
Alexander Layzerevich:

根据你的建议,对MT5的代码稍作修改,结果是这样的。

只是现在我不明白为什么在每一个刻度 处都有一个计算值被写入。

//---------------------------------------------------
   double Signal_Sell = Envelopes(0, Deviation(1)); // Сигнал на Продажу
   Print ("Signal_Sell = ", Signal_Sell);
    if (Signal_Sell < 0) { Print("Signal_Sell error #",GetLastError()); }
   double  Signal_Buy = Envelopes(1, Deviation(1));  // Сигнал на Покупку
   Print ("Signal_Buy = ", Signal_Sell);
     if (Signal_Buy < 0) { Print("Signal_Buy error #",GetLastError()); }
//---------------------------------------------------
   double Signal_Sell_2 = Envelopes(0, Deviation(2));
   Print ("Signal_Sell_2 = ", Signal_Sell);
      if (Signal_Sell_2 < 0) { Print("Signal_Sell_2 error #",GetLastError()); }
   double  Signal_Buy_2 = Envelopes(1, Deviation(2));
   Print ("Signal_Buy_2 = ", Signal_Sell);
       if (Signal_Buy_2 < 0) { Print("Signal_Buy_2 error #",GetLastError()); }
//---------------------------------------------------

这是很明显的。即使没有被强调。

 
Artyom Trishkin:

它立即吸引了人们的目光。即使没有高亮显示。

谢谢你。

 

新手对MQL4的任何问题,对算法和代码的帮助和讨论

WinProject, 2019.05.07 18:38

你能告诉我为什么同样的代码在MT4中可以工作,但在MT5中却不能工作?在MT5中,strNum变量总是=1,但在MT4中,++计数器正常工作,strNum=文件中的行数。

int strNum;
void OnStart()
  {
 FileNum();
 Alert1();
  } 

  void FileNum()
{
      int handle=FileOpen("File.csv",FILE_CSV|FILE_READ,';');
      strNum=0; 
      while(!FileIsEnding(handle))
{
      FileReadString(handle);
      strNum++;
      if(FileIsEnding(handle)==true)
      break;
}
      FileClose(handle);
}

      void Alert1()
{
      Alert (strNum);
}

我在回答自己的问题,对于那些在MT5中打开或读取文件到数组或结构中时没有循环的人来说,这可能是有用的。在MT5中,与MT4不同的是,在读取.csv文件时,你应该额外设置文件打开标志 FILE_ANSI。

也就是说,在MT5中,这一行应该是这样的。

int handle=FileOpen("File.csv",FILE_READ|FILE_ANSI|FILE_CSV,";");

为什么,我不知道,也许有人知道?

 
如果EA日志显示这种格式的通知-uninit reason 3(通知是由于TM被切换),但机器人并没有从图表中删除,那么变量的值和所有已经收到的计算结果是否保留?
 

我得到 "OrderSend error 130",原因不明,该程序在模拟账户的策略测试器中运行,所以据我所知,不可能有来自经纪商的任何限制,止损水平=30。在测试过程中,我每隔一段时间就会出现这个错误,所有交易的止损都是以ATR的百分比固定的,但是有些订单成功下达,而有些则没有。

      Print("!!!long level = ", level, ", stop = ", NormalizeDouble(level - stop, Digits));
      if(Bid < level) {
         tickets[orders] = OrderSend(symbol, OP_BUYSTOP, volume, level, 5, NormalizeDouble(level - stop, Digits), 
                            NormalizeDouble(level + take, Digits), NULL, magicNum, TimeLocal() - TimeLocal() % 1800 + 7200, clrBlue);                                                                           
         orderLevels[orders] = level;
         directions[orders] = true;
         orderIsTheLast[orders] = lastOrder;          
         firstTouchTimes[orders] = firstTouchTime;
         orders++;                   
      }       
      else { 
         tickets[orders] = OrderSend(symbol, OP_BUYLIMIT, volume, level, 5, NormalizeDouble(level - stop, Digits), 
                            NormalizeDouble(level + take, Digits), NULL, magicNum, TimeLocal() - TimeLocal() % 1800 + 7200, clrBlue);                
         orderLevels[orders] = level;
         directions[orders] = true;
         orderIsTheLast[orders] = lastOrder;
         firstTouchTimes[orders] = firstTouchTime;
         orders++;    
      }

有的时候,一个订单被拒绝了几次,然后通过了...



 

如何在CodeBase中为不同语言的受众发布相同的代码(例如,如何在市场中填写相应语言的表格)?


我已经在CodeBase中看到了这一点,这里有一个例子


我怎样才能做到这一点呢?

 

例如,当你用鼠标将蜡烛图的比例减少到极限时,指标读数会发生变化,但指标代码中的数千个蜡烛图都没有说明蜡烛图尺寸的变化。