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

 
Ashes:

Чуть выше Вы писали:

Возможно, так задумывалось, но... Провожу натурный эксперимент (build 358).

Удаляю все символы из папки "C:\Program Files\MetaTrader 5\Bases\Alpari-Demo\history"

Подключаюсь к Alpari-Demo (в терминале открыты 5 графиков: EURUSD H1, EURCHF H1, USDJPY H1, GPBUSD H1+M1).

Через несколько минут наблюдаю картину (закачка истории ещё продолжается):

 Содержимое папки C:\Program Files\MetaTrader 5\Bases\Alpari-Demo\history

Спасибо за сообщение. Разберемся.
 
Interesting:

...

При этом если я правильно понимаю размеры файлов истории Вы смотрите в каталоге терминала, о чем говорит расположение "рабочего" каталога - C:\Program Files\MetaTrader 5\Bases\Alpari-Demo\history\EURJPY

У тестера же свой собственый каталог для этих данных - C:\Program Files\MetaTrader 5\tester\Агент (по количеству агентов)\bases\ДЦ или иной брокер (сервер)\history\....

В чем собственно проблема тогда?

Проблема в нежелании внимательно читать исходное сообщение ;)

В папке тестера при тестировании за текущий год действительно 2 файла (2009, 2010), но при первом запуске тестера на конкретном инструменте подкачивается ВСЯ история по нему (если не была закачана ранее или была удалена) в папку "x:\Program Files\MetaTrader 5\Bases\...", и пока он эту ЛИШНЮЮ информацию до конца не докачает, тестирование не начинается.

Я не возражаю против дублирования данных из \MetaTrader 5\Bases\ в MetaTrader 5\tester\Агент (по количеству агентов)\bases, т.к. понимаю, что это моментальный снимок состояния тиков для обеспечения абсолютной идентичности котировок при переборе параметров оптимизации. Но совсем уж лишние в текущий момент данные зачем закачивать?

 
Ashes:

Проблема в нежелании внимательно читать исходное сообщение ;)

В папке тестера при тестировании за текущий год действительно 2 файла (2009, 2010), но при первом запуске тестера на конкретном инструменте подкачивается ВСЯ история по нему (если не была закачана ранее или была удалена) в папку "x:\Program Files\MetaTrader 5\Bases\...", и пока он эту ЛИШНЮЮ информацию до конца не докачает, тестирование не начинается.

Я не возражаю против дублирования данных из \MetaTrader 5\Bases\ в MetaTrader 5\tester\Агент (по количеству агентов)\bases, т.к. понимаю, что это моментальный снимок состояния тиков для обеспечения абсолютной идентичности котировок при переборе параметров оптимизации. Но совсем уж лишние в текущий момент данные зачем закачивать?

Проверю, может действительно я не прав и там есть над чем подумать.
 
Renat:
История закачивается верно - значит был запрос на 2004 год. А при использовании тестера безусловно и верно закачивается вся история на максимальную глубину - это абсолютно верное и осознанное решение. Достаточно посмотреть на "непонимающие" возгласы пользователей МТ4, чтобы понять - если об истории мы не позаботимся, то пользователи не в состоянии даже проконтролировать историю.

Перечитайте мой ответ еще раз, пожалуйста.

Мы не просто так закачиваем и перепроверяем всю историю. Если используется тестер, то это неминуемо (не в этот тест, так в следующем) означает полную и безусловную работу со всей историей вне зависимости от того, что на данном конкретном тесте будет использоваться небольшой промежуток истории. Поэтому терминал заранее подготавливает и полностью перепроверяет глубину и корректность всей истории нужного символа. Конечно же, конкретному тест-агенту для конкретного теста передается/синхронизируется только нужный промежуток истории.

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

Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
  • www.mql5.com
Получение рыночной информации / SymbolIsSynchronized - Документация по MQL5
 
Interesting:

1. Тестер стратегий

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

Если советник мультивалютный остальные символы нужно подгружать самостоятельно.

Идея тут такова:

а. У тестера есть СВОЙ обзор рынка, в который изначально выставляется только пара указанная в параметрах тестера.

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

в. По существующим в обзоре рынка парам тестер стратегий синхронизирует данные с терминалом, а тот в свою очередь с торговым сервером (на котором открыт счет).

При этом загружается история на весь тестируемый период + определенное количество инфы до даты начала тестирования (если не ошибаюсь 1 год).

в. Если такая глубина эксперт (Вас) не устраивает необходимую историю следует подгрузить самостоятельно. Например в блоке инициализации, предварительно проверив наличие истории и синхронность данных.

а. логично

б. т.е., в общем случае, подкачать ПЕРЕД НАЧАЛОМ ТЕСТИРОВАНИЯ всё, что понадобится советнику в ходе тестирования, НЕВОЗМОЖНО (если не качать абсолютно всё).

в. т.е., до запуска советника в тестере соответствующие пары ещё отсутствуют в обзоре рынка тестера (в соответствии с пунктом а.)

в(2). глубина устраивает, большего я не просил.

Таким образом, закачку по поводам б, в, в(2) логичнее (но чуть сложнее) делать по факту обращения к данным в советнике.

Предлагаю добавить #property tester_symbol для заполнения таблицы из пункта а (если идея описана верно), с возможность задать несколько, как у #property description. Но по-прежнему убеждён, что при отсутсвии #property tester_symbol подкачка должна идти "по ходу пьесы" (кроме базового символа), т.к. их НЕОБХОДИМОСТЬ зависит толко от алгоритма работы самого эксперта.

 

Interesting:

2. Терминал

Тут история формируется подобным образом (насколько я понимаю по символам указанным в обзоре рынка терминала, с учетом открытых графиков). При начале работы с терминалом формируется необходимый минимум истории по символам с которыми ведется работа (точное количество баров не помню, но на форуме оно неоднократно указывалось).

Если данная глубина истории не устраивает то данные следует подгрузить самостоятельно. Для этого нужно переключиться на максимальный ТФ - месяц (как один из рекомендуемых вариантов) и при помощи прокрутки графика влево подгрузить историю на максимальную глубину.

Также желательно выставить необходимое число баров на графике в параметрах терминала.

Как оказалось, в конкретном случае закачивается не необходимый минимум, а вся история по символу, с которым ведётся работа.

Наблюдение (билд успел поменяться на 360): если немного поменять условия - не удалять после первоначальной закачки всю папку истории, оставив там текущий год, подкачка предыдущих лет самовольно не осуществляется! До запуска тестера на этом символе.

 
Renat:

Перечитайте мой ответ еще раз, пожалуйста.

Мы не просто так закачиваем и перепроверяем всю историю. Если используется тестер, то это неминуемо (не в этот тест, так в следующем) означает полную и безусловную работу со всей историей вне зависимости от того, что на данном конкретном тесте будет использоваться небольшой промежуток истории. Поэтому терминал заранее подготавливает и полностью перепроверяет глубину и корректность всей истории нужного символа. Конечно же, конкретному тест-агенту для конкретного теста передается/синхронизируется только нужный промежуток истории.

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

   Именно просто так, "чтобы была"! К следующему использованию тестера история могла быть подкорректирована (особенно сейчас, когда она у разных ДЦ имеет кучу недостатков, от полного отсутсвия, до кривых данных).

Пользователь не понимает свалившегося на него счастья! Добавьте в настройках галку "НЕ ХОЧУ, хочу только по запросу пользователя или эксперта/скрипта/индикатора". И "НЕ ХОЧУ принудительного автоматического обновления MT5" тоже.

 
Ashes:

а. логично

б. т.е., в общем случае, подкачать ПЕРЕД НАЧАЛОМ ТЕСТИРОВАНИЯ всё, что понадобится советнику в ходе тестирования, НЕВОЗМОЖНО (если не качать абсолютно всё).

в. т.е., до запуска советника в тестере соответствующие пары ещё отсутствуют в обзоре рынка тестера (в соответствии с пунктом а.)

в(2). глубина устраивает, большего я не просил.

Таким образом, закачку по поводам б, в, в(2) логичнее (но чуть сложнее) делать по факту обращения к данным в советнике.

Предлагаю добавить #property tester_symbol для заполнения таблицы из пункта а (если идея описана верно), с возможность задать несколько, как у #property description. Но по-прежнему убеждён, что при отсутсвии #property tester_symbol подкачка должна идти "по ходу пьесы" (кроме базового символа), т.к. их НЕОБХОДИМОСТЬ зависит толко от алгоритма работы самого эксперта.


Для формирования списка символов, в том числе в тестере удобно (и вполне достаточно) использовать вот эти функции

Получение рыночной информации

Функции для получения информации о состоянии рынка. 

Функция

Действие

SymbolsTotal

Возвращает количество доступных (выбранных в MarketWatch или всех) символов

SymbolName

Возвращает наименование указанного символа

SymbolSelect

Выбирает символ в окне MarketWatch или убирает символ из окна

 
"Вы часто пользуетесь ресайзингом массивов? Порой, мозги кипят, а не знаете почему выскакивает "Array out of range in..."? Тогда мы идём к Вам!". :D

-Проверьте, а не возвращает ли функция ArrayResize() значение "-1"?

Раньше, вроде как всплывало сообщение, типа "Out of memory", и программа аварийно завершалась - теперь нет. build 360.

Документация по MQL5: Операции с массивами / ArrayResize
Документация по MQL5: Операции с массивами / ArrayResize
  • www.mql5.com
Операции с массивами / ArrayResize - Документация по MQL5
 

Build 360. Похоже на ошибки в CTrade:

2010.10.04 18:59:00 CTrade::PositionOpen: instant buy 0.10 EURUSD at 1.36890 sl: 1.36390 tp: 1.37890 [done at 0.00000]

2010.10.05 09:43:00 CTrade::PositionModify: modify buy 0.00 EURUSD (sl: 1.36897, tp: 1.37861) [done]

 

 

Build 360. Несколько раз в тестере были сообщения "tester agent got failed"

GK 0 Tester 18:26:31 EURUSD: history preliminary downloading started

CL 0 Tester 18:28:55 EURUSD: history preliminary downloading completed

GH 0 Core 2 18:28:59 agent process started

HP 0 Core 2 18:29:00 connecting to 127.0.0.1:3000

OI 2 Tester 18:29:05 tester agent got failed

LI 0 Core 2 18:29:05 connect closed

GN 0 Core 2 18:34:14 agent process started

KJ 0 Core 2 18:34:14 connecting to 127.0.0.1:3000

RJ 0 Core 2 18:34:15 connected

OP 0 Core 2 18:34:15 authorized (agent build 360)

NH 0 Tester 18:34:15 EURUSD,M1 (Alpari-Demo): testing of Experts\third.ex5 from 2010.10.04 00:00 to 2010.11.05 00:00 to be started

... 

 

HQ 0 Core 2 19:27:47 agent process started

II 0 Core 2 19:27:48 connecting to 127.0.0.1:3000

CP 2 Tester 19:27:53 tester agent got failed

HP 0 Core 2 19:27:53 connect closed

KI 0 Core 2 19:28:10 connecting to 127.0.0.1:3000

QL 0 Core 2 19:28:10 connected

PN 0 Core 2 19:28:10 authorized (agent build 360)

RJ 0 Tester 19:28:10 EURUSD,M1 (MetaQuotes-Demo): testing of Experts\third_alptest2.ex5 from 2010.10.04 00:00 to 2010.11.05 00:00 to be started

MF 0 Core 2 19:28:11 common synchronization completed

IM 0 Core 2 19:28:11 3124 bytes of account info loaded