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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.