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

 

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

Сообственно, нужно, чтобы индикатор отследил Хай свечи в определенное время,например в 12-33, и на котировке хая нарисовал горизонтальную линию.

Спасибо, если кто то поможет.

 

Хотя бы подскажите как обозначить бар в определенное время?

Например

double H = High[i] // как описать что i - это бар допустим в 12-33?

Спасибо.

 
Haribin писал (а) >>

Хотя бы подскажите как обозначить бар в определенное время?

Например

double H = High[i] // как описать что i - это бар допустим в 12-33?

Спасибо.

Используй функцию iBarShift()

 
Haribin писал (а) >>

Хотя бы подскажите как обозначить бар в определенное время?

Например

double H = High[i] // как описать что i - это бар допустим в 12-33?

Спасибо.

Если Вы хотите узнать номер бара для заданного времени, то смотрите описание функции iBarShift

  datetime my_time=D'2008.06.16 12:33';
  int i;
  double H;

  i=iBarShift(Symbol(),Period(),my_time);
  H=High[i];
 

Спасибо сейчас буду пробовать =)



Люди вы меня извините, может я засоряю форум, но просто другого подходящего места научится создавать индикаторы я не могу найти =)

Подскажите что не так



datetime my_time= D'2008.06.16 12:33' ;
int i;
double H;
i=iBarShift(NULL,0,my_time,FALSE);
H=High[i];
bool ObjectCreate("line",OBJ_HLINE,0,my_time,H);



первый вопрос, почему если я ставлю строчку datetime my_time= D'12:33:00' ; у меня появляется ошибка '12:33:00' - date literal string is incomplete, хотя я в хелпе посмотрел там так можно.

второй вопрос если остается такая строчка datetime my_time= D'2008.06.16 12:33' это значит что мне будет строиться линия ТОЛЬКО 16 июня? а если я запущу 17 она уже не построется? Отсюда кстати и попытки поменять строчку как в первом вопросе.

Третий вопрос. У меня ошибка 'ObjectCreate' - variable expected, то есть я неправильно видимо использую эту функцию?

И правильно ли я вообще понимаю смысл, если мне нужен этот индикатор каждый день, то по идее при включении индикатора он уже должен искать линию которую он нарисовал со вчера и удалять ее, а уже потом рисовать новую, а если написать программу так как сейчас есть, то каждый день будет просто новая полоска и в итоге у меня будет куча полосок на графике. Или нет?

Я еще раз извиняюсь если не там пишу, просто в газетах не видел объявлении о курсах по MQL, а учителей находить где то надо =)

 
Haribin писал (а) >>

Подскажите что не так


datetime my_time= D'2008.06.16 12:33' ;
int i;
double H;
i=iBarShift(NULL,0,my_time,FALSE);
H=High[i];
bool ObjectCreate("line",OBJ_HLINE,0,my_time,H);


первый вопрос, почему если я ставлю строчку datetime my_time= D'12:33:00' ; у меня появляется ошибка '12:33:00' - date literal string is incomplete, хотя я в хелпе посмотрел там так можно.

второй вопрос если остается такая строчка datetime my_time= D'2008.06.16 12:33' это значит что мне будет строиться линия ТОЛЬКО 16 июня? а если я запущу 17 она уже не построется? Отсюда кстати и попытки поменять строчку как в первом вопросе.

Третий вопрос. У меня ошибка 'ObjectCreate' - variable expected, то есть я неправильно видимо использую эту функцию?

И правильно ли я вообще понимаю смысл, если мне нужен этот индикатор каждый день, то по идее при включении индикатора он уже должен искать линию которую он нарисовал со вчера и удалять ее, а уже потом рисовать новую, а если написать программу так как сейчас есть, то каждый день будет просто новая полоска и в итоге у меня будет куча полосок на графике. Или нет?

Я еще раз извиняюсь если не там пишу, просто в газетах не видел объявлении о курсах по MQL, а учителей находить где то надо =)

1. У меня тоже не проходит такое описание, хотя судя по хэлпу это допустимо, может быть разработчики пояснят?

2. Да. Если Вам надо вычислять это ежесуточно, используйте функцию StrToTime.

3. bool - это тип возвращаемого значения. Можно писать так:

bool fl;
fl = ObjectCreate("line",OBJ_HLINE,0,my_time,H);

либо так:

if ( ObjectCreate("line",OBJ_HLINE,0,my_time,H) )
{
/*
тут Ваш код
*/
}

если же Вас не интересует возвращаемое значение, то можете просто написать

ObjectCreate("line",OBJ_HLINE,0,my_time,H);

4. Просто перед рисованием удалите старый объект функцией ObjectDelete.

 
PapaYozh писал (а) >>

1. У меня тоже не проходит такое описание, хотя судя по хэлпу это допустимо, может быть разработчики пояснят?

2. Да. Если Вам надо вычислять это ежесуточно, используйте функцию StrToTime.

3. bool - это тип возвращаемого значения. Можно писать так:

либо так:

4. Просто перед рисованием удалите старый объект функцией ObjectDelete.

Вот спасибо! Сейчас снова буду разбираться.



Вроде бы все получается уже строит линию по времени, но опять есть вопрос

datetime my_time;
int i;
double H;
my_time=StrToTime("15:51");
i=iBarShift(NULL,0,my_time,FALSE);
H=High[i];
ObjectCreate("line",OBJ_HLINE,0,my_time,H);


Вот сейчас 10-00 часов у меня, если я в строке my_time=StrToTime("15:51");указываю время прошлое, например 09:15, или 08:25 то рисует все хорошо, а если указываю будущее, например 15:51, как написано, то он мне рисует хай самой новой свечи. Вот например у меня сейчас 10-03 так он рисует хай по этому времени. Я удаляю линию, он рисует по следующей.

Я опять что то не так сделал? Мне нужно чтобы он дождался именно времени 12-33 и построил по хаю именно той свечи

 
Haribin писал (а) >>

Вот спасибо! Сейчас снова буду разбираться.


Вроде бы все получается уже строит линию по времени, но опять есть вопрос

datetime my_time;
int i;
double H;
my_time=StrToTime("15:51");
i=iBarShift(NULL,0,my_time,FALSE);
H=High[i];
ObjectCreate("line",OBJ_HLINE,0,my_time,H);

Вот сейчас 10-00 часов у меня, если я в строке my_time=StrToTime("15:51");указываю время прошлое, например 09:15, или 08:25 то рисует все хорошо, а если указываю будущее, например 15:51, как написано, то он мне рисует хай самой новой свечи. Вот например у меня сейчас 10-03 так он рисует хай по этому времени. Я удаляю линию, он рисует по следующей.

Я опять что то не так сделал? Мне нужно чтобы он дождался именно времени 12-33 и построил по хаю именно той свечи

В Вашей версии фукция iBarShift возврашает смешение ближайшего бара. Поскольку, для будущего времени бар не существует, то возвращается ближайший, т.е. 0-ой. Сделайте тогда уж вот так:

datetime my_time;
int i;
double H;
my_time=StrToTime("15:51");
i=iBarShift(NULL,0,my_time,TRUE);
if ( i >= 0 )
{
  H=High[i];
  ObjectCreate("line",OBJ_HLINE,0,my_time,H);
}
Будьте внимательны при чтении документации :)
 
PapaYozh писал (а) >>

В Вашей версии фукция iBarShift возврашает смешение ближайшего бара. Поскольку, для будущего времени бар не существует, то возвращается ближайший, т.е. 0-ой. Сделайте тогда уж вот так:

Будьте внимательны при чтении документации :)

А дату в my_time добавлять не надо. А то дату по умолчанию возьмет.

 
PapaYozh писал (а) >>

В Вашей версии фукция iBarShift возврашает смешение ближайшего бара. Поскольку, для будущего времени бар не существует, то возвращается ближайший, т.е. 0-ой. Сделайте тогда уж вот так:

Будьте внимательны при чтении документации :)
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) показывает чтобы этот бар не был последним? Только что появившимся?

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



Vinin писал (а) >>

А дату в my_time добавлять не надо. А то дату по умолчанию возьмет.



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

 
Haribin писал (а) >>


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

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

Примеры:

D'2004.01.01 00:00'     // Новый Год
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12'        //равнозначно D'1980.07.19 12:00:00'
D'01.01.2004'           //равнозначно D'01.01.2004 00:00:00'
D'12:30:27'             //равнозначно D'[дата компиляции] 12:30:27'
D''                     //равнозначно D'[дата компиляции] 00:00:00'

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