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

 
tol64:
Да, так и сделал, спасибо, тикает ).
 
Silent:
Да, так и сделал, спасибо, тикает ).

А теперь попробуйте так:

   string n="";
   ENUM_TIMEFRAMES current_period_tf=_Period;
   ChartSetSymbolPeriod(ChartID(),_Symbol,PERIOD_M1);
   ObjectSetInteger(0,n,OBJPROP_TIMEFRAMES,current_period_tf);
   ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);

 
MetaDriver:

А теперь попробуйте так:

Пробовал, из М1 вернуться автоматом не могу. Если перечисляю как выше

if(_Period==PERIOD_M1)  {current_period_tf=PERIOD_M1;};

через раз, но возвращаюсь, если присваиваю сразу _Period, как упал в М1, так там и остался.

upd не спасает даже вынесенная в конец индика

     if(_Period==PERIOD_M1) {ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);};

хз почему затирает, разбираюсь пока.

 

Это костыль вместо синхронизации (на выходной, когда нет тиков). Идея как танк - есть ошибка - перекл. на М1 и вернуться.

   if(_LastError!=0)
     {
      ChartSetSymbolPeriod(ChartID(),_Symbol,PERIOD_M1);
      ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);
     };
   if(_LastError==0)
     {
      ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);
     };
// и контрольный
   if(_Period==PERIOD_M1) {ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);};
только из М1 очень не всегда выпускает.
 
Silent:

Пробовал, из М1 вернуться автоматом не могу. Если перечисляю как выше

через раз, но возвращаюсь, если присваиваю сразу _Period, как упал в М1, так там и остался.

Твой случай лечится небольшим слипом.

   string n="";
   ENUM_TIMEFRAMES current_period_tf=_Period;
   ChartSetSymbolPeriod(ChartID(),_Symbol,PERIOD_M1);
   Sleep(150);
   ObjectSetInteger(0,n,OBJPROP_TIMEFRAMES,current_period_tf);
   ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);

У меня хуже.  (Кстате, раньше твой случай без Слип'а работал, перестал несколько недель назад)

Такая же схема перестала срабатывать без жутких слипов на других (не текущем) чартах:

void cChartReInit::Run() // Scanning all charts and reinit if button is pushed
  {
   for(long i=ChartNext(0);i>0;i=ChartNext(i))
    {
     if(!ChartGetInteger(i,CHART_WINDOW_IS_VISIBLE)) continue;
     long wc = ChartGetInteger(i,CHART_WINDOWS_TOTAL);
     long wi = ObjectFind(i, pButtonName);
     if(--wc!=wi) { CreateReinitButton(i); ChartRedraw(i); continue;}
     if(ObjectGetInteger(i,pButtonName,OBJPROP_STATE))
       {
        ObjectSetInteger(i,pButtonName,OBJPROP_STATE,false);
        ENUM_TIMEFRAMES cp = ChartPeriod(i);
        Sleep(1350);  // раньше это было не нужно
        ChartSetSymbolPeriod(i, ChartSymbol(i), ((cp==PERIOD_M1) ? PERIOD_M5 : PERIOD_M1));
        Sleep(1350);  // раньше это было не нужно
        ChartSetSymbolPeriod(i, ChartSymbol(i), cp);
       }
     ChartRedraw(i);
    } // for(Charts)
  }
Код отсюда: https://www.mql5.com/ru/code/224
ChartReinit
ChartReinit
  • голосов: 7
  • 2010.11.29
  • Vladimir Gomonov
  • www.mql5.com
Кнопочная переинициализация чарта с перерасчетом всех индикаторов, а также простенький и прозрачный объектно-ориентированный пример обработки всех чартов из одного эксперта.
 
MetaDriver:

Твой случай лечится небольшим слипом.

У меня хуже.  (Кстате, раньше твой случай без Слип'а работал, перестал несколько недель назад)

Но такая же схема перестала срабатывать без жутких слипов на других (не текущем) чартах:

Код отсюда: https://www.mql5.com/ru/code/224/10323

Слип же не работает в индикаторах?

Ссылка на 404 стр. кидает

 
Silent:

Слип же не работает в индикаторах?

Ссылка на 404 стр. кидает

Мдя.  :(

Попробуй какой-нить затратный цикл..

Можно через таймер сделать, но мне чёта не нравица фсё эта.

// Ссылко поправил.  Первый раз через "мои коды" брал, сейчас через общий вход в кодобазу.  // Щас работает?  Или разлогиниться надо чтоб общедоступную ссыль получить?

 
MetaDriver:

Мдя.  :(

Попробуй какой-нить затратный цикл..

Можно через таймер сделать, но мне чёта не нравица фсё эта.

Пробовал OnTimer прикручивать с ChartRedraw вместо переключения на другой тф - глухо, обновляет, но ошибка висит.

Покурю ещё.

upd есть подозрение, что это всё с потоками связано. Где то они не стыкуются, один висит с ошибкой, дрогой сам по себе тикает. Рассинхронизация, однако. И команды на полный перерасчет нет.

Пробовал ещё

#define  RESET 0

   if(_LastError!=0)
     {
     return(RESET);
     };
это похоже вообще не работает. Хотя в кодобазе взял.
 
Silent:

Пробовал OnTimer прикручивать с ChartRedraw вместо переключения на другой тф - глухо, обновляет, но ошибка висит.

Покурю ещё.

Нет так не сработает.  Пауза нужна после первого переключения перед вторым.
 
MetaDriver:

...

// Ссылко поправил.  Первый раз через "мои коды" брал, сейчас через общий вход в кодобазу.  // Щас работает?  Или разлогиниться надо чтоб общедоступную ссыль получить?

Да, работает.