Hatalar, hatalar, sorular - sayfa 2853

 

Hepinize iyi günler. Lütfen aşağıdaki sorunu çözmeme yardım edin.

Sanal makine üzerinde iki adet MT5 terminali bulunmaktadır. Biri komisyoncu A ile, diğeri komisyoncu B ile çalışır. Aynı bot her iki terminalde de çalışır. 2615 sürümüne güncellenene kadar düne kadar her şey yolundaydı.

Aracı A ile çalışan terminal olduğu gibi çalıştı, ancak aracı B ile çalışan terminal bir donma ile çalışmaya başladı. Yani, başladıktan sonra bir süre normal çalışıyor, sonra donuyor. Dondurmadan sonraki günlüklerde aşağıdaki giriş:

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]


 

derleme hatası neden oluşuyor?

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

derleme hatası neden oluşuyor?

çift

 
Vladimir Simakov :

çift

TAMAM. Teşekkür ederim

kontrol edildi, bu

 Print ( typename ( 1 e3)); //        double
 
MQL5'te grafik geçmişiyle çalışmak için deneysel düzeltmeler içeren beta 2617 yayınlandı.
 
Sitedeki LS tekrar pulluk yapmayın.
 

Söyleyin bana, Metatrader 5 terminalinin geliştiricileri son güncellemede gösterge arabelleklerini kırdı mı? Yoksa kafamda bir şey mi var?

Mesele şu ki, yeni bir çubukta tam bir yeniden hesaplamaya sahip olmayan tüm ok göstergeleri aynı hatayı vermeye başladı. Oklar, yeni çubuktaki sinyal çubuğundan bitişik çubuklarda tavşanlar gibi yumurtlamaya başlar. Bir örnek ekliyorum.

Yalnızca yeni bir çubuktaki göstergenin tamamen yeniden hesaplanması yardımcı olur.


 //+------------------------------------------------------------------+
//|                                                   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 );
  }
Dosyalar:
test_arrow.mq5  12 kb
 
Konstantin Efremov :

Söyleyin bana, Metatrader 5 terminalinin geliştiricileri son güncellemede gösterge arabelleklerini kırdı mı? Yoksa kafamda bir şey mi var?

Mesele şu ki, yeni bir çubukta tam bir yeniden hesaplamaya sahip olmayan tüm ok göstergeleri aynı hatayı vermeye başladı. Oklar, yeni çubuktaki sinyal çubuğundan bitişik çubuklarda tavşanlar gibi yumurtlamaya başlar. Bir örnek ekliyorum.

Yalnızca yeni bir çubuktaki göstergenin tamamen yeniden hesaplanması yardımcı olur.


Bu saçmalığı değiştirin

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

böyle saçmalık

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

>>Açık   sanal makine   iki MT5 terminali maliyeti. Biri komisyoncu A ile, diğeri komisyoncu B ile çalışır. >>Aynı bot her iki terminalde de çalışır. 2615 sürümüne güncellenene kadar düne kadar her şey yolundaydı.


2560 sürümü iade edildi, her şey yolunda gidiyor, donma ve kilitlenme yok.

Geliştiriciler mesajlara hiç yanıt veriyor mu?

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

>>Açık   sanal makine   iki MT5 terminali maliyeti. Biri komisyoncu A ile, diğeri komisyoncu B ile çalışır. >>Aynı bot her iki terminalde de çalışır. 2615 sürümüne güncellenene kadar düne kadar her şey yolundaydı.


2560 sürümü iade edildi, her şey yolunda gidiyor, donma ve kilitlenme yok.

Geliştiriciler mesajlara hiç yanıt veriyor mu?

Anlayabilmeniz veya çoğaltabilmeniz için herhangi bir teknik detay verdiniz mi?

Ayrıntıları olmayan sorular neredeyse her zaman dikkatimizden uzak kalır.