给MQL行家的一个问题 - 页 8

 

谢谢你。

 

大家下午好。

请告知。 该指标显示工具的价格线和

右边有一个文字注释--他们的名字和位置大小。

一切工作都很正常。只要我不把指标放在有5位数报价的工具的图表上。

价格线已经画好。但右边的评论却完全消失了。或者,显示的是零,而不是位置大小。

日志显示零分化 (见Alpari图表)。

- 在EURUSD和GBPUSD上--显示的不是大小的零,而是...

我认为这与位置大小的计算有关。

double vol1=1, vol2, vol3, k1;

  k1=MarketInfo(Symbol_1, MODE_TICKVALUE)*iOpen(Symbol_1,0,0)/
     MarketInfo(Symbol_1, MODE_TICKSIZE);

  vol2=k1/(MarketInfo(Symbol_2, MODE_TICKVALUE)*iOpen(Symbol_2,0,0)/
           MarketInfo(Symbol_2, MODE_TICKSIZE))*vol1;

  vol3=k1/(MarketInfo(Symbol_3, MODE_TICKVALUE)*iOpen(Symbol_3,0,0)/
           MarketInfo(Symbol_3, MODE_TICKSIZE))*vol1;

    // пишем комментарий в окне индикатора с правой стороны: 
 object("Symbol1", DoubleToStr(N1,0)+"*"+Symbol_1+" -"+DoubleToStr(vol1,2), 10, indicator_color1, 5);
 object("Symbol2", DoubleToStr(N2,0)+"*"+Symbol_2+" -"+DoubleToStr(vol2,2), 10, indicator_color2, 18);
 object("Symbol3", DoubleToStr(N3,0)+"*"+Symbol_3+" -"+DoubleToStr(vol3,2), 10, indicator_color3, 31);
 object("SymbolS", "AVERAGE", 10, indicator_color4, 44);   
           

比率k1=MarketInfo(Symbol_1, MODE_TICKVALUE)..../MarketInfo(Symbol_1, MODE_TICKSIZE)

在5位数时给出 "除以0"。

请告知如何解决这个问题?

 

请告诉我是否有一个脚本或指标可以显示历史上较早的交易,例如从某某到某某的日期。在我看来,这是非常有用的。

谢谢你。

尤里

 
leonid553:

大家下午好。

请告诉我如何解决这个问题?


简单地说,尝试用MODE_POINT代替MODE_TICKSIZE。但实际上,你需要重写代码以说明空的MarketInfo()。
 
tyn:

请告诉我是否有一个脚本或指标可以显示历史上较早的交易,例如从某某到某某的日期。在我看来,Ochen是个有用的东西。

我认为这将是非常有用的。

尤里

https://www.mql5.com/en/code- 脚本。 你可以在你的终端的历史中设置时间范围。

VisualOrders.mq4 - 指标

附加的文件:
 

下午好。

在mt4 EXNESS中,我的 "多货币 "指标,由于某些原因,只有在连接互联网时才能工作(与其他经纪公司的mt4不同)。

我不使用时出现了错误,我得到了一个负面的反馈。日志给出了一个 "Zerodive"。

当我连接到互联网时,经常要先点击TF才能出现指数线。

能否请您告诉我问题是什么以及如何解决?

当互联网被关闭时。

连接时。

 
leonid553:

下午好。

在mt4 EXNESS中,我的 "多货币 "指标,由于某些原因,只有在连接互联网时才能工作(与其他经纪公司的mt4不同)。

我不使用时出现了错误,我得到了一个负面的反馈。该日志给出了一个 "zerodividi"。

当我连接到互联网时,经常要先点击TF才能出现指数线。

能否请您告诉我问题出在哪里,如何解决?

当互联网被关闭时。

连接时。


这是一个正常的事情。这种情况经常发生,而且并不总是能够得到处理。虽然除以0 可以固定。问题是更多时候缺乏市场环境。
 

我不太明白,维克多。

这是一个 "正常的事情 "吗?这显然是一个小故障!

我不明白这个词--"没有市场环境"。

如果我们把除数固定为零--价格线会出现吗?我不这么认为。

指标窗口右角的注释正常显示。也就是说,函数ObjectCreate等 都在正常工作。

同样,在注释中设置了数字的数学计算 也能正常工作。

只保留指标的价格线。那里没有其他东西。

价格线被设置在缓冲区。每条价格线只是两个MA之间的差异。

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;      limit=Bars-counted_bars;
  //---- основной цикл
 for(int i=0; i<limit; i++)       {
 
   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
  .... ....

因此,这就是给出 "零除法 "的部分!但这里根本就没有除法,更没有除以零的情况出现。

因此,这种情况下的错误是由服务器(或平台)从后台返回的?也可能是MT4的开发者没有考虑到这样的故障,设置了 "除零 "的回报,与这种错误的本质并不完全对应。

还有,为什么该指标在MT4中运行良好? 为什么指示器能正常工作?

类似的平台会有什么不同,从而使这个简单的代码在其中的工作方式不同?

 

除以0 可以处理,但你也需要指标正常工作。这就更难了。

 

从理论上讲,这段简单的代码(为4行)会有什么问题)。

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;
     limit=Bars-counted_bars;

  //---- основной цикл
 for(int i=0; i<limit; i++)       {
   //РИСУЕМ ЛИНИИ СИМВОЛОВ, ЕСЛИ ИМЕЮТСЯ БАРЫ

   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
   Symbol2[i]= N2*
     (iMA(Symbol_2,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false))-
     iMA(Symbol_2,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false)))  ;
   Symbol3[i]= N3*
     (iMA(Symbol_3,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false))-
     iMA(Symbol_3,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false)))  ; 
   Symbol4[i]= N4*
     (iMA(Symbol_4,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false))-
     iMA(Symbol_4,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false)))  ;
    
      
      
   }
   return (0);
} // конец функции СТАРТ