[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 749

 
artmedia70:
Мудры разработчики. Если б можно было скрипт вызвать, я бы в нем слип зарядил, - тоже нельзя, видимо, потому что сразу в куче советников надобность отпадает... Не видать нам простых путей :)
 

Господа программисты. Не могли бы вы мне помочь. 

из вводных переменных

extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;

int start(){
  if (UseHourTrade){
  if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
}
}

 я хочу добавить второй промежуток времени когда должна вестись торговля с другими переменными UseHourTrade2, FromHourTrade2, ToHourTrade2.

Пожалуйста помогите. скажите пожалуйста что нужно добавить в функцию старт. Просто я уже чего-только не пробовал - не получается.  

Заранее благодарен. Борис. 

 
cyclik33:
extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
 }

Как то так, наверно.

ЗЫ Кнопкой вставки кода "SRC"  пользуйтесь, читать неудобно.

 
Abzasc:

Заморочка такого плана.

Индикатор в самом конце кода создает объект, который служит флагом для другого индикатора.

Надо, после создания объекта, "усыпить" индикатор, скажем, на 5 сек, после чего удалить объект и усыпить уже сек. на 60, после чего он перейдет к последнему ретурну и с новым тиком начнет сначала.

Пытаюсь делать так

Зависает, пока, видимо, не закончится while.

Подскажите что нить умное.


Логика такая - оба индикатора знают имя объекта, и еще одного дополнительного объекта

первый создает объект и при его наличии постоянно ничего не делает - в самом начале старта прописываем это условие на выход (return;)

второй читает обьект, делает свои дела и выставляет дополнительный объект

первый не видя основного объекта выходит из ничего не делания и сразу находит второй ( доп объект), читает время создания объекта ( его туда ложит второй индюк в описание при создании), отсчитывает нужную паузу (60 сек) и удаляет, все объектов нет - можно работать дальше....

 
Abzasc:
 Не работает в индикаторах. Причину сделать именно так - не понимаю. Видимо, постоянно работающий индикатор должен гипнотизировать :) 

Причина в том, что индикатор работает в интерфейсном потоке, его усыплять нельзя, потому что если бы вы могли его «тормознуть», то в этот момент нельзя было бы нажать ни одну кнопку в терминале, например «Новый ордер», или закрыть ордер, ну и т.д.
Еще одна тонкость в этой теме, касается тестера. В реале есть несколько потоков, один интерфейсный, отдельно создается для советников (поэтому его и можно тормозить без последствий), а в тестере он один за всех, и все на одного :)
Поэтому в режиме тестирования так специфически работает функция Sleep(). Если вы усыпите поток тестера, то соответственно перестанет работать вообще все, и советники, и индикаторы, ну и генерация тиков естественно тоже. Поэтому если я правильно понял вашу задумку, ее можно будет проверить только на демо, и уж если захотите тормознуть интерфейсный поток то можно воспользоваться например такой функцией:

//+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep(int sec){
   int pause = TimeSeconds(TimeLocal()) + sec;
   if(pause >= 60)pause = pause - 60;
   while(TimeSeconds(TimeLocal()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust:


   отсчитывает нужную паузу (60 сек)

Можно попробовать, но главное то как сделать паузу... я на этом застрял.
 

читайте внимательно, я все расписал, причем совсем не обязательно при этом использовать граф объект, можно обойтись и глобалками....

 
ToLik_SRGV:

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

Вон оно как... теперь посветлело, спасибо.


Блин, ну что за камни. В один индикатор нельзя, усыплять нельзя... попробую с глобальными переменными замутить.
 
xrust:

читайте внимательно, я все расписал, причем совсем не обязательно при этом использовать граф объект, можно обойтись и глобалками....

Вроде дошло. Удаление по времени существования - тоже таймер. Но я еще раз перечитаю:)
 
Abzasc:

... попробую с глобальными переменными замутить.  

А вот это правильно, про это кажется, еще Рустам намекнул, потому как приостановка потоков, это последнее чем нужно заниматься, так сказать, крайняя мера, причем не только в MQL, а вообще во всех языках программирования.

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