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

 
tol64:

Тогда а) почему для объекта работает б) если заменить, начинают сыпаться

'0x00000008' - can't convert enum

причем не все, только 18 из 21 строки...

попробую все переписать, всё равно не понятно. Тип то один вроде.

 
Silent:

Тогда а) почему для объекта работает б) если заменить, начинают сыпаться

причем не все, только 18 из 21 строки...

попробую все переписать, всё равно не понятно. Тип то один вроде.

ENUM_TIMEFRAMES current_period_tf=PERIOD_CURRENT;
   string n="";
   if(_Period==PERIOD_M1)  {current_period_tf=PERIOD_M1;};
   if(_Period==PERIOD_M2)  {current_period_tf=PERIOD_M2;};
   if(_Period==PERIOD_M3)  {current_period_tf=PERIOD_M3;};
   if(_Period==PERIOD_M4)  {current_period_tf=PERIOD_M4;};
   if(_Period==PERIOD_M5)  {current_period_tf=PERIOD_M5;};
   if(_Period==PERIOD_M6)  {current_period_tf=PERIOD_M6;};
   if(_Period==PERIOD_M10) {current_period_tf=PERIOD_M10;};
   if(_Period==PERIOD_M12) {current_period_tf=PERIOD_M12;};
   if(_Period==PERIOD_M15) {current_period_tf=PERIOD_M15;};
   if(_Period==PERIOD_M20) {current_period_tf=PERIOD_M20;};
   if(_Period==PERIOD_M30) {current_period_tf=PERIOD_M30;};
   if(_Period==PERIOD_H1)  {current_period_tf=PERIOD_H1;};
   if(_Period==PERIOD_H2)  {current_period_tf=PERIOD_H2;};
   if(_Period==PERIOD_H3)  {current_period_tf=PERIOD_H3;};
   if(_Period==PERIOD_H4)  {current_period_tf=PERIOD_H4;};
   if(_Period==PERIOD_H6)  {current_period_tf=PERIOD_H6;};
   if(_Period==PERIOD_H8)  {current_period_tf=PERIOD_H8;};
   if(_Period==PERIOD_H12) {current_period_tf=PERIOD_H12;};
   if(_Period==PERIOD_D1)  {current_period_tf=PERIOD_D1;};
   if(_Period==PERIOD_W1)  {current_period_tf=PERIOD_D1;};
   if(_Period==PERIOD_MN1) {current_period_tf=PERIOD_MN1;};
   ChartSetSymbolPeriod(ChartID(),_Symbol,PERIOD_M1);
   ObjectSetInteger(0,n,OBJPROP_TIMEFRAMES,current_period_tf);
   ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);
 
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);
     };
это похоже вообще не работает. Хотя в кодобазе взял.
Причина обращения: