Открытие сделок в часах, минутах и секундах.

 

Здравствуйте, друзья.

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

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

string TIME = TimeToStr(Time[0],TIME_MINUTES);

if(TIME == "13:46")
{

. . .

}


 
просто забуь о секундах, там ничего нет
 

опираться лучше на время открытия бара на текущем ТФ 

меня просили сделать закрытие сделок за ХХ секунд до закрытия текущего бара, написал такую ф-цию:

bool CHeckBarTimeLeft(int sec)
  {
   datetime t;
   t=TimeCurrent()-Time[0];
   if(t>=(PeriodSeconds()-sec)) return(true);
   return(false);
  }

входной параметр сколько секунд до закрытия бара анализировать, выход если до закрытия бара осталось меньше sec то вернем true

модифицируйте мой пример под свои задачи самостоятельно


если речь идет о конкретном времени открытия сделки, то переведите исходные данные в формат datetime и сравнивайте с временем сервера, примерно так:

// откроем ордер сегодня в 10:39:14
   input int inputHour = 10;  //часы
   input int inputMin = 39;   //минуты
   input int inputSec = 14;   //секунды
   .......
   
   MqlDateTime date=TimeCurrent();
   date.hour = inputHour;
   date.min = inputMin;
   date.sec = inputSec;
   datetime ordertime = StructToTime(date);
   .....
   if(TimeCurrent()>=ordertime)  OrderSend(......
 
Stepan Moiseev:

Здравствуйте, друзья.

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

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

string TIME = TimeToStr(Time[0],TIME_MINUTES);

if(TIME == "13:46")
{

. . .

}


Если этот код выполняется в OnTick(), то будут пропуски. Тики не приходят с каким-то заданным периодом. Между ними могут быть довольно ощутимые перерывы. В некоторых случаях - минуты. Что уж говорить о секундах?

 
Stepan Moiseev:

Здравствуйте, друзья.

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

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

string TIME = TimeToStr(Time[0],TIME_MINUTES);

if(TIME == "13:46")
{

. . .

}


Как же не помочь хорошему человеку-легенде :)

//Объявляем переменные

bool FlagOpen;
string TIME;

// в OnInit инициализируем переменные и таймер

int OnInit()
  {
        FlagOpen=false;
        TIME="";
      EventSetTimer(1);   
//---
   return(INIT_SUCCEEDED);
  }

//в OnDeinit "убиваем" таймер

void OnDeinit(const int reason)
  {
   EventKillTimer();
  }

// в таймере выполняем нужный код

void OnTimer() 
  { 

      TIME = TimeToString(TimeCurrent(),TIME_SECONDS);
      if(TIME == "00:50:10" && !FlagOpen)
         {
            Print("Время наступило! Открываем сделку: "+TIME);
            FlagOpen=true;
            TIME="";
         }
      if(TIME == "00:51:20" && FlagOpen)
         {
            Print("Время наступило! ЗАКРЫВАЕМ сделку: "+TIME);
            FlagOpen=false;
            TIME="";
         }
  }
 

Котировки приходят когда им вздумается, могут задерживаться на много секунд, поэтому TimeCurrent не подходит.  

Нужно синхронизировать время брокера со своим локальным временем
И ловить нужную секунду по таймеру компьютера.

 
Taras Slobodyanik:

Котировки приходят когда им вздумается, могут задерживаться на много секунд, поэтому TimeCurrent не подходит.  

Нужно синхронизировать время брокера со своим локальным временем. 
И ловить нужную секунду по таймеру компьютера.

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

может Вы и правы, но на моей практике работает четко только система - пришел тик - можно заниматься ордерами, нет тика, то скорее всего на любые действия с ордерами получишь реквоту или не правильные цены

 
Igor Makanu:

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

может Вы и правы, но на моей практике работает четко только система - пришел тик - можно заниматься ордерами, нет тика, то скорее всего на любые действия с ордерами получишь реквоту или не правильные цены

Да, бывает такое. Приходится ждать тика.

 
Igor Makanu:

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

может Вы и правы, но на моей практике работает четко только система - пришел тик - можно заниматься ордерами, нет тика, то скорее всего на любые действия с ордерами получишь реквоту или не правильные цены

тики не нужны, (нужен только один-первый тик, для сравнения/синхронизации времени), дальше считается только локальное время, и по нему всё считается/открывается/закрывается.

...открою секрет - для открытия/закрытия ордеров не нужно ждать тики)

 
Taras Slobodyanik:

тики не нужны, (нужен только один-первый тик, для сравнения/синхронизации времени), дальше считается только локальное время, и по нему всё считается/открывается/закрывается.

...открою секрет - для открытия/закрытия ордеров не нужно ждать тики)

что значит не нужно ждать тики?, а как же 3 секунды и оффквот (нет цены)

 
Stepan Moiseev:

Здравствуйте, друзья.

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

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

string TIME = TimeToStr(Time[0],TIME_MINUTES);

if(TIME == "13:46")
{

. . .

}


Вот здесь функция TimeCross() ее можно доработать немного. Но не нужны эти секунды.

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