Erros, bugs, perguntas - página 2853

 

Boa tarde a todos. Por favor, ajude-me a resolver o seguinte problema.

Existem dois terminais MT5 na máquina virtual. Um está a trabalhar com o corretor A, o outro com o corretor B. O mesmo bot está a funcionar nos dois terminais. Tudo estava bem até ontem, quando actualizei para a versão 2615.

O terminal a trabalhar com o corretor A funcionou e continua a funcionar, mas o terminal com o corretor B fica pendurado. Ou seja, após o arranque funciona normalmente durante algum tempo, depois fica pendurado. Nos registos, após o desligamento, o seguinte registo:

PJ      1       11:18:36.886    Network '67003410': connection to RoboForex-ECN lost
MP      0       11:18:37.656    Network '67003410': authorized on RoboForex-ECN through Europe #2 (ping: 98.08 ms, build 2560)
RN      0       11:18:37.656    Network '67003410': previous successful authorization performed from 91.217.110.2 on 2020.09.22 07:16:34
DR      0       11:18:37.768    Network '67003410': terminal synchronized with RoboMarkets Ltd: 2 positions, 0 orders, 121 symbols, 0 spreads
IM      0       11:18:37.768    Network '67003410': trading has been enabled - hedging mode
EK      1       11:20:38.099    Network '67003410': connection to RoboForex-ECN lost
ES      0       11:20:38.674    Network '67003410': authorized on RoboForex-ECN through Europe #2 (ping: 98.08 ms, build 2560)
FQ      0       11:20:38.674    Network '67003410': previous successful authorization performed from 91.217.110.2 on 2020.09.22 07:18:36
FM      0       11:20:38.784    Network '67003410': terminal synchronized with RoboMarkets Ltd: 2 positions, 0 orders, 121 symbols, 0 spreads
GR      0       11:20:38.784    Network '67003410': trading has been enabled - hedging mode
OH      1       11:22:39.328    Network '67003410': connection to RoboForex-ECN lost
CR      3       11:22:55.243    NetDispatcher   thread timeout reached possible deadlock [15]


 

porque é que ocorre um erro de compilação?

int j = 1 e3;         // OK
if(j % 1000 == 0);   // OK
if(j % 1 e3 == 0);    // '%' - illegal operation use
 
Igor Makanu:

Porque é que ocorre um erro de compilação em tempo de compilação?

duplo

 
Vladimir Simakov:

duplo

OK. Obrigado.

Verificado, é.

Print(typename(1 e3)); //        double
 
Lançado o beta 2617 com correcções experimentais de trabalho com histórico de gráficos em MQL5.
 
Os PMs do sítio web não estão a funcionar novamente.
 

Diga-me, os programadores do Metatrader 5 têm os indicadores de protecção partidos na última actualização? Ou será algo de errado com a minha cabeça?

A questão é que todos os indicadores de seta que não têm um recálculo completo sobre uma nova barra começaram a produzir a mesma falha. As setas começam a multiplicar-se como coelhos nas barras adjacentes na nova barra. Exemplo em anexo.

Só o recálculo completo do indicador numa nova barra ajuda.


//+------------------------------------------------------------------+
//|                                                   test_arrow.mq5 |
//|                                               Efremov Konstantin |
//|                          https://www.mql5.com/ru/users/leonardo4 |
//+------------------------------------------------------------------+
#property copyright "Efremov Konstantin"
#property link      "https://www.mql5.com/ru/users/leonardo4"
#property version   "1.00"
#property indicator_chart_window
//--- init indicator buffers
#property indicator_buffers 1
#property indicator_plots   1

#property indicator_label1  "Arrows"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

input int      History  = 10;             // История, дней  

double   Arrows[];
int      cnt_bars;
int      HistoryCandle;
bool     FirstStartFlag;
int bar, limit;
datetime counted_bar;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer       (0,Arrows,INDICATOR_DATA);
   ArraySetAsSeries     (Arrows,true);
   PlotIndexSetInteger  (0,PLOT_DRAW_TYPE,DRAW_ARROW);
   PlotIndexSetInteger  (0,PLOT_LINE_COLOR,clrDodgerBlue);
   PlotIndexSetString   (0,PLOT_LABEL,"Arrows");
   PlotIndexSetInteger  (0,PLOT_ARROW,233);
   
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//--- Рассчитываем количество свечей истории текущего таймфрейма от настройки "дней"
   HistoryCandle           = History*24*60*60/PeriodSeconds(PERIOD_CURRENT);
   cnt_bars                = HistoryCandle;  // Кол-во баров для подсчета сигналов
   FirstStartFlag          = true;
   
//---
   return(INIT_SUCCEEDED);
  }
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ChartRedraw(0);
  }
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

      ArraySetAsSeries(close,true);
      ArraySetAsSeries(open,true);
      ArraySetAsSeries(low,true);
      
     if(HistoryCandle>=rates_total) cnt_bars=rates_total-1;
     else cnt_bars=HistoryCandle;
     
//----+ проверка количества баров на достаточность для корректного расчёта индикатора
      if(rates_total<=cnt_bars)
         {
            Print("Недостаточно истории. Есть "+IntegerToString(rates_total-1)+" надо "+IntegerToString(cnt_bars));                                                                                                                                                                                                                                                                                                              
            return(0);
         }
         
//--- инициализация индикаторного буфера  
     if(FirstStartFlag) 
      {
//--- обнулим все буферы стрелок и времени от мусора                                                             
         for(int x=cnt_bars; x>=0 && !IsStopped(); x--) Arrows[x] = EMPTY_VALUE;
         FirstStartFlag = false;
         ChartRedraw(0);
      }
      
   if(prev_calculated>rates_total || prev_calculated<=0) // проверка на первый старт расчёта индикатора
      {
         limit=cnt_bars-1; // стартовый номер для расчёта всех баров
      }
   else limit=rates_total-prev_calculated; // стартовый номер для расчёта новых баров
   
   if(rates_total != prev_calculated) Arrows[0] = EMPTY_VALUE;
   

   
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
      {
         if(close[bar+1]>open[bar]+5*_Point)  {Arrows[bar]=NormalizeDouble(low[bar]-5*_Point,_Digits);}
      }
      
   MqlRates rates[];
   MqlTick tick;
   SymbolInfoTick(Symbol(),tick);
   CopyRates(Symbol(),PERIOD_CURRENT,0,1,rates);
   double i;
   long m,s;
   m=rates[0].time+GetMinute()*60-tick.time;
   i=m/60.0;
   s=m%60;
   m=(m-m%60)/60;
            
   Comment(" Candle: "+IntegerToString(m,0,' ')+" m "+IntegerToString(s,0,' ')+" s left");
   
   if(iTime( _Symbol, PERIOD_M1, 0 ) > counted_bar ) 
      {
         counted_bar = iTime( _Symbol, PERIOD_M1, 0 );
         ChartRedraw(0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

int GetMinute()
  {
   switch(Period())
     {
      case PERIOD_M1: return(1);
      case PERIOD_M2: return(2);
      case PERIOD_M3: return(3);
      case PERIOD_M4: return(4);
      case PERIOD_M5: return(5);
      case PERIOD_M6: return(6);
      case PERIOD_M10: return(10);
      case PERIOD_M12: return(12);
      case PERIOD_M15: return(15);
      case PERIOD_M20: return(20);
      case PERIOD_M30: return(30);
      case PERIOD_H1: return(60);
      case PERIOD_H2: return(120);
      case PERIOD_H3: return(180);
      case PERIOD_H4: return(240);
      case PERIOD_H6: return(360);
      case PERIOD_H8: return(480);
      case PERIOD_H12: return(720);
      case PERIOD_D1: return(1440);
      case PERIOD_W1: return(10080);
      case PERIOD_MN1: return(43200);
     }
   return(1);
  }
Arquivos anexados:
test_arrow.mq5  12 kb
 
Konstantin Efremov:

Diga-me, os programadores do Metatrader 5 têm os indicadores de protecção partidos na última actualização? Ou será algo de errado com a minha cabeça?

A questão é que todos os indicadores de seta que não têm um recálculo completo sobre uma nova barra começaram a produzir a mesma falha. As setas começam a multiplicar-se como coelhos nas barras adjacentes na nova barra. Exemplo em anexo.

Só o recálculo completo do indicador numa nova barra ajuda.


Substituir este disparate

//--- инициализация индикаторного буфера  
     if(FirstStartFlag) 
      {
//--- обнулим все буферы стрелок и времени от мусора                                                             
         for(int x=cnt_bars; x>=0 && !IsStopped(); x--) Arrows[x] = EMPTY_VALUE;
         FirstStartFlag = false;
         ChartRedraw(0);
      }

com este disparate.

  if(prev_calculated == 0)
    ArrayInitialize(Arrows, 0.0);
 

>>Existemdois terminais MT5 na máquinavirtual.Um está a trabalhar com o corretor A, o outro com o corretor B. Ambos os terminais estão a funcionar >> o mesmo bot. Tudo estava bem até ontem, até eu actualizar a versão 2615.


Com a versão 2560, tudo funciona bem, sem congelamentos ou bloqueios.

Os programadores estão sequer a responder às mensagens?

Виртуальный хостинг для MetaTrader 5
Виртуальный хостинг для MetaTrader 5
  • www.mql5.com
Виртуальный хостинг для MetaTrader 4/5 является лучшим VPS-решением для Форекса. Оно не требует настройки, дает минимальные задержки до сервера и отличается низкими ценами. Всего за 15 USD в месяц вы получите виртуальную платформу, которая работает круглые сутки, экономит вашу прибыль и даже окупает себя. Создать удаленную копию приложения...
 
elavr:

>>Existemdois terminais MT5 na máquinavirtual.Um está a trabalhar com o corretor A, o outro com o corretor B. Ambos os terminais estão a funcionar >> o mesmo bot. Tudo estava bem até ontem, até eu actualizar a versão 2615.


Com a versão 2560, tudo funciona bem, sem congelamentos ou bloqueios.

Os programadores estão sequer a responder às mensagens?

Comunicou algum detalhe técnico para compreender ou reproduzir?

As perguntas sem detalhes são quase sempre deixadas sem a nossa atenção.