Ошибки, баги, вопросы - страница 1777

Alexandr Bryzgalov:

таймер-тоне чаще чем раз в 1 сек срабатывает при условии что из старта вышли.

это редко.

или были нововведения?

 

давно есть микротаймер, который срабатывает 1 раз в 1 мс 

но сейчас стаймером в мт4 беда, он почему то перестает работать. Никто не знает ответ "ПОЧЕМУ" 

Vladislav Andruschenko:

 

давно есть микротаймер, который срабатывает 1 раз в 1 мс 

но сейчас стаймером в мт4 беда, он почему то перестает работать. Никто не знает ответ "ПОЧЕМУ" 

в общем не работает.
Alexandr Bryzgalov:
в общем не работает.

сейчас в принципе таймер любой - на некоторых терминалах не работает, даже администрация не знает почему.

но есть догадки - подвисает интернет и собственно таймер "вешается"  

Vladislav Andruschenko:

но сейчас стаймером в мт4 беда, он почему то перестает работать. Никто не знает ответ "ПОЧЕМУ" 

Вроде как может помочь перезапуск терминала или перекомпиляция. но сама бага БЕСИТ.
Комбинатор:
Вроде как может помочь перезапуск терминала или перекомпиляция. но сама бага БЕСИТ.

 

да , но клиентам то это не обьяснишь?

вот представьте, работает эксперт, работает работает, ты идешь спать, спишь, просыпаешься а эксперт не работает, почему? потому что таймер повесился, и что делать, кто виноват?  

Vladislav Andruschenko:

да , но клиентам то это не обьяснишь?
В том-то и дело
Alexey Kozitsyn:

Спасибо, проверьте еще, пожалуйста, номер первого видимого бара на графике: ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR ); 

Суть в том, что если отключить прокрутку графика, и мониторить последний видимый бар, то в момент образования новой свечи его номер, почему-то изменяется, хотя график не двигается! ТФ М1 для того, чтобы можно было быстрее проверить. Запуск из индикатора:

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
   {
    //--- Подписываемся на событие движения мыши
         ChartSetInteger( 0, CHART_EVENT_MOUSE_MOVE, true );
         //---
    return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
//| 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[])
   {

    return(rates_total);
   }
//+------------------------------------------------------------------+
//| Обработка события графика                                        |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
   {
    switch( id )        
        {
         case CHARTEVENT_MOUSE_MOVE:
                 Print( __FUNCTION__," "+TimeToString( TimeCurrent(), TIME_DATE|TIME_SECONDS )+": sparam = "+sparam+", ",(int)ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR ));
                 break;
        }
   }


 

Добрый день!

Это стандартное поведение. Отсчет начинается с текущего, строящегося бара. Соответственно, с появлением нового бара, при отсутствии автопрокрутки, его номер увеличивается на единицу.
[Удален]
Evgeny Chernyshev:
Добрый день!

Это стандартное поведение. Отсчет начинается с текущего, строящегося бара. Соответственно, с появлением нового бара, при отсутствии автопрокрутки, его номер увеличивается на единицу.
Ок, тогда добавьте пожалуйста где-нибудь в документацию, что это как бы не "первый видимый бар", а первый бар, начиная от текущего (незавершенного).

Ошибка при выполнении в результате компиляции

#define MACRO( x )      #x
void OnStart()
{
        Print( MACRO( "1\0" )); //равносильно Print( "\"1\\0\"" );
}

Результат  : 1

Ожидалось: "1\0"

т.е. 2-ве ошибки: пропущены кавычки " и неправильно интерпретирован символ \

и далее 

void OnStart()
{
        Print( MACRO( 1\0 )); //Error: '\' - illegal escape sequence
}
ошибка при компиляции в то время как ожидался результат: 1\0
Vladislav Andruschenko:

 

да , но клиентам то это не обьяснишь?

вот представьте, работает эксперт, работает работает, ты идешь спать, спишь, просыпаешься а эксперт не работает, почему? потому что таймер повесился, и что делать, кто виноват?  

Помогает повторный запуск с небольшой задержкой, что-то вроде:

int err=-1;
      int count=5;
      {while((err!=0)&&(count>0))
      {
         ResetLastError();
         EventSetMillisecondTimer(MSTimerSet);                    //Установка таймера XXX миллисекунд
         err=GetLastError();
         Print("EventSetMillisecondTimer n=",count," err >>",err);
         {if(err!=0){Sleep(50);}}
      }}//while((err!=0)&&(count>0))