Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 556

 

belck
:

приветствую!

помогите разобраться. пытаюсь сделать в советнике закрытие сделок в пятницу за пол часа до закрытия сессии.

пробовал по учебнику, то ничего у меня не получилось

может у кого уже готовый код есть.

код закрытия у меня есть. мне нужен сам сигнализирующий закрытие сессии за 30 минут.

Может так.

extern datetime DateTime = D'2014.03.21 11:30';  // Дата и время закрытия



if (TimeCurrent()>=DateTime)
  {
  }
ситуация в том, что дата мне не нужна. нужно, что бы при наступлении каждой пятницы, за 30 минут и в течении 30 минут до завершения сессии сигнализировать, а дальше сигнал я встрою в код закрытия ордеров. и нужно, что бы код учитывал сам, когда закрывается сессия, так как часовые пояса разные и бывают переходы с летнего и на зимнее время.
 
У меня работает вот это, сбоев не было.
//---закрыть все позиции в пятницу в 19-40 по серверному времени 
   if(DayOfWeek()==5 && Hour()==19 && Minute()>40){
      //Дать сигнал на закрытие всех позиций    
       
   } 
 
belck:

приветствую!

помогите разобраться. пытаюсь сделать в советнике закрытие сделок в пятницу за пол часа до закрытия сессии.

пробовал по учебнику, то ничего у меня не получилось

может у кого уже готовый код есть.

код закрытия у меня есть. мне нужен сам сигнализирующий закрытие сессии за 30 минут.


Вот так может более универсально к любому брокеру. Жаль пока функции нет разницы котировок брокера с UTC

void OnStart()
  {
//---
   int hrd=-3; // разница времени в часах котировок брокера с Гринвичем
   datetime tc=TimeCurrent();
   if(f_ts(tc,hrd)>0) Print("CloseAll()");
  }
//+------------------------------------------------------------------+


int f_ts(datetime ti, int hrd)
{
   if(TimeDayOfWeek(ti)!=5) return(-1); // если не пятница  выходим
   datetime t0d,te;
   int dtd=1440*60, res=-1;
   t0d=ti/dtd*dtd;        // начало торгового дня
   te=t0d+dtd-30*60+hrd*3600;     // 30 мин до конца сессии
   if (ti>te)  res=1;
   else        res=0;
   return(res);
 
granit77:
У меня работает вот это, сбоев не было.

пробовал так делать, тестировал через тестер, то функция не работала.
 

Ну это в тестере и не должно работать.

if(DayOfWeek()==5 && Hour()==19 && Minute()>40)

Функции выдают исходя из текущего времени, а то что я написал выше будет работать поскольку TimeCurrent() и TimeDayOfWeek() работает корректно . Только надо еще дописать функцию перехода на летнее и зимнее время брокеров, т.е. параметр hrd. Переход как правило по американскому DST времени (первое воскресенье ноября второе воскресенье марта), но некоторые брокеры не осуществляют переход, так что ориентируйтесь на своего

 
belck:

приветствую!

помогите разобраться. пытаюсь сделать в советнике закрытие сделок в пятницу за пол часа до закрытия сессии.

пробовал по учебнику, то ничего у меня не получилось

может у кого уже готовый код есть.

код закрытия у меня есть. мне нужен сам сигнализирующий закрытие сессии за 30 минут.

r772ra:

Может так.

Совсем не так.

Надо определить время закрытия сессии datenime SessionClose = ... Если-же закрытие не сессии, а торгов, то SessionClose = StrToTime("23:30");

Определить день недели TimeDayOfWeek()

Если пятница, то проверяем время TimeCurrent() >= SessionClose

 
AlexeyVik:

Совсем не так.

Надо определить время закрытия сессии datenime SessionClose = ... Если-же закрытие не сессии, а торгов, то SessionClose = StrToTime("23:30");

Определить день недели TimeDayOfWeek()

Если пятница, то проверяем время TimeCurrent() >= SessionClose


более подробнее кодом описать можете?
 
AlexeyVik:

Совсем не так.

Надо определить время закрытия сессии datenime SessionClose = ... Если-же закрытие не сессии, а торгов, то SessionClose = StrToTime("23:30");


время закрытия сессии datenime SessionClose = ... и торгов ... работать в тестере не будет как вы его не определяйте :) Проверьте с начала марта и до сего дня
 
belck:

более подробнее кодом описать можете?

Могу. Но это противоречит моим принципам.


GSB:
время закрытия сессии datenime SessionClose = ... и торгов ... работать в тестере не будет как вы его не определяйте :) Проверьте с начала марта и до сего дня

А при чём тут тестер??? Хотя и в тестере работало до последних обновлений. Теперь спорить не буду, не проверял и не скоро заставят включить тестер.
 
AlexeyVik:

Могу. Но это противоречит моим принципам.


А при чём тут тестер??? Хотя и в тестере работало до последних обновлений. Теперь спорить не буду, не проверял и не скоро заставят включить тестер.

С принципами возражений нет, но человек хочет советник прогнать на тестере, поэтому ваши варианты ему не подходят.

belck Воспользуйтесь моим вариантом, он будет работать и в реале и в тестере, но пока не сделали функцию для автоматического учета перехода на зимнее-летнее время, определите время перехода на этот год типа

string data_1="2014.03.09"; string data_2="2013.11.03";
if(TimeCurrent() < StrToTime(data_1) && TimeCurrent() > StrToTime(data_2) ) hrd=-2; else hrd=-3;
С марта 2013 и до ноября 2014 будет работать и тестироваться корректно. Сдвиг поставьте соответственный своему брокеру