Помогите пожалуйста создать индикатор - страница 2

 
Vinin писал (а) >>

Константы даты и времени могут быть представлены в виде литеральной строки, которая состоит из 6 частей, представляющих числовое значение года, месяца, числа (либо числа, месяца, года), часа, минуты и секунды. Константа обрамляется одинарными кавычками и начинается с символа D. Может опускаться либо дата (год, месяц, число), либо время (часы, минуты, секунды), либо все вместе. Диапазон значений от 1 января 1970 года до 31 декабря 2037 года.

Примеры:

Внутреннее представление - длинное целое число размером 4 байта. Значение представляет собой количество секунд, прошедшее с 00:00 1 января 1970 года.







У меня тоже есть помощник =) Я имел ввиду в контексте программы я не понял что вы написали.

Что вместо D'2008.06.16 12:33' можно написать D'12:33' ???

Так так почему то не получается смотрите пост выше, ошибку выдает.

 

Проще всего использовать тип не даты, а инт. И работать с ним как с любым целым числом. Можно просто вычислить нужное значение. А при подстановке в функцию будет автоматом преобразовано в нужный формат

 
Vinin писал (а) >>

Проще всего использовать тип не даты, а инт. И работать с ним как с любым целым числом. Можно просто вычислить нужное значение. А при подстановке в функцию будет автоматом преобразовано в нужный формат

Для меня пока что это сложно видимо. Ну ничего.

Вопрос такой, можно ли на линии которая будет прорисована написать ее название? подскажите какой идентификатор такое делает, а то я что то не могу найти.

БОЛЬШОЕ СПАСИБО ВСЕМ ЗА ПОМОЩЬ. .

 
Haribin писал (а) >>
exact - Возвращаемое значение если бар не найден. FALSE - iBarShift возвращает ближайший. TRUE - iBarShift возвращает -1.

Это из помощника. Я просто тут не понял немного. False - это значит если нет бара, то он возвращает ближайщий, то есть 0 то есть последний который появился. А что значит TRUE ? То что возвращает просто число -1,если бар не найден?

А как тогда расшифровуется эта строчка

i=iBarShift(NULL,0,my_time,TRUE);
if (i>0)

То есть, как я понимаю, i это тот бар который я хочу проанализировать, на (NULL) текущем инструменте, в (0) периоде моего графика, во время my_time, и если этого бара не существует, то берется а) ближайший, и б) просто число -1? Вот тут мне не понятно.

А следующий оператор if (i>0) показывает чтобы этот бар не был последним? Только что появившимся?

Очередное спасибо за розъяснения.



Извините, не понял.

1. Функция iBarShift вернет смещение бара, в который попадает заданное в качестве параметра время. Нюанс возникает, если для заданного времени нет бара. Причем, это не обязательно будущее время (для которого по определению бара нет), но и прошлое (у Вас может отсутствовать история на каком-либо интервале времени или был выходной), т.е. "ближайший бар" это не обязательно 0-ой.

Т.о., если Вы желаете однозначно идентифицировать ситуацию с отсутствием искомого бара, то в функцию надо передать значение TRUE. Если бар не будет найден, она вернёт значение -1, иначе - номер найденного бара.

2. В своем примере я использовал условие ( i >= 0 ), т.е. я не исключал нулевой бар из рассмотрения, я исключил случаи, когда для запрошенного времени не был найден бар.

3. В большинстве случаев 0-ой бар не следует использовать при построении индикаторов, т.к. он [нулевой бар] находится в процессе формирования. Но это совет на будущее, к Вашему нынешнему вопросу отношения не имеет.

 

И все таки, как на линии написать ее название, это можно так сделать?

Чтобы прямо на линии было написано "Линия 1".

Очередное спасибо.

 

В действительности, научиться любому ремеслу очень просто. Нужно лишь овладеть всеми понятиями, на основе которых это ремесло зиждется. Это справедливо также и для такого дела, как написанию идикаторов. Просто почитайте вот здесь https://book.mql4.com/ru/samples/icustom.

Начните с того, что напишите самый простой индикатор. Пусть он нарисует линию по вершинам свечей (по ссылке есть такой пример). При этом важно понимать каждую строчку в своей программе. Потом напишите ещё пару простых индикаторов, но уже отражающих другие закономерности.

Надпись индикатор делать не умеет. Но можно вывести на экран графический объект, отображающий любой текст длиной до 62 символов. Об этом здесь https://book.mql4.com/ru/functions/objects

 
SK. писал (а) >>

В действительности, научиться любому ремеслу очень просто. Нужно лишь овладеть всеми понятиями, на основе которых это ремесло зиждется. Это справедливо также и для такого дела, как написанию идикаторов. Просто почитайте вот здесь https://book.mql4.com/ru/samples/icustom.

Начните с того, что напишите самый простой индикатор. Пусть он нарисует линию по вершинам свечей (по ссылке есть такой пример). При этом важно понимать каждую строчку в своей программе. Потом напишите ещё пару простых индикаторов, но уже отражающих другие закономерности.

Надпись индикатор делать не умеет. Но можно вывести на экран графический объект, отображающий любой текст длиной до 62 символов. Об этом здесь https://book.mql4.com/ru/functions/objects

Спасибо конечно за ссылку на учебник, дело в том что я его уже читал. Смысл в том, что мне нужно написать всего 1 индикатор. А для этого я думаю не нужно изучать ВСЕ идентификаторы и для этого строить несколько обучающих индикаторов. Поэтому я и прошу чтобы вы помогли, хотя бы такими короткими исчерпывающими ответами, как ваши последние три предложения.



Почему я задал такой вопрос. Потому что если просто в окне метатрейдера зайти в свойства линии, то там можно написать ее название, удивительно что в программировании нету такой функции =(


Спасибо



PS. Подскажите какая функция у этого идентификатора ObjectSetText. А то я что то опять не могу понять.

 

У меня получилось создать индикатор который проверяет два бара в определенное время и рисует горизонтальную линию на большем Хае из этих двух. Спасибо большое за помощь. Но опят есть вопрос. На следующее утро у меня эта линия пропадает, а как сделать так чтобы эта линия пропадала только в момент формирования новой? Спасибо


datetime mt1,mt2;

int i1,i2;

double H1,H2;

mt1=StrToTime("15:10");
mt2=StrToTime("15:15");

i1=iBarShift(NULL,0,mt1,TRUE);
i2=iBarShift(NULL,0,mt2,TRUE);

if (i1>0)
H1=High[i1];
if (i2>0)
H2=High[i2];

if (H1>=H2)
{
ObjectDelete("line1");
ObjectCreate("line1",OBJ_HLINE,0,mt1,H1);
ObjectSet("line1",OBJPROP_STYLE,0);
ObjectSet("line1",OBJPROP_COLOR,Magenta);
ObjectSet("line1",OBJPROP_WIDTH,0);

}

else
{
ObjectDelete("line1");
ObjectCreate("line1",OBJ_HLINE,0,mt2,H2);
ObjectSet("line1",OBJPROP_STYLE,0);
ObjectSet("line1",OBJPROP_COLOR,Magenta);
ObjectSet("line1",OBJPROP_WIDTH,0);
}

 
Haribin писал (а) >>

У меня получилось создать индикатор который проверяет два бара в определенное время и рисует горизонтальную линию на большем Хае из этих двух. Спасибо большое за помощь. Но опят есть вопрос. На следующее утро у меня эта линия пропадает, а как сделать так чтобы эта линия пропадала только в момент формирования новой? Спасибо

datetime mt1,mt2;

int i1,i2;

double H1,H2;

mt1=StrToTime("15:10");
mt2=StrToTime("15:15");

i1=iBarShift(NULL,0,mt1,TRUE);
i2=iBarShift(NULL,0,mt2,TRUE);

if ( (i1>0) && (i2>0) )
{

  if (i1>0)
  H1=High[i1];
  if (i2>0)
  H2=High[i2];

  if (H1>=H2)
  {
  ObjectDelete("line1");
  ObjectCreate("line1",OBJ_HLINE,0,mt1,H1); 
  ObjectSet("line1",OBJPROP_STYLE,0);
  ObjectSet("line1",OBJPROP_COLOR,Magenta);
  ObjectSet("line1",OBJPROP_WIDTH,0);

  }

  else
  { 
  ObjectDelete("line1");
  ObjectCreate("line1",OBJ_HLINE,0,mt2,H2); 
  ObjectSet("line1",OBJPROP_STYLE,0);
  ObjectSet("line1",OBJPROP_COLOR,Magenta);
  ObjectSet("line1",OBJPROP_WIDTH,0); 
  } 

}
 
Haribin писал (а) >>

И все таки, как на линии написать ее название, это можно так сделать?

Чтобы прямо на линии было написано "Линия 1".

Очередное спасибо.

Можно.

1. Функцией ObjectSetText() изменяем описание объекта на то, которое надо.

2. Должна стоять галка. "Показывать описание объекта" (На графике клацнуть правой кнопкой мыши - Свойства - Общие)