Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Сразу по коду и работе:
Надо переделывать на щадящий режим "буду аккуратно дожидаться успешной докачки". Например, OnCalculate не вызывается.
При этом блокируется апдейт чартов этого символа и многим другим участникам приходится ждать и не получать свежих данных. Индикатор не должен надолго забирать себе ресурсы. Лучше долгую инициализацию равномерно растянуть на пошаговую/посимвольную инициализацию в OnCalculate, досчитывая по кусочкам.
1. да, и поэтому приходится вызывать их несколько раз с паузой, либо перезапускать вручную индикатор несколько раз, но и это не всегда помогает, и индикатор через некоторое время перестаёт рассчитываться
2. вполне допускаю, что текущий вариант не оптимален, я пробовал различные варианты, включая рекомендуемую функцию в документации (раздел "организация доступа к данным"), в последнем варианте немного упростил, и наверное также неоптимально вызывать функции iBarShift много раз, но с другой стороны если от них отказаться, то нужно делать специальную функцию подготовки синхронизированных данных, которую мне пока не удаётся написать, получается очень громоздко, а стандартной функции нет, да и если уж в языке предоставлена штатная возможность запрашивать время по индексу и индекс бара по времени, то логично было бы этой возможностью воспользоваться
3. в OnInit только определение портфельных комбинаций и назначение буферов, запросов в OnInit нет, опционально пробовал открывать графики всех инструментов М1 в фоне чтобы предотвратить пропадание кэша и вроде бы это помогает, на максимальной нагрузке конечно это всё ужасно, 28 графиков... первый запрос к данным идёт уже в OnCalculаte где я вызываю CopyClose в цикле с паузой (функция RequestData) предварительно чтобы данные прокэшировались и серии по всем инструментам собрались, а потом уже идёт обращение (SetupIntervals, CalculateEquity и остальные) и я рассчитывал таким образом, что все данные будут готовы и все вызовы iBarShift и iClose и др полезные функции будут возвращать прокэшированные данные, но это почему-то не всегда срабатывает
4. это наверное тиковые данные 800 мб?... но я не представляю как иначе сформировать пучок портфелей из 28 инструментов?, ведь они так или иначе должны быть запрошены, в мт4 с этим особой проблемы не было (вероятно потому что в мт4 все таймфреймы раздельно существуют)
5. дело в том что индикатор предполагает что могут быть задействовано много портфельных комбинаций, сейчас есть преднастроенная комбинация с 420 линиями + служебные линии (всякие машки, каналы, прочее), теоретически пользователь может запросить и все 512 линий, заранее нельзя ограничить число буфферов с помощью #property indicators_buffers, т.к. неизвестно сколько запросит пользователь, в мт4 на максимальной нагрузке подтормаживает но работает
6. при необходимости прокомментирую
P.S. я подумал, возможно Вы скачали не ту версию, потому как в первый раз я ошибся и выложил другую версию, потом исправил вложение.
P.P.S. пользуясь случаем хочу уточнить по функциональности синтетических графиков, будет ли как-то развиваться этот функционал? например хотелось бы делать не только формульные индексы, но и моделировать позиции покупки/продажи группы инструментов, сейчас это сделать затруднительно так как приходится писать громоздкую формулу для учёта стоимости пункта и размера контракта, и на истории стоимость пункта не меняется...
Renat Fatkhullin:
Индикатор не должен надолго забирать себе ресурсы. Лучше долгую инициализацию равномерно растянуть на пошаговую/посимвольную инициализацию в OnCalculate, досчитывая по кусочкам.
Это понятно, чтобы не тормозить другие программы в терминале, но вот тут возникает какое противоречие: при расчёте модели портфеля индикатору потребуются сразу все ряды данных, так как equity портфеля по ним считается, то есть без готовых данных как бы и не получится ничего посчитать, и для портфеля нужны все компоненты сразу, а если портфелей несколько и если между портфелями идёт сравнение или их суммирование, то сразу по нескольким портфелям, и тогда особо не растянуть, ведь это не скользящее окно которое можно по частям считать, здесь сначала идёт расчёт модели, а потом её отрисовка на истории (а потом с каждым тиком обновление последнего бара) - и тогда встаёт вопрос - а как вообще правильно писать такие индикаторы в мт5? - потому я и поднял вопрос про универсальную стандартную функцию которая бы Правильным Образом готовила массив синхронизированных данных для расчёта.
Загружен
Сейчас 18.10 Всё работает.
я вас поздравляю, вам повезло и у вас не та конфигурация процессора, пямяти, ОС или чево-то ещё ,фиг его знает..Но это не делает баг не реальным.
Он вполне реален и проявляется не только у меня.
Это понятно, чтобы не тормозить другие программы в терминале, но вот тут возникает какое противоречие: при расчёте модели портфеля индикатору потребуются сразу все ряды данных, так как equity портфеля по ним считается, то есть без готовых данных как бы и не получится ничего посчитать, и для портфеля нужны все компоненты сразу, а если портфелей несколько и если между портфелями идёт сравнение или их суммирование, то сразу по нескольким портфелям, и тогда особо не растянуть, ведь это не скользящее окно которое можно по частям считать, здесь сначала идёт расчёт модели, а потом её отрисовка на истории (а потом с каждым тиком обновление последнего бара) - и тогда встаёт вопрос - а как вообще правильно писать такие индикаторы в мт5? - потому я и поднял вопрос про универсальную стандартную функцию которая бы Правильным Образом готовила массив синхронизированных данных для расчёта.
Вот это и есть ключевой недочёт. У меня та-же проблема.
В мт4 расчёт и отображение работает мгновенно, а вот в мт5 с индикаторами полная беда, хотя все графики с которых нужно получать цены, постоянно открыты. Получается, можно писать только простейшие индикаторы, наподобие однобуферных МАшек(
Точно есть баг на:
1) Server 2012 (build 9200) on Hyper-V x64, IE 10, RDP, UAC, Intel Xeon E5-2687W v2 @ 3.40GHz, Memory: 3033 / 3839 Mb, Disk: 96 / 107 Gb, GMT-5
2) Windows Server 2012 R2 (build 9600) x64, IE 11, RDP, UAC, QEMU Virtual version (cpu64-rhel6), Memory: 1340 / 2047 Mb, Disk: 15 / 28 Gb, GMT+2
Точно есть баг на:
1) Server 2012 (build 9200) on Hyper-V x64, IE 10, RDP, UAC, Intel Xeon E5-2687W v2 @ 3.40GHz, Memory: 3033 / 3839 Mb, Disk: 96 / 107 Gb, GMT-5
2) Windows Server 2012 R2 (build 9600) x64, IE 11, RDP, UAC, QEMU Virtual version (cpu64-rhel6), Memory: 1340 / 2047 Mb, Disk: 15 / 28 Gb, GMT+2
Ну у меня вот:
Windows 7 Service Pack 1 (build 7601) x64, IE 11, Intel Core i5-2400 @ 3.10GHz, Memory: 469 / 8182 Mb, Disk: 96 / 148 Gb, GMT+2
Это понятно, чтобы не тормозить другие программы в терминале, но вот тут возникает какое противоречие: при расчёте модели портфеля индикатору потребуются сразу все ряды данных, так как equity портфеля по ним считается, то есть без готовых данных как бы и не получится ничего посчитать, и для портфеля нужны все компоненты сразу, а если портфелей несколько и если между портфелями идёт сравнение или их суммирование, то сразу по нескольким портфелям, и тогда особо не растянуть, ведь это не скользящее окно которое можно по частям считать, здесь сначала идёт расчёт модели, а потом её отрисовка на истории (а потом с каждым тиком обновление последнего бара) - и тогда встаёт вопрос - а как вообще правильно писать такие индикаторы в мт5? - потому я и поднял вопрос про универсальную стандартную функцию которая бы Правильным Образом готовила массив синхронизированных данных для расчёта.
Надо писать индикатор с четким осознанием, что сразу вы все не получите.
В OnInit вы должны простимулировать загрузку истории нужных инструментов одиночными вызовами CopyXXX, а вот дожидаться надо полной инициализации в OnCalculate.
У вас же фаза инициализации с ошибкой по всей видимости - вы неправильно дожидаетесь данных и блокируетесь.
Код поставил на отработку. Пока все нормально.
Файл без тела, кстати.
Вот это и есть ключевой недочёт. У меня та-же проблема.
В мт4 расчёт и отображение работает мгновенно, а вот в мт5 с индикаторами полная беда, хотя все графики с которых нужно получать цены, постоянно открыты. Получается, можно писать только простейшие индикаторы, наподобие однобуферных МАшек(
Лично я не вижу удобного и универсального способа, понимаю, что всё так устроено в угоду скорости работы терминала и программ в нём, обращаюсь к разработчикам: сделайте пожалуйста возможность программного запроса к терминалу, что бы терминал самостоятельно поддерживал в актуальном состоянии указанные символы указанных ТФ, и тиковую историю соответствующих символов.
Вот это и есть ключевой недочёт. У меня та-же проблема.
В мт4 расчёт и отображение работает мгновенно, а вот в мт5 с индикаторами полная беда, хотя все графики с которых нужно получать цены, постоянно открыты. Получается, можно писать только простейшие индикаторы, наподобие однобуферных МАшек(
Надо смотреть код.
Вот в коде выше явно букет логических и ресурсных проблем.