Жду - не дождусь никак - страница 2

 
xrust >>:

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

Спасибо xrust. Да действительно так можно сделать и оно работает:

int init()
{   
  Print("Init " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
}

double AskPrev;

int start()
{
  int cnt=1000; 
  
  while(true) 
  {
    Comment("Loop " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
    cnt--; if(cnt<0) break; // чтобы наглухо не зациклится        
    Sleep(500); // задержка чтобы не захватить все 100% CPU usage
    RefreshRates();
    if(AskPrev!=Ask) 
    {
      AskPrev=Ask;
      Print("Tick " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
    }
    
  }
  Print("Exit " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
}
правда теоретически можно нарваться на ситуацию когда Ask за время ожидания прыгнет а потом успеет вернуться к прежнему значению и иногда можно наступить на грабли: например пропустить сработавший стоп.
 

можно просто проверять

    if(RefreshRates()) 
    {
      Print("Tick " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
    }
но тогда "сигнал" о пришедшем тике будет "генерироваться" еще и тогда, когда приходит новая котировка по какойто другой паре, а не только по той на которой висит эксперт.
 

Может, всё таки, зацикливать сам start() через эммуляцию тиков?

Это ни чем не будет отличаться от кода двумя постами выше.

Только start() будет выполняться на всех тиках в.т.ч. и на эммулированных и ни когда на глухо не зациклится.

 
Zhunko >>:

Может, всё таки, зацикливать сам start() через эммуляцию тиков?

не понял... вызов старта зациклить нельзя - его дергает сам МТ, а внутри старта у меня и так написан цикл. что имеется в виду?

 
ForexTools >>:

не понял... вызов старта зациклить нельзя - его дергает сам МТ, а внутри старта у меня и так написан цикл. что имеется в виду?

В конце start() эммулировать тик. Он на него среагирует. И всё по новой.

Можно перед эммуляцией тика поставить регулируемый Sleep().

 
Zhunko >>:

В конце start() эммулировать тик. Он на него среагирует. И всё по новой.

Можно перед эммуляцией тика поставить регулируемый Sleep().

Принципиально ничем не отличается.

 

Самый правильный вариант контроля в моем последнем варианте это проверка Volume!

Какая бы ни была цена а при приходе тика Volume становится на 1 больше, при приходе нового бара становится = 0

 
ForexTools >>:

Самый правильный вариант контроля в моем последнем варианте это проверка Volume!

Какая бы ни была цена а при приходе тика Volume становится на 1 больше, при приходе нового бара становится = 0

Интересно! Запомню.

 
Zhunko >>:

В конце start() эммулировать тик. Он на него среагирует. И всё по новой.

Можно перед эммуляцией тика поставить регулируемый Sleep().

Попробывал... Облом :-( Ни чего не получилось.

Эксперт не реагирует на обновление графика.

 
беда, а как без инета?
Причина обращения: