Несколько задач на разработку MQL4

Работа завершена

Время выполнения 1 день
Отзыв от исполнителя
Спасибо за работу. ТЗ понятно.
Отзыв от заказчика
Очень качественно было выполнено задание! Моментальный отзыв на комментарии и было выполнено за несколько часов! Спасибо за работу! Если появятся новые задачи, то только к Vladon'у!

Техническое задание

Коллеги, добрый день!

Есть несколько задач:
1) Есть  индикатор showBid (скачал здесь), но он не обновляется по тику, только по событию CHARTEVENT_CHART_CHANGE. 
Нужно доделать, чтобы обновлялся по тику. Использовать как советник - не вариант, так как работает другой.

2) Вывести текущее время с секундами как объект в правый верхний угол графика (примерно такого же размера, как и showBid). Синхронизировать с локальным временем. 

3) Торгую бинарными опционами у брокера GrandCapital. Когда открываю позицию в поле комментария ордера выводится дата и время его экспирации, а также доходность опциона (например: в открытом ордере - "E 11.19 10:30:23 50%", в истории - "E 11.19 10:30:23 50%[2]" ).
а) Написать функцию, которая будет вытаскивать из комментария доходность и дату-время экспирации (для использования в советнике в дальнейшем)

Я пробовал писать так:

//функция получения доходности опциона из ордера numorder - выбираю ордер по тикету

<sourcecode>  

int getOptionProfit(int numorder)
{
   int result=0;
   string comment="";
   int len=0;
   bool res=OrderSelect(numorder,SELECT_BY_TICKET);
   if (res)
   {
      comment=OrderComment();
      len=StringLen(comment);
      if (len==20) result=StringToInteger(StringSubstr(comment,StringLen(comment)-3,2)); //для открытого рыночного ордера
      if (len==23) result=StringToInteger(StringSubstr(comment,StringLen(comment)-6,2)); //для закрытого ордера
   }
   Alert(result);
   return(result);
}

</sourcecode>


Функция должна исполняться, когда получен тикет (открыт ордер) нового открытого ордера. Может ордер просто не успевает открыться, а функция уже исполнилась? 
Эта функция возращает 0 в советнике, но если ее тестировать в процедуре OnInit, то она возвращает верное значение. Не могу понять почему так происходит.
 
//функция получения даты и времени экспирации опциона из ордера numorder - здесь попробовал выбрать открытый ордер по позиции, но ошибка осталась

<sourcecode> 

datetime getOptionExpiration(string instr)
{
   datetime ordertimestr=0;
   string str="";
   for (int j=0;j<OrdersTotal();j++)
   {
      bool res=OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
      if ((res)&&(OrderSymbol()==instr))
      {
         string str1=StringFormat("%s",TimeToString(TimeCurrent(),TIME_DATE));
         string year1=StringSubstr(str1,0,4); //вытаскиваем год
         str=OrderComment(); 
         string month1=StringSubstr(str,2,2); //вытаскиваем месяц
         string day1=StringSubstr(str,5,2); //вытаскиваем день
         string time1=StringSubstr(str,8,8); //вытаскиваем время
         ordertimestr=StringToTime(year1+"."+month1+"."+day1+" "+time1); //дата и время экспирации открытой позиции (число)
      }
   }  
   return(ordertimestr);        
}

</sourcecode>
Проблема та же, что и с предыдущим. Но возвращаемое значение этой функции я хочу в дальнейшем использовать для "отлова" момента экспирации опциона и записи действий в лог. Сейчас видимо она тоже криво работает, использую пока Sleep на срок жизни опциона. 
Если есть вариант как более эффективно поймать момент экспирации - предлагайте. 

 б) когда открывается ордер и в комментарии появляется дата и время экспирации нужно к часам в п. 2 "пристегнуть" таймер с обратным отсчетом времени до момента экспирации (в формате секунды/минуты:секунды/часы:минуты:секунды - на выбор пользователя). Обязательно использование с выбранным ордером (по тикету)


Жду предложений.
 
 
 

Файлы:

MQ5
showbid.mq5
3.3 Kb

Откликнулись

1
Разработчик 1
Оценка
(23)
Проекты
90
24%
Арбитраж
12
33% / 67%
Просрочено
35
39%
Свободен
2
Разработчик 2
Оценка
(3)
Проекты
4
25%
Арбитраж
0
Просрочено
0
Свободен
3
Разработчик 3
Оценка
(74)
Проекты
93
53%
Арбитраж
3
33% / 0%
Просрочено
3
3%
Свободен

Информация о проекте

Бюджет
20 - 40 USD
Исполнителю
18 - 36 USD
Сроки выполнения
от 2 до 10 дн.