![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
если нет необходимости рисовать индикатором в реальном режиме времени, то проще записать нужные данные в файл и читать этот файл из индикатора раз в ХХХ минут
имхо, как записать в файл, по моему проще решить, чем с нуля писать код .dll , но все зависит от дальнейших задач
ЗЫ: на МТ5 больше встроенных сетевых функций, чем в 4-ке
если нет необходимости рисовать индикатором в реальном режиме времени, то проще записать нужные данные в файл и читать этот файл из индикатора раз в ХХХ минут
имхо, как записать в файл, по моему проще решить, чем с нуля писать код .dll , но все зависит от дальнейших задач
ЗЫ: на МТ5 больше встроенных сетевых функций, чем в 4-ке
Вообще в mql5 уже есть кое-какие средства для работы с БД: https://www.mql5.com/ru/docs/database
Не знаю конечно насколько это применимо к той БД которая у топик-стартера...
Что касается рисования то это самая простая задача по сравнению с передачей данных и синхронизации состояния.
Собственно рисование:
Здесь:
Это нужно поместить в функцию OnTick в эксперте либо в отдельную функцию которая вызывается из OnTick либо если нужно только рисовать, но не торговать, тогда можно в функцию OnCalculate в индикаторе.
Если значения не меняются например в течение дня/часа, то не обязательно в OnTick/OnCalculate и тогда нужно написать обработчик события, надо ещё подумать как это правильно сделать.
И вообще лучше перенести весь расчёт в mql если есть такая возможность.
Насчёт синхронизации:
видимо советник/индикатор должен иметь переменную datetime last_update в которой будет храниться время последнего обновления значений и например каждый тик либо по таймеру (функция OnTimer) запрашивать время последнего обновления из источника datetime source_update и тогда сравнивая if( last_update != source_update ) можно запускать обновление прямоугольника или рисовать новый прямоугольник если старый нужен для анализа истории например
Вообще в mql5 уже есть кое-какие средства для работы с БД: https://www.mql5.com/ru/docs/database
Не знаю конечно насколько это применимо к той БД которая у топик-стартера...
Что касается рисования то это самая простая задача по сравнению с передачей данных и синхронизации состояния.
Собственно рисование:
Здесь:
Это нужно поместить в функцию OnTick в эксперте либо в отдельную функцию которая вызывается из OnTick либо если нужно только рисовать, но не торговать, тогда можно в функцию OnCalculate в индикаторе.
Если значения не меняются например в течение дня/часа, то не обязательно в OnTick/OnCalculate и тогда нужно написать обработчик события, надо ещё подумать как это правильно сделать.
И вообще лучше перенести весь расчёт в mql если есть такая возможность.
Насчёт синхронизации:
видимо советник/индикатор должен иметь переменную datetime last_update в которой будет храниться время последнего обновления значений и например каждый тик либо по таймеру (функция OnTimer) запрашивать время последнего обновления из источника datetime source_update и тогда сравнивая if( last_update != source_update ) можно запускать обновление прямоугольника или рисовать новый прямоугольник если старый нужен для анализа истории например
Обновлять прямоугольник не нужно. Перерисовок не будет.
Просто каждый день наносить прямоугольник и несколько коротких линий, ну и возможно текст в виде заметок (время от времени).
Тогда лучше сделать каждый тик проверку времени, совпадает ли час и минута текущего времени с заданными параметрами часа и минуты, и запускать рисование нового объекта, если время наступило.
Вот только не знаю есть ли возможность создать проверку в mql5, на предмет наличия уже на графике прямоугольника, шириной в текущие сутки, как раз во избежание перерисовки.. хотя если индикатор будет срабатывать раз в сутки, и сверять текущую дату, тогда и проверки на предмет наличия прямоугольника не надо, по сути...
Тогда просто вызываем TimeCurrent, конвертируем в MqlDateTime, вытаскиваем час и минуту, сравниваем их с 9:00, и проверяем что такой объект ранее не был нарисован, и если всё ок, тогда запрашиваем данные из базы и рисуем.
Индикатор тоже может иметь кнопки и другие контролы и работать с ними точно так же (отслеживание событий нажатия).
Хотя все таки один из графических объектов все таки будет перерисовываться (фибо) на протяжении всей торговой сессии, тригером для перерисовки должны служить утвержденные фракталы. И строить графические объекты надо по указанному заранее в конфиге ТФ.
Тогда надо определиться с алгоритмом, что от чего зависит, и проверять необходимость перерисовки каждый тик, можно например запустить в функции OnInit вызов индикатора фракталов с помощью IndicatorCreate или iFractals, а в OnCalculate/OnTick брать из него последние показатели с помощью CopyBuffer и по ним перерисовывать.
Только сразу скажу что фибо и фракталы не работают, лучше пойти на завод. 😀
Удаления объектов не будет, если не вызывать ObjectDelete специально.
Вообще есть две стратегии: