← К каталогу
Исходный код · ID 1177

P4L CandleTime

p4l candletime.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор P4L CandleTime отображает на графике обратный отсчёт времени до окончания текущей свечи. Оставшееся до закрытия бара время показывается в виде текстовой метки рядом с ценой, что позволяет трейдеру визуально контролировать тайминг формирования баров.

Индикатор поддерживает отображение таймера как непосредственно на графике, так и в виде комментария в окне чарта. Параметры шрифта, цвета и расположения текста настраиваются пользователем. Включена возможность автоматической корректировки сдвига времени для офлайн-графиков, сгенерированных сторонними инструментами.

Доступна настройка коррекции еженедельного таймера для брокеров, у которых время начала недельного бара не совпадает с заявленным. Индикатор работает на каждом тике, но при повторных тиках в пределах одной секунды лишь перемещает существующую метку, снижая нагрузку на расчёты.

Настройки программы

НастройкаОписание
TextColor Цвет текстовой метки таймера.
FontSize Размер шрифта текстовой метки таймера.
FontName Имя шрифта для отображения таймера. Требуется фиксированный шрифт для корректного отображения.
DisplayTimeByTheBar Включает или отключает отображение таймера на графике рядом с текущей свечой.
DisplayTimeComment Включает или отключает вывод оставшегося до закрытия бара времени в виде комментария в окне чарта.
TextUsuallyAbovePriceLine Определяет, отображается ли текстовая метка обычно выше ценовой линии. При значении false метка располагается ниже ценовой линии.
SpreadFactor Коэффициент, определяющий расстояние текстовой метки от ценовой линии. Значение 1.0 — нормальное расстояние, значения больше 1 отодвигают текст дальше от линии цены.
AutoTimeShiftAdjust Автоматическая корректировка сдвига времени для офлайн-графиков, у которых в имени символа присутствует суффикс смещения (например, EURUSD+1H).
AdjustWeeklyTimeRemainBy_min Коррекция оставшегося времени недельного бара в минутах для исправления ошибки некоторых брокеров со стартом недели. Положительное значение добавляет минуты к таймеру.
Получить полный код

Поиск по коду файла

#property indicator_chart_window

extern color  TextColor = Chocolate;
extern int    FontSize  = 10; 
extern string FontName = "Lucida Console"; // Was 9,Verdana but spaces were too narrow.  Must have fixed font. Alt: Fixedsys
extern bool   DisplayTimeByTheBar = true ;
extern bool   DisplayTimeComment  = false;
extern bool   TextUsuallyAbovePriceLine  = false; // 
extern double SpreadFactor  = 1.0; // 1.0 is normal. If >1, text is farther away from price line.
extern bool   AutoTimeShiftAdjust = true; // Necessary when used with "P4L PeriodCon.mq4". It adjusts for Symbol() names like: "EURUSD+1H"

extern int    AdjustWeeklyTimeRemainBy_min = 0; // At least one broker's Weekly feed has a flakey error.  The weekly bars SAY they begin

bool Debug = false;
datetime timeshiftsec = 0;
int period;
double offset;
int AdjustWeeklyTimeRemainBy_sec;

int init()
  {
      // код доступен только после оплаты
   }
   AdjustWeeklyTimeRemainBy_sec = AdjustWeeklyTimeRemainBy_min*60;

   period = Period();

   offset = -0.25*Point * SpreadFactor;  //0 appears very close below. Better: "-0.25*Point" is a quarter pip lower.

   if (AutoTimeShiftAdjust)
     {

      string symbolOffset;
      string xmult = "";
      int plus = StringFind(Symbol(),"+",0);
      int minus = StringFind(Symbol(),"-",0);
      int uslcx = StringFind(Symbol(),"_x",0);
      int lcx = StringFind(Symbol(),"x",0);
      int secmult = 60;

      if ( plus > 0) symbolOffset = StringSubstr(Symbol(),plus);      // The "+" is kept if "plus", dropped if "plus+1".
      else if ( minus > 0) symbolOffset = StringSubstr(Symbol(),minus); // The "-" stays with the string.

      if (lcx > 0 && ( plus > 0 || minus > 0 || uslcx > 0)) 
      {

         xmult = StringSubstr(Symbol(),lcx+1);      // The "x" is dropped using "lcx+1".
         if (StringLen(xmult) >= 1) period = period * StrToInteger(xmult);
      }
      else
      {
         if (period < PERIOD_MN1 && PERIOD_MN1-period < 240) period = PERIOD_MN1 * (PERIOD_MN1-period);
         else if (period < PERIOD_W1 && PERIOD_W1-period < 1040) period = PERIOD_W1 * (PERIOD_W1-period);
         else if (period < PERIOD_D1 && PERIOD_D1-period < 480) period = PERIOD_D1 * (PERIOD_D1-period);
      }

      if (Debug) Print("Symbol(): ",Symbol()," plus: ",plus," minus: ",minus," symbolOffset: ",symbolOffset," xmult: ",xmult," period: ",period);

      if (StringLen(symbolOffset) <= 1) return(0); // str is at least 2 chars, normally would be min, e.g. "+1M"

      if (StringFind(symbolOffset,"MN",0) > 0)
        timeshiftsec = secmult * PERIOD_MN1 * StrToInteger(StringSubstr(symbolOffset,0,StringFind(symbolOffset,"MN",0)));
      else if (StringFind(symbolOffset,"N",0) > 0)
        timeshiftsec = secmult * PERIOD_MN1 * StrToInteger(StringSubstr(symbolOffset,0,StringFind(symbolOffset,"N",0)));
      else if (StringFind(symbolOffset,"W",0) > 0) 
        timeshiftsec = secmult * PERIOD_W1 * StrToInteger(StringSubstr(symbolOffset,0,StringFind(symbolOffset,"W",0)));
      else if (StringFind(symbolOffset,"D",0) > 0) 
        timeshiftsec = secmult * PERIOD_D1 * StrToInteger(StringSubstr(symbolOffset,0,StringFind(symbolOffset,"D",0)));
      else if (StringFind(symbolOffset,"H",0) > 0) 
        timeshiftsec = secmult * PERIOD_H1 * StrToInteger(StringSubstr(symbolOffset,0,StringFind(symbolOffset,"H",0)));
      else if (StringFind(symbolOffset,"M",0) > 0) 
        timeshiftsec = secmult * StrToInteger(StringSubstr(symbolOffset,0,StringFind(symbolOffset,"M",0)));

      if (Debug && St

Показано первые 50% кода (символов: 5453)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
545,30₽ ≈ $6.66