mql4 частота обмена данными с длл - страница 2

 
Alexey Volchanskiy:
При чем тут привязка к новому бару? Требуется время задавать
Потому как ТС указал: "в зависимости от выбранного таймфрейма".
 
Sergei Vladimirov:
Их смысл в этом и заключается - чтобы не сбрасывались при смене таймфрейма, например. Если нужно обнулять при перезапуске - обнуляйте явно.

Логично, я вообще так обычно пишу, чтобы не реагировать на смены ТФ и т.д.

int LastDeinitReason = 0;

int OnInit()
{
    //WriteCommand(EnableBuy);
    Print("UninitializeReason() from OnInit = ", UninitializeReason());
    if(LastDeinitReason==REASON_CHARTCHANGE || LastDeinitReason==REASON_TEMPLATE)
    {
        LastDeinitReason = 0;
        return(INIT_SUCCEEDED);
    }
    if(LastDeinitReason==REASON_PARAMETERS)
    {
        SetParams();
        return(INIT_SUCCEEDED);                              
    }
/// инициализации при запуске
    return(INIT_SUCCEEDED);                              
}

void OnDeinit(const int reason)
{
    LastDeinitReason = reason;
    if(reason==REASON_CHARTCHANGE || reason==REASON_TEMPLATE || reason==REASON_PARAMETERS)
        return;
/// деинициализации при завершении работы
}
 
Sergei Vladimirov:
Их смысл в этом и заключается - чтобы не сбрасывались при смене таймфрейма, например. Если нужно обнулять при перезапуске - обнуляйте явно.
Особенно показателен текущий пример - использовать статик для определения нового бара, особенно когда переключился на другой период. Удачи в поиске граблей.
 
Alexey Oreshkin:
Особенно показателен текущий пример - использовать статик для определения нового бара, особенно когда переключился на другой период. Удачи в поиске граблей.
Тут и правда ошибка, надо смену ТФ или обрабатывать или явно задавать ТФ. 
 
Alexey Oreshkin:
Особенно показателен текущий пример - использовать статик для определения нового бара, особенно когда переключился на другой период. Удачи в поиске граблей.

Я ж написал: если нужно обнулять - обнуляйте явно. Или вам религия не позволяет? :)

bool NewBar(const bool bResetStatic = false)
{
   bool bRetVal = false;
   
   static datetime dtLastBarTime = Time[0];
   
   if(bResetStatic == true)
      dtLastBarTime = Time[0];
   
   if(Time[0] > dtLastBarTime)
   {
      dtLastBarTime = Time[0];
      bRetVal = true;
   }
   
   return (bRetVal);
}

 В ОнИните вызвать с параметром тру.

 
Sergei Vladimirov:

Я ж написал: если нужно обнулять - обнуляйте явно. Или вам религия не позволяет? :)

 В ОнИните вызвать с параметром тру.

Вообще, выгода от использования локальных static лишь в том, что, в отличии от глобальных мы экономим имена. То есть не надо для 10 функций объявлять 10 глобальных переменных 

bool flag1=false, flag2=false,..., flag9=false;

 А память не экономится, так как каждая локальная переменная имеет фиксированный адрес, как и глобальная и она резервируется до старта программы. По крайней мере, так в Си/С++.

 
Alexey Volchanskiy:

Вообще, выгода от использования локальных static лишь в том, что, в отличии от глобальных мы экономим имена. То есть не надо для 10 функций объявлять 10 глобальных переменных 

 А память не экономится, так как каждая локальная переменная имеет фиксированный адрес, как и глобальная и она резервируется до старта программы. По крайней мере, так в Си/С++.

Какая ещё экономия? Какая, нафиг, память, вы о чём???

Преимущество локальных переменных перед глобальными в том, что их область видимости ограничена одной функцией. Всегда ваш, кэп. )

 
Sergei Vladimirov:

Какая ещё экономия? Какая, нафиг, память, вы о чём???

Преимущество локальных переменных перед глобальными в том, что их область видимости ограничена одной функцией. Всегда ваш, кэп. )

Алексей имел в виду, что при использовании локальных переменных нет проблемы с пересечением имен, т.е. можно использовать одинаковую "static datetime dtLastBarTime" в каждой функции, а не плодить "datetime dtLastBarTime_1, datetime dtLastBarTime_2" на глобальном уровне.

С уважением, Он же ) 

 
Andrey Khatimlianskii:

Алексей имел в виду, что при использовании локальных переменных нет проблемы с пересечением имен, т.е. можно использовать одинаковую "static datetime dtLastBarTime" в каждой функции, а не плодить "datetime dtLastBarTime_1, datetime dtLastBarTime_2" на глобальном уровне.

С уважением, Он же ) 

А, ну это да. Ещё при использовании локальных i в каждом цикле не нужно плодить глобальные "int i_сycle1", "int i_cycle2"  и т.д.

 

а не плодить "datetime dtLastBarTime_1, datetime dtLastBarTime_2" на глобальном уровне. 

Нет, правда, как такие "изящные" решения вообще в голову прийти могут? ))

Причина обращения: