Работа советника без прихода нового тика

 
Практически все советники, которые я до сих пор встречал работают по приходу нового тика. Может быть есть возможность организовать в советнике что-то вроде тактового генератора, для управления ордерами не ожидая прихода нового тика, а сразу по выполнении условия ?
 
В тему: Как организовать в советнике проверку содинения:
вроде if(!IsConnected()) PlaySound("alert.wav");?
Ведь если нет соединения => нет тика => нет выполнения start{}?
 
Очевидно такая возможность есть с помощью GetTickCount() . Видимо можно с первым же тиком построить Loop c тактовым распределителем внутри. В начале каждого такта RefreshRates().
 
Digger писал (а):
Очевидно такая возможность есть с помощью GetTickCount() . Видимо можно с первым же тиком построить Loop c тактовым распределителем внутри. В начале каждого такта RefreshRates().
Ну выкинет флажок, по истечении N-миллисекунд и опять будет ждать новый тик. Может организовать как-нибудь через CurTime(), то есть привязаться к секундам внутренних часиков.    
 
int init(){start();}
 
int start(){
while(!IsStopped()){
RefreshRates();
//--------------------------
if (IsConnected)
      {
      // advisor code
      }
      else
      {
      //no connection alert
      }
 
//--------------------------
Sleep(1000);
}return(0);}
Нужно вот такую структуру советника использовать.
В таком случае советник вообще не зависит от поступления тиков и запускается раз в секунду.
 
Ronen:
int start(){
while(!IsStopped()){
RefreshRates();
//--------------------------
if (IsConnected)
      {
      // advisor code
      }
      else
      {
      //no connection alert
      }
 
//--------------------------
Sleep(1000);
}return(0);}
Можно вот такую структуру советника использовать...

Спасибо, будем пробовать.
 
FION писал (а):
Digger писал (а):
Очевидно такая возможность есть с помощью GetTickCount() . Видимо можно с первым же тиком построить Loop c тактовым распределителем внутри. В начале каждого такта RefreshRates().
Ну выкинет флажок, по истечении N-миллисекунд и опять будет ждать новый тик.
Не будет он ждать нового тика если Вы не вышли из цикла.

extern TimeSlice;

int start() {
TQ=GetTickCount();
while(true) {
if(GetTickCount-TQ==TimeSlice) {
RefreshRates();
.
.
.
TQ=GetTickCount();
}
}
Тоже самое можно делать и со Sleep() но Sleep()-TimeOut Timer а GetTickCount- Interval Timer и поэтому предпочтительнее
 
Необходимо упомянуть, что зацикленные эксперты нельзя протестировать на истории.
 
Digger писал (а):
FION писал (а):
Digger писал (а):
Очевидно такая возможность есть с помощью GetTickCount() . Видимо можно с первым же тиком построить Loop c тактовым распределителем внутри. В начале каждого такта RefreshRates().
Ну выкинет флажок, по истечении N-миллисекунд и опять будет ждать новый тик.
Не будет он ждать нового тика если Вы не вышли из цикла.

extern TimeSlice;

int start() {
TQ=GetTickCount();
while(true) {
if(GetTickCount-TQ==TimeSlice) {
RefreshRates();
.
.
.
TQ=GetTickCount();
}
}
Тоже самое можно делать и со Sleep() но Sleep()-TimeOut Timer а GetTickCount- Interval Timer и поэтому предпочтительнее
В принципе все понятно, спасибо. Кстати это неплохой метод избежать реквотов.
 
Renat писал (а):
Необходимо упомянуть, что зацикленные эксперты нельзя протестировать на истории.
Спасибо за предупреждение ,а то бы парился зазря. Будем использовать эту функцию уже после доводки советника по стандартной методике.
 
FION писал (а):
Практически все советники, которые я до сих пор встречал работают по приходу нового тика. Может быть есть возможность организовать в советнике что-то вроде тактового генератора, для управления ордерами не ожидая прихода нового тика, а сразу по выполнении условия ?

А какое условие может выполниться, если не поступил тик (не изменилась цена)? Может только выйти какой-то timeout.
Причина обращения: