Учусь писать индикатор...

 

Добрый день!

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

ObjectSet (name, OBJPROP_TIME1, StrToTime ("2008.11.07 00:00:00")); //начало дня

ObjectSet (name, OBJPROP_TIME2, StrToTime ("2008.11.07 23:59:59"));//конец дня

Как указать начало и конец текущего дня, недели, месяца? 

Как указать начало и конец  отдельно выбранного дня, недели, месяца? 

Заранее спасибо.


 
 
А на примере можно показать..
 
ObjectSet (name, OBJPROP_TIME1, Time (i));     // Начало.
ObjectSet (name, OBJPROP_TIME2, Time (i - 1)); // Конец.
 

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

Допустим на начало дня его можно использовать как - iTime(NULL,PERIOD_D1,0), но для конца дня не получится, т.к. бывает разница во времени между ценами закрытия дня и открытия след. дня..

 

Время начала всех периодов определил через - iTime(NULL,PERIOD_D1,0), спасибо Zhunko за ссылки.

Конец дня через - iTime (NULL,PERIOD_D1,0) + 86400, т.е. прибавил к открытию время всего дня 86400 сек.

Конец недели - iTime (NULL,PERIOD_W1,0) + 518400, сначало прибавлял к открытию 86400*5, т.е. 432000, но линия не дорисовывала 1 день!! Пришлось умножать на 6 и добавлять к открытию 518400 ... Странно!

Конец месяца - iTime (NULL,PERIOD_MN1,0) + 86400*30, получилась загвостка, т.к. разное количество дней в каждом месяце... и непонятно как определить его конец?...

 
ALex2008 писал(а) >>

Время начала всех периодов определил через - iTime(NULL,PERIOD_D1,0), спасибо Zhunko.

Конец дня через - iTime(NULL,PERIOD_D1,0)+ 86400, т.е. прибавил к открытию время всего дня 86400 сек.

Конец недели - iTime(NULL,PERIOD_W1,0)+518400, сначало прибавлял к открытию 86400*5, т.е. 432000, но линия не дорисовывала 1 день!! Пришлось умножать на 6 и добавлять к открытию 518400 ... Странно!

Конец месяца - iTime(NULL,PERIOD_MN1,0)+86400*30, получилась загвостка, т.к. разное количество дней в каждом месяце... и непонятно как определить его конец?...

на каждлм тф конечно прибавляется разное значение

но сначала нужно получить дату

конец месяца определить можно так

даю пример алгоритма из боевых программ

--

Вход : Вам известен текущий месяц

прибавим месяц вперед

отнимаем один день

получаем конец текущего месяца

--

код я не даю, но алгоритм всегда важнее кода :-)

 

Конечно можно былобы  взять время открытия след. месяц  но iTime(NULL,PERIOD_MN1,-1) недупустимо(


YuraZ >>:

Вход : Вам известен текущий месяц

прибавим месяц вперед

отнимаем один день

получаем конец текущего месяца

Если честно, то не очень понятно.. прибавить 31 день и отнять 1 день?.. Но это будет работать только в текущем месяце, в котором 30 дней.. 

 
ALex2008 писал(а) >>

Конечно можно былобы взять время открытия след. месяц но iTime(NULL,PERIOD_MN1,-1) недупустимо(

Если честно, то не очень понятно.. прибавить 31 день и отнять 1 день?.. Но это будет работать только в текущем месяце, в котором 30 дней..

сейчас 09.11.2008 мы хотим вычислить дату конца текущего месяца

берем

11+1 т е получаем 12-й месяц

затем встанем на 1-е число 12го месяца

01.12.2008 - 1 = 30.11.2208

находясь в феврале 2008 го прибавив месяц и став на 1-е число получим конец месяца вискокосного года

берем 01-03-2008 -1 = 29.02.2008 ( все прекрасно работает для любых ситуаций )

осталось только обработать переход новогодний переход

12+1 = 13 получив 13 - увеличиваем год и подставляем 01 в номер месяца

и опять же 01.01.2009 - 1 = 31.12.2008

---

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

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

понимая на каком тф всегда можно прибавить столько баров сколько их умещается в конкретном периоде

тем самым всегда можно вычислить нужные точки для конца или начала линии

 

Спасибо YuraZ

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

Прочитал об TimeMonth и решил сделать так:

int m;
int d;
datetime TimeEndMonth; 

m=TimeMonth(TimeCurrent());

  if (m==1) d=31;
  if (m==2) d=28;
  if (m==3) d=31;
  if (m==4) d=30;
  if (m==5) d=31;
  if (m==6) d=30;
  if (m==7) d=31;
  if (m==8) d=31;
  if (m==9) d=30;
  if (m==10) d=31;
  if (m==11) d=30;
  if (m==12) d=31;
 

TimeEndMonth = (iTime (NULL,PERIOD_MN1,0) + 86400*d) //Конец месяца!

Единственное но, это високосный год. Думаю через 4 года научусь чему-нить)

 

Ещё вопрос... 

Использую описание для объекта через ObjectSetText(name,"описание",10)

Если в описание подставить цену например взяв из double HighMN  =iHigh(NULL,PERIOD_MN1,0)

то описание ObjectSetText(name,HighMN,10) выводит цену с лишними 4-мя нулями - 1.28500000

Как избавиться от лишних нулей?

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