Alexey Navoykov: А вот это палка о двух концах. Принудительное скачивание минуток (а это большой объём данных) далеко не всегда полезно. Если нам требуется только анализ D1, то зачем нам скачивать минутки, теряя время и потребляя ненужный трафик. Платить нужно только за то, что используешь. Если требуется выкачать все таймфреймы, было бы логично сделать специальную опцию для этого.
И ещё момент касательно неявного оператора копирования. У вас он имеет тип void, а в C++ он возвращает ссылку на объект. Коль уж MQL пока не поддерживает ссылки, то можно было бы возвращать константную копию объекта, это хоть какой-то компромисс, дающий возможность использования константных методов у возвращаемого объекта.
Спасибо за предложение.
Для оператора копирования по умолчанию, правильнее будет вернуть ссылку на объект, для которого этот оператор вызывается.
Вот результаты на последних бетах MT4 1150 (доступно на MetaQuotes-Demo) и MT5 1959: данные в микросекундах
MT4
MT5
Холодный запуск
Было: Total: 51 442 msc в 1150
Стало: Total: 52 679 msc в 1170
Было: Total: 1 434 053 msc в 1959 билде
Стало: Total: 262 883 msc в 1968 билде
Горячий запуск
Было: Total: 15 524 msc в 1150
Стало: Total: 15 791 msc в 1170
Было: Total: 21 456 msc в 1959 билде
Стало: Total: 13 658 msc в 1968 билде
Разница в холодном подъеме в том, что МТ5 проводит полную проверку истории и гарантированно сверяется с торговым сервером, чтобы докачать недостающие или отсутствующие данные.
Мы серьезно оптимизировали поднятие и синхронизацию баз данных в MetaTrader 5 build 1968 (бета уже доступна).
В 5 раз быстрее базы поднимаются при холодном запуске и в 1.5 раза быстрее при горячем.
Причем в горячем режиме подъем баз стал быстрее, чем в четверке.
To select a position by OrderSelect(_Symbol) - but how can this function perform this? I would expect to enter a index like OrderSelect(p) like PositionGetTicket(p):
Выбрать позицию по OrderSelect(_Symbol) - но как эта функция может это сделать? Я бы хотел ввести такой индекс, как OrderSelect(p), как PositionGetTicket(p):
int p = PositionsTotal();
while(p-->0) { // returns the number of open positionsulong ticket=PositionGetTicket(p);
А вот это палка о двух концах. Принудительное скачивание минуток (а это большой объём данных) далеко не всегда полезно. Если нам требуется только анализ D1, то зачем нам скачивать минутки, теряя время и потребляя ненужный трафик. Платить нужно только за то, что используешь. Если требуется выкачать все таймфреймы, было бы логично сделать специальную опцию для этого.
Спасибо за предложение.
Для оператора копирования по умолчанию, правильнее будет вернуть ссылку на объект, для которого этот оператор вызывается.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Баг компилятора: not actual parameters count for macro
Alexey Navoykov, 2019.01.07 13:33
Билд 1966, 64 бит. Ошибка в макросах:
В C++ работает корректно.
У вас несколько погрешностей:
Я переписал пример в виде скрипта, уменьшил MN до 250 баров, добавил проверки и вывод информации об окружении.
Вот результаты на последних бетах MT4 1150 (доступно на MetaQuotes-Demo) и MT5 1959: данные в микросекундах
Было: Total: 1 434 053 msc в 1959 билде Стало: Total: 262 883 msc в 1968 билдеРазница в холодном подъеме в том, что МТ5 проводит полную проверку истории и гарантированно сверяется с торговым сервером, чтобы докачать недостающие или отсутствующие данные.
Мы серьезно оптимизировали поднятие и синхронизацию баз данных в MetaTrader 5 build 1968 (бета уже доступна).
В 5 раз быстрее базы поднимаются при холодном запуске и в 1.5 раза быстрее при горячем.
Причем в горячем режиме подъем баз стал быстрее, чем в четверке.
I haven't checked it myself but a user of the German forum has a problem - I guess caused by OrderSelect().
In the reference is written:
Сам я его не проверял, но у одного из пользователей немецкого форума возникла проблема - наверное, из-за OrderSelect().
В справке написано:
And that's the way he was using it:
И вот как он его использовал:
To select a position by OrderSelect(_Symbol) - but how can this function perform this? I would expect to enter a index like OrderSelect(p) like PositionGetTicket(p):
Выбрать позицию по OrderSelect(_Symbol) - но как эта функция может это сделать? Я бы хотел ввести такой индекс, как OrderSelect(p), как PositionGetTicket(p):
Am I wrong?
Я ошибаюсь?Я ошибся?
Я ошибаюсь?Да, нужно использовать PositionGetTicket и PositionSelectByTicket, вот так
Да, нужно использовать PositionGetTicket и PositionSelectByTicket, вот так
Я извиняюсь, а зачем дважды выбирать позицию?
Ведь в документации написано
PositionGetTicket
Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с нейВыходит что эта строка
PositionSelectByTicket (ticket); // второй раз выбрали позициюсовершенно лишняя.
Я извиняюсь, а зачем дважды выбирать позицию?
Ведь в документации написано
Выходит что эта строка
совершенно лишняя.
Да, на втомате добавил
Да, нужно использовать PositionGetTicket и PositionSelectByTicket, вот так
I have suggested that - but my concerns were about the function PositionSeletct(_Symbol) in MQL5. I think this function cannot work as intended!
Я предположил это, но меня беспокоила функция PositionSeletct(_Symbol) в MQL5. Я думаю, что эта функция не может работать должным образом!
clrDarkSeaGreen
во входных параметрах индикатора отображается ->143,188,143