Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
25.06.2019, 18:17
Лучший ответ
Накопленные выплаты: 182654 RUB
Сообщение от RND
Ни че себе несложный способ, анализ он может быть и не сложный,
но преобразовывать дату в строку, редактировать и затем обратно.
Микроскопом гвозди забивать проще, однако.
Спесияльно для любителев мелкоскопов Метаквоты придумали такую весчь, как MqlDateTime и сопутствуюшие ей функции.
28.06.2019, 08:07
Лучший ответ
Накопленные выплаты: 69812 RUB
Сообщение от RND
Интересно,
а почему бы не найти дату начала следующего месяца и не отнять от него, ну хотя бы, секунду.
И не угадывать.
Про это предложение речь?
Я же написал раньше, кто как хочет, так и делает. Но и результат в этом случае, тоже на писателя (любителя).
Если ты сам, так как предложил делаешь, опять же на свой страх и риск, так делай.
Но я, так уже не делаю, и на то есть свои причины, одна из которых, мне не лень написать "лишние" строчки.
Потому, что пара-тройка "лишних", в твоем понимании строк, снимает потом кучу гемора, при отладке кода.
Тем более, что написанное и отлаженное потом попадает в библиотеки кода, и пользоваться ими можно долго, не парясь про "лишние" строчки.

Сообщение от RND
Моня, хорошо бы было, что бы вы то же читали других и осмысливали прочитанное.
Я не жду 23:00,....
Не стоит лично к себе применять элементы гипотетического примера, на то он и пример.

....я написал - бар или тик, ФАКТИЧЕСКИЙ (для неслышаших).
Для меня, это разные по сути вещи, и на них, в коде прописана разная реакция и разные способы обработки, а фактический он или гипотетический, или КОНКРЕТНЫЙ, не важно.
Важно, чтобы было, и было, что надо, и было правильно. ( Без пафоса. )

Я рад за автора, что он получил то что хотел.
А как я за него рад.

Учится проще на чужих ошибках, они меньше болят, чем свои.
28.06.2019, 10:52
Лучший ответ
Накопленные выплаты: 182654 RUB
Сообщение от RND
А если использовать эту спесияльно придуманную вещь, то (ваш) способ от моего отличается только количеством строк в коде?
И кол-вом строк, и быстродействием, а если посидеть и "пораскинуть мозгами", то и еще несколько вариянтов качества можно обозначить.
Сообщение от RND
И чем тогда мой способ не понравился вам, ну или не вам а Моне?
Ну... Моня тот еще философ... Но относительно вашего предложения он все же прав.
Сообщение от RND
а почему бы не найти дату начала следующего месяца и не отнять от него, ну хотя бы, секунду.
И не угадывать.
Дело в том, что в этом случае вы как раз и будете гадать... Разве время открытия бара всегда равно 00:00:00, чтоб от него можно было отнимать вашу секунду? Проанализируйте графики... И желательно у разных кухонь. Везде время открытия будет разным с задержкой от секунд до минут от начала суток. И что в таком случае вам даст ваша отнятая секунда? Вот это и хотел Моня до вас донести, но видать не срослось... Походу, его философия не лезет в ваши уши.
29.06.2019, 23:57
Лучший ответ
Накопленные выплаты: 795 RUB
Применительно к графикам считаю что некорректно будет прибавление/вычитание времени, даже вычислив количество дней в месяце.
Ибо на примере января можно увидеть что торги начались 2го числа в 10:00 или в декабре 26 числа в 10:00. Зависит от кухни конечно.
Необходимо рассчитывать побарно.
Вот например, чтобы не трогать другие таймфреймы:

MQL код:

int m=1;int m_bar=1;
int t_month=TimeMonth(Time[1]);
for (int i=1;i < Bars;i++)
{
if (TimeMonth(Time[i])!=t_month)
{
TrendLine(m_bar,i-1);
m_bar=i-1;
t_month=TimeMonth(Time[i]);
m++;
if(m > month) break;
}

20.06.2019, 11:40
Лучший ответ
Накопленные выплаты: 182654 RUB
Сообщение от gskfx Посмотреть сообщение
Проблема в том, что начало месяца не совпадает с первым числом иногда, так как суббота и воскресенье выпадают.
По коду вроде все правильно... Проблему не понял.
30.06.2019, 06:29
Лучший ответ
Накопленные выплаты: 69812 RUB
Сообщение от Шумайлов Михаил Посмотреть сообщение
Применительно к графикам считаю что некорректно будет прибавление/вычитание времени, даже вычислив количество дней в месяце.
Дык график, это для экономии места при визуализации. А время оно как суслик, ты его не видишь, а оно есть.

Ибо на примере января можно увидеть что торги начались 2го числа в 10:00 или в декабре 26 числа в 10:00. Зависит от кухни конечно.
Это смотря для чего, если художества разводить для заманухи, это одно дело, а если для визуального контроля и информации о значениях измеряемых параметров работы кода (контролируемых и управляемых объектов), по сути - телеметрия, это другое.

Необходимо рассчитывать побарно.
Ну прям кулаком по столу! С какого перепугу, "побарно"?
"Побарно" - это история, что осталась в терминале, не факт, что для решаемой задачи палочек хватит, если ты не позаботился о её сохранении в нужном виде и количестве.
Проверь, на сколько недельных баров хранящихся в терминале, тебе хватит минутной истории в барах, тоже хранящейся в терминале.
Прогноз на будущее, это как бизнес план, чтобы было с чем сравнивать, то что думал, с тем что получилось, как считать и рисовать будешь?
Там палочек ещё нет?

Вот например, чтобы не трогать другие таймфреймы:

MQL код:

int m=1;int m_bar=1;
int t_month=TimeMonth(Time[1]);
for (int i=1;i < Bars;i++)
{
if (TimeMonth(Time[i])!=t_month)
{
TrendLine(m_bar,i-1);
m_bar=i-1;
t_month=TimeMonth(Time[i]);
m++;
if(m > month) break;
}

Включи сознание, ты за формой представления, не воспринимаешь содержание (суть).
  • #1 Свернуть

    Как провести линию от начала до конца месяца?

    Добрый день.

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

    Нужно что то типа:

    MQL код:
    for(i = 0; i < 10; i++)
    {
    time1 = iTime(NULL, PERIOD_MN1, i);
    time2 = time1 + 60*60*24*31;
    TrendLine(time1, time2); // Моя функция линии по цене открытия месяца.
    }


    Заранее спасибо.
    Последний раз редактировалось Gold; 26.06.2019, 15:39.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от gskfx Посмотреть сообщение
    Проблема в том, что начало месяца не совпадает с первым числом иногда, так как суббота и воскресенье выпадают.
    По коду вроде все правильно... Проблему не понял.

    Комментарий

    • #3 Свернуть

      Начало и конец линий не совпадают.... Либо есть перехлест либо разрыв... Очень заметно если включены разделители периодов. Хотелось чтобы начало и конец совпадали с разделителями периодов.

      Комментарий

      • #4 Свернуть

        Сообщение от gskfx Посмотреть сообщение
        Начало и конец линий не совпадают.... Либо есть перехлест либо разрыв... Очень заметно если включены разделители периодов. Хотелось чтобы начало и конец совпадали с разделителями периодов.
        Ну... Со скрином оно конечно было бы понятнее, но что имеем...
        Начала у вас должны быть правильными, т.к. вы берете их через iTime()(хотя тут тоже могут быть нюансы из-за дыр в котировках на более мелких ТФ чем MN1), а вот концы вы тупо ставите в 31 день, что явно не корректно. Количество дней же в месяцах разное. А в феврале дык и вообще может быть, как 28 так и 29 дней. Поступить вам вероятнее всего можно двумя вариантами:
        1. Простой. Брать для конца линии время открытия следующего месячного бара.
        2. Сложнее. Вместо константы 31 нужно подставить функцию, которая возвращала бы вам кол-во дней в конкретном месяце, естественно с учетом високосных годов.

        Комментарий

        • #5 Свернуть

          Сообщение от ir0407 Посмотреть сообщение
          Ну... Со скрином оно конечно было бы понятнее, но что имеем...
          Начала у вас должны быть правильными, т.к. вы берете их через iTime()(хотя тут тоже могут быть нюансы из-за дыр в котировках на более мелких ТФ чем MN1), а вот концы вы тупо ставите в 31 день, что явно не корректно. Количество дней же в месяцах разное. А в феврале дык и вообще может быть, как 28 так и 29 дней. Поступить вам вероятнее всего можно двумя вариантами:
          1. Простой. Брать для конца линии время открытия следующего месячного бара.
          2. Сложнее. Вместо константы 31 нужно подставить функцию, которая возвращала бы вам кол-во дней в конкретном месяце, естественно с учетом високосных годов.
          А вишенку на тортик?

          MQL код:

          //+------------------------------------------------------------------+
          //| Gets number of days in month |
          //+------------------------------------------------------------------+
          int CDateTime::DaysInMonth(void) const{
          int leap_year;
          //---
          switch(mon){
          case 1:
          case 3:
          case 5:
          case 7:
          case 8:
          case 10:
          case 12:
          return(31);
          case 2:
          leap_year=year;
          if(year%100==0)
          leap_year/=100;
          return((leap_year%4==0)? 29 : 28);
          case 4:
          case 6:
          case 9:
          case 11:
          return(30);
          }
          //---
          return(0);
          }
          Последний раз редактировалось Gold; 26.06.2019, 15:40.

          Комментарий

          • #6 Свернуть

            Сообщение от MonyaMaker Посмотреть сообщение
            А вишенку на тортик?
            Это не вишенка, это, так сказать, "решение в лоб", а реальными вишенками люди на хабре занимаются.

            Комментарий

            • #7 Свернуть

              Сообщение от ir0407 Посмотреть сообщение
              Это не вишенка, это, так сказать, "решение в лоб", а реальными вишенками люди на хабре занимаются.
              Тут хоть в лоб, хоть по ссылке, 31 и всё.

              Комментарий

              • #8 Свернуть

                Кто хотел вишенку? - Спросила ворона, пролетая над пикником.....)))))

                Вот код:

                MQL код:
                for(i=0; i < 10; i++)
                {
                time1 = iTime(NULL, PERIOD_MN1, i);
                time2 = iTime(NULL, PERIOD_MN1, i) + 86400*31;
                price1 = iHigh(NULL, PERIOD_MN1, i);
                Draw_TLine(price1, price1, time1, time2);
                }

                А вот вишенка:

                Нажмите на изображение для увеличения.

Название:	MetaTrader 4.png
Просмотров:	2
Размер:	9.8 Кб
ID:	27502709

                Это часовой график. Май заканчивается тридцать первым числом, а июнь начинается с третьего...
                Последний раз редактировалось Gold; 26.06.2019, 15:40.

                Комментарий

                • #9 Свернуть

                  Сообщение от ir0407 Посмотреть сообщение
                  Вишь:
                  MQL код:

                  time2 = iTime(NULL, PERIOD_MN1, i) + 86400*31;


                  Все равно 31.

                  Сообщение от gskfx Посмотреть сообщение
                  Это часовой график. Май заканчивается тридцать первым числом, а июнь начинается с третьего...
                  Не, это палочки на графике так нарисованы, а июнь, с первого числа начинается.
                  Другие месяцы, тоже угадывать будешь?
                  Последний раз редактировалось Gold; 26.06.2019, 15:41.

                  Комментарий

                  • #10 Свернуть

                    Сообщение от RND
                    Интересно,
                    а почему бы не найти дату начала следующего месяца и не отнять от него, ну хотя бы, секунду.
                    И не угадывать.
                    А чем функция не устраивает?
                    Или просто рефлекс палочки считать?
                    Риторический вопрос:
                    "А что делать, если палочки кончились, а временной континуум нет?"

                    Комментарий

                    • #11 Свернуть

                      Сообщение от RND
                      Не функция устраивает, а может быть и нет.
                      Я осуждаю, хотя переписку это как его там с Каутцким не читал.
                      А читать и осуждать не надо, просто будь не согласен.

                      Я за палочки не писал ни чего. Я написал как дату то определять и в одну строку.
                      А для палочек есть такая функция
                      ibarshift
                      Писал, просто ты сам это ещё не понял.
                      ibarshift - это как раз то, из области палочек. Яж риторический вопрос не просто так написал.

                      Комментарий

                      • #12 Свернуть

                        Сообщение от RND
                        А вот если проанализировать вашу функцию, то вопрос такой.
                        Функция не моя, а из стандартной библиотеки терминала, но это не меняет суть дела.
                        Код:
                        //+------------------------------------------------------------------+
                        //|                                                     DateTime.mqh |
                        //|                   Copyright 2009-2015, MetaQuotes Software Corp. |
                        //|                                              http://www.mql5.com |
                        //+------------------------------------------------------------------+
                        И в какое место мы добавляем эти 28-31 дней?
                        Миллисекунды и столетие, рассматривать не будем.
                        Предположим, что полный формат даты выглядит где-то так: "YYYY.MM.DD H24:MI:SE.mSec", при помощи не сложного анализа, номер дня логично было бы добавить вместо дней "DD".
                        Недостающие компоненты сформировать из подручных данных.

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

                        Оно зависит от времени фактического тика, бара...
                        Тик - это поступившая котировка, а бар (свеча) - интервал времени который имеет некие характеристики в виде OCHL... , и отображается в виде палки с закорлючками на графике. Не путай педали.

                        ....и может быть и 12:00 и 21:58 и 23:30.
                        А может и не быть, смотри спецификацию контракта.
                        Последний раз редактировалось MonyaMaker; 25.06.2019, 11:21.

                        Комментарий

                        • #13 Свернуть

                          Сообщение от RND
                          Чем дальше в лес - тем толще партизаны,
                          и пытать бесполезно, и твердят:
                          твоя-моя не понимай.
                          Мы так далеко зайдем, и столетия не покажутся нам таким большим интервалом.
                          Большим не покажутся, а вот время начала линии и её окончания будут на своих местах.

                          Ни че себе несложный способ, анализ он может быть и не сложный,
                          но преобразовывать дату в строку, редактировать и затем обратно.
                          Микроскопом гвозди забивать проще, однако.
                          Если корректное описание параметров отрисовываемой линии это сложно, то по простому никто не запрещает.
                          Но тогда не стоит жаловаться на результат.
                          Художества,
                          не напомните - а какую задачу решаем?
                          Мы, тут ваааще ничего не решаем.
                          В первом посте темы написано :" ...от начала до конца нескольких месяцев на часовом графике.", нарисовать надо что-то.

                          Вы считаете - что бы нарисовать линию/прямоугольник на графике принципиально знать бар это или тик. вопрос же в том последний ли он или первый в месяце?
                          Да какие принципы?!! Каждый, как хочет, так и делает.


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

                          И посмотрю я спецификацию и куда ее дальше девать? там строк сколько лишних еще будет?
                          Запомни. Вдруг торговое время в 20:00 закончилось, а ты 23:00 ждешь, чтобы линию нарисовать.
                          Читай только те, что не лишние и все будет путем.

                          Микроскоп наше все. Он хорошо приспособлен для гвоздей. Самый оптимальный для забивания.

                          Дождемся автора и спросим - а чем он хочет эти гвозди, тьфу, художества рисовать.
                          Что ж тебя так микроскоп достал. Прям маньяк с микроскопом.
                          Автор уже счастлив, он нарисовал свои хотелки, как ему подошло.

                          Комментарий

                          • #14 Свернуть

                            Сообщение от RND
                            Ни че себе несложный способ, анализ он может быть и не сложный,
                            но преобразовывать дату в строку, редактировать и затем обратно.
                            Микроскопом гвозди забивать проще, однако.
                            Спесияльно для любителев мелкоскопов Метаквоты придумали такую весчь, как MqlDateTime и сопутствуюшие ей функции.

                            Комментарий

                            • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                            • #15 Свернуть

                              Сообщение от RND
                              Интересно,
                              а почему бы не найти дату начала следующего месяца и не отнять от него, ну хотя бы, секунду.
                              И не угадывать.
                              Про это предложение речь?
                              Я же написал раньше, кто как хочет, так и делает. Но и результат в этом случае, тоже на писателя (любителя).
                              Если ты сам, так как предложил делаешь, опять же на свой страх и риск, так делай.
                              Но я, так уже не делаю, и на то есть свои причины, одна из которых, мне не лень написать "лишние" строчки.
                              Потому, что пара-тройка "лишних", в твоем понимании строк, снимает потом кучу гемора, при отладке кода.
                              Тем более, что написанное и отлаженное потом попадает в библиотеки кода, и пользоваться ими можно долго, не парясь про "лишние" строчки.

                              Сообщение от RND
                              Моня, хорошо бы было, что бы вы то же читали других и осмысливали прочитанное.
                              Я не жду 23:00,....
                              Не стоит лично к себе применять элементы гипотетического примера, на то он и пример.

                              ....я написал - бар или тик, ФАКТИЧЕСКИЙ (для неслышаших).
                              Для меня, это разные по сути вещи, и на них, в коде прописана разная реакция и разные способы обработки, а фактический он или гипотетический, или КОНКРЕТНЫЙ, не важно.
                              Важно, чтобы было, и было, что надо, и было правильно. ( Без пафоса. )

                              Я рад за автора, что он получил то что хотел.
                              А как я за него рад.

                              Учится проще на чужих ошибках, они меньше болят, чем свои.
                              Последний раз редактировалось MonyaMaker; 28.06.2019, 08:22.

                              Комментарий

                              X