Ошибки, баги, вопросы - страница 1145

 
Renat:

Так вы приведите свои цифры, обязательно начав с нулевых счетчиков, замерив 5 минут например на EURUSD и стартанув обе программы одновременно.

ps: то, что вы считываете счетчик в ините - это хороший способ себя обмануть при неаккуратной работе. начинайте счетчик с нуля, если хотите провести чистый эксперимент.

Хм... Спасибо. Глянул на EURUSD в ДЦ - всё нормально. Считаю-то я с нуля ровно-ровно.

Повторить эксперимент сейчас не могу (Московская биржа закрыта).  Но днём на активном рынке было так:

ExpCount (Si-6.14,M1) OnTick_count=697
TicksCount (Si-6.14,M1) OnCalculateCount=1326

Буквально за пару минут. Выходит у брокера что-то не то?

 
Fry:

Хм... Спасибо. Глянул на EURUSD в ДЦ - всё нормально. Считаю-то я с нуля ровно-ровно.

Повторить эксперимент сейчас не могу (Московская биржа закрыта).  Но днём на активном рынке было так:

ExpCount (Si-6.14,M1) OnTick_count=697
TicksCount (Si-6.14,M1) OnCalculateCount=1326

Буквально за пару минут. Выходит у брокера что-то не то?

Нет, от брокера это никак не зависит. В терминал приходит один поток тиков, который отдается и индикаторам и экспертам.

Это обычно означает, что индикатор отрабатывает быстро и получает все тики. А вот эксперт скорее всего тормозит с расчетами и не успевает выйти из обработчика раньше, чем придет следующий тик. Ведь вы привели упрощенный код для примера, а в реальности считали тики на рабочем эксперте, который делал достаточно много расчетов? Как минимум, он был не так пуст, как в примере.

В результате эксперт пропускает тики, которые пришли быстрее его обработчика. Если не пропускать тики в данном случае, то запросто можно устроить работу эксперту в суровом прошлом. Например, из-за своих затрат эксперт будет получать из очереди тиков устаревшие котировки на несколько секунд/минут и считать совершенно устаревший профиль рынка.

 
Renat:

Нет.

Это обычно означает, что индикатор отрабатывает быстро и получает все тики. А вот эксперт скорее всего тормозит с расчетами и не успевает выйти из обработчика раньше, чем придет следующий тик.

В результате эксперт пропускает тики, которые пришли быстрее его обработчика. Если не пропускать тики в данном случае, то запросто можно устроить работу эксперту в суровом прошлом. Например, из-за своих затрат эксперт будет получать из очереди тиков устаревшие котировки на несколько секунд/минут и считать совершенно устаревший профиль рынка.

Спасибо. Понял. Так и подозревал, что из-за очереди. Просто не мог поверить, что эта пустышка так тормозит, ведь почти половина потока пролетает мимо.
 
Renat:

Ошибки у нас нет.

Вы пытались вставить недокументированный URL на страницу ролика из броузера вместо реально документированного и поддерживаемого URL вставки. Мы не можем отслеживать все мелкие изменения движка страниц YouTube и по хакерски выискивать URL шаринга на основе URL страницы.

Можете пояснить, почему https://www.youtube.com/watch?v=XXXXXX у вас считается "документированным", а https://www.youtube.com/watch?v=XXXXXX - "НЕдокументированным" ?

Вот такая должна быть регулярка на проверку: ^https?:\/\/(www\.)?youtube\.com\/watch\?v=\S+$

 
Roffild:

Можете пояснить, почему https://www.youtube.com/watch?v=XXXXXX у вас считается "документированным", а https://www.youtube.com/watch?v=XXXXXX - "НЕдокументированным" ?

Вот такая должна быть регулярка на проверку: https?:\/\/(www\.)?youtube\.com\/watch\?v=\S+

Если говорить о фоновом распознавании URL в теле сообщения, то дело не в регулярке, а просто не лазаем по HTTPS ресурсам в поисках структурированных данных.

Если же говорить о штатной функции вставки YouTube роликов, которая есть на панели редактора, то там с YouTube для шаринга все равно выдаются HTTP ссылки вида http://youtu.be/ZI67sr0RXzU даже если зайти по HTTPS.


Когда я говорю про документированный URL, то речь исключительно о том, что вставляется в спец кнопку "Видео", где мы принимаем только специальные урлы, выдаваемые для шеринга Ютубом. А вот если вы используете ссылки внутри текста сообщения, то мы пытаемся распознать структурированные данные внутри той страницы, чтобы сделать превью.

Вот как выглядят структурированные данные для ролика:

        <meta property="og:site_name" content="YouTube">
    <meta property="og:url" content="https://www.youtube.com/watch?v=ZI67sr0RXzU">
    <meta property="og:title" content="MetaTrader 5 Strategy Tester 3D Visualization">
    <meta property="og:image" content="http://i1.ytimg.com/vi/ZI67sr0RXzU/maxresdefault.jpg">

      <meta property="og:description" content="MetaTrader 5 Strategy Tester 3D Visualization">

      <meta property="og:type" content="video">
          <meta property="og:video" content="https://www.youtube.com/v/ZI67sr0RXzU?version=3&amp;amp;autohide=1">
        <meta property="og:video:type" content="application/x-shockwave-flash">
        <meta property="og:video:width" content="960">
        <meta property="og:video:height" content="720">
и вот как это отображается:
MetaTrader 5 Strategy Tester 3D Visualization
MetaTrader 5 Strategy Tester 3D Visualization
  • www.youtube.com
MetaTrader 5 Strategy Tester 3D Visualization
 

Приветствую, господа разработчики. Как насчёт сделать возможность инициализации статических констант прямо в теле структуры/класса, как это реализовано в C++:

struct TStruct {   static const int a = 10; };

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

Сейчас компилятор выдаёт ошибку:  '=' - illegal assignment use

 
Fry:
Спасибо. Понял. Так и подозревал, что из-за очереди. Просто не мог поверить, что эта пустышка так тормозит, ведь почти половина потока пролетает мимо.
Возможно дело не в тормозах, а в потоке тиков от торгового сервера. Если от сервера тики пришли "пачкой", то OnTick() эксперта вызывается один раз на "пачку", а не для каждого тика в ней.
 
meat:

Приветствую, господа разработчики. Как насчёт сделать возможность инициализации статических констант прямо в теле структуры/класса, как это реализовано в C++:

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

Сейчас компилятор выдаёт ошибку:  '=' - illegal assignment use

Для этого есть конструкторы, которые и для структур работают.
 
Renat:
Для этого есть конструкторы, которые и для структур работают.

Конструктор предназначен для инициализации локальных членов объекта. А речь идёт о статических переменных класса. Они инициализируются либо за пределами тела класса, либо же в теле класса по месту объявления (если это константы) -  вот про второй вариант я и говорю, он работает в C++, а в MQL выдаёт ошибку. 

 
meat:

Приветствую, господа разработчики. Как насчёт сделать возможность инициализации статических констант прямо в теле структуры/класса, как это реализовано в C++:

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