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

 
Практически все советники, которые я до сих пор встречал работают по приходу нового тика. Может быть есть возможность организовать в советнике что-то вроде тактового генератора, для управления ордерами не ожидая прихода нового тика, а сразу по выполнении условия ?
[Удален]  
В тему: Как организовать в советнике проверку содинения:
вроде 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.