Тормоза при запуске терминала - страница 2

 
jartmailru:

Звучит так, что если на оффлайновый график накинуть индикатор- то индикатор не будет рассчитываться.

один раз - посчитается, после инита. но до следующего тика - никаких расчетов. кто вызывает start в индикаторе? ;) тик! а если нет конекта - нет тика - нет....
 
ForexTools:
один раз - посчитается, после инита. но до следующего тика - никаких расчетов. кто вызывает start в индикаторе? ;) тик! а если нет конекта - нет тика - нет....

Да, в контексте темы- только один раз. И все. Ваша правда. 

Но вариант есть.

Индикаторам запрещаем считаться раньше, чем через 10 секунд после запуска. 

Запускаем терминал через другое, специальное  приложение. 

(запускаем его- а оно запускает терминал).

Оно ждет, когда терминал загрузится- скажем, 10 секунд- или сколько скажут.

А потом- в каждое окошко присылает команду посчитать индикаторы- и выходит.

Заготовка под такую тему у меня есть. 

.

Можно еще один вариант - индикатор в ините подгружает DLL с этой же функцией.

DLL ждет 10 секунд и потом присылает тик. 

 

makskeep:

ПоделИтесь, товарищи, более элегантным решением проблемы?

Перебросить код индюка в эксперт и тогда проблема тормозов индюка окончательно отпадет.
 
Andrei01:
Перебросить код индюка в эксперт и тогда проблема тормозов индюка окончательно отпадет.

     Это произойдет обязательно, но значительно позже, когда отпадет необходимость в дополнительной информации ненулевого окна. В данный момент необходимо чтоб именно индикатор не тормозил запуск 

ForexTools:
кто вызывает start в индикаторе? ;) тик! а если нет конекта - нет тика - нет....

     Немного оффтоп, но я эмулирую "бесконечным" скриптом кнопку "обновить", т.о. start вызывается около десяти раз в секунду если свободен

Вообще, зачем мне это нужно.  Мой индикатор,  в зависимости от вводных параметров, обсчитывается в оччень длинном цикле (минут от <1 до х.з. десяти), при этом выдает разнообразную информацию, в том числе и динамическую, и красивости типа красно-зеленой полосы прогресса. Чтобы в длинном цикле терминал не висел и индюк мог выдавать промежуточные и прочие результаты в разных видах,  используется инклюдя с длл-кой от сюда- https://www.mql5.com/ru/code/8829 

Понятно, что при запуске терминала, особенно если только что правил код индикатора, совсем не ясно, обсчитывается ли  он и можно сходить покурить, или висит и его надо убить. К тому же иногда требуется видеть сам процесс расчетов...

Спасибо всем откликнувшимся- каждый из предложенных способов так или иначе применим и более или менее эффективен

makskeep:
Вот, каким макаром из индикатора узнать, что терминал весь нарисовался...

Наверняка есть какой-н. секрет, способ, недокументированная особенность... Может в F1- Операции с графиками покопаться?

 
makskeep:

Это произойдет обязательно, но значительно позже, когда отпадет необходимость в дополнительной информации ненулевого окна. В данный момент необходимо чтоб именно индикатор не тормозил запуск

Может не стоит зря огород городить шоб потом всё и так переделывать? Обычно выгодней один раз написать хорошо чем десять раз криворуко, тем более если кривой код начинает делать проблемы.

А шо за проблема с ненулевым окном - если вся инфа будет в експерте то и лазить по окнам уже не надо будет.

 
makskeep:

Немного оффтоп, но я эмулирую "бесконечным" скриптом кнопку "обновить", т.о. start вызывается около десяти раз в секунду если свободен

Вообще, зачем мне это нужно. Мой индикатор, в зависимости от вводных параметров, обсчитывается в оччень длинном цикле (минут от <1 до х.з. десяти), при этом выдает разнообразную информацию, в том числе и динамическую, и красивости типа красно-зеленой полосы прогресса.....

Наверняка есть какой-н. секрет, способ, недокументированная особенность...

тогда уж проще переделать все в скрипт и ручками сбрасывать его или запускать горячей клавишей.
 

В этом случае- проще подвесить стороннюю программу, которая будет посылать обновление на окошки.

Потому что скрипт слетает при переключении таймфреймов.

К сожалению, у обновления окошек есть маленький нюанс- трафик вырастает во много раз. 

 

Господа-товарищи, попробую резюмировать что же собственно у нас тут наобсуждалось. Имеется индикатор, от старта до финиша итераций по самое немогу, выполняющийся ВНЕ интерфейсного потока терминала(т.е. терминал по определению не висит при выполнении этого инд.)

Требуется решение для запрета вычислений при первом запуске, чтобы terminal.exe запускался штатно а не по несколько минут.
Первоначальное решение есть в первом топике. Его недостаток- запустить индикатор вручную- нажать кнопку обновить, либо запустить соответствующий скрипт.

Предпологается что предложенные, иные варианты, будут без недостатков

Итого; 

  • Все предложенные варианты работоспособны
  • Все предложенные варианты имеют не менее одного недостатка
  • Некоторые решения имеют преимущества (неотносящиеся к теме) +1 все же
  • Одно я вообще не понял (про систему маркеров)
  • Как автор своего метода, на другой пока не перешел, увы...

 
makskeep:
  • Все предложенные варианты имеют не менее одного недостатка
интересно, а какой недостаток у моего метода? :)
 

Вчера столкнулся с такой проблемой со своим индикатором... Для себя решил следующим способом:

int LastConnected, LastNotConnected;
int PauseAfterConnected = 30000;

int init()
{
   if (IsConnected())
   {
      LastConnected = GetTickCount();
      LastNotConnected = GetTickCount() - PauseAfterConnected;
   } else {
      LastNotConnected = GetTickCount();
      LastConnected = 0;
   }
   return(0);
}

int start()
{
   if (IsConnected())
      LastConnected = GetTickCount();
   else
      LastNotConnected = GetTickCount();
   if ( (LastConnected - LastNotConnected) < PauseAfterConnected )
      return(NULL);
   // тело
}


Т.е. при старте терминала по определению не может быть связи, а если индикатор устанавливается на запущенном терминале, то как правило связь бывает... Делается пауза для подкачки истории.

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