Обсуждение статьи "Создание и тестирование пользовательских символов в MetaTrader 5"

 

Опубликована статья Создание и тестирование пользовательских символов в MetaTrader 5:

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

Создание пользовательского символа

Покажем, как создать свой собственный символ на основе уже существующего в Обзоре рынка. Откройте правой кнопкой мышки окно Символы и выберите тот, на основе которого вы хотите создать свой собственный.

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

Все пользовательские символы помещаются в дереве Символов в отдельную директорию <Custom> и всегда находятся в своем разделе, независимо от брокера, к которому вы в данный момент подключены. Сами ценовые данные пользовательских символов сохраняются в отдельном каталоге Custom, вне каталогов конкретных торговых серверов:

C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

В этом еще один плюс создания собственного символа — вы можете просто копировать нужные вам символы от каждого брокера в свою пользовательскую группу. Удалять пользовательский символ можно только в том случае, если по нему нет открытых графиков и он не присутствует в Обзоре рынка. Одним словом, всё как у настоящих символов.


Автор: MetaQuotes Software Corp.

 

CustomTicksReplace

Полностью заменяет ценовую историю пользовательского инструмента в указанном временном интервале данными из массива типа  MqlTick

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

 
Пробую бэктест (в любом режиме) с 1-го августа, вываливается ошибка
2017.09.04 11:52:40.139 Tester  EURCHF_custom: history data begins from 2017.07.25 00:00
Добавил истории, бестолку
2017.09.04 11:57:50.498 Tester  EURCHF_custom: history data begins from 2017.06.13 00:00
 
fxsaber:
Пробую бэктест (в любом режиме) с 1-го августа, вываливается ошибкаДобавил истории, бестолку

Какой таймфрейм для тестирования задан? Статья Основы тестирования в MetaTrader 5 говорит, что необходимо 100 баров:

Агент тестирования закачивает только недостающую историю с небольшим запасом, чтобы обеспечить необходимые данные на истории для расчета индикаторов на момент начала тестирования. Минимальный объем истории при скачивании с торгового сервера для таймфреймов D1 и меньше составляет один год. Таким образом, если запускается тестирование на интервале  2010.11.01-2010.12.01 (тестирование на интервале в один месяц)  с периодом M15 (каждый бар равен 15 минутам), то у терминала будет запрошена история по инструменту за весь 2010 год. Для таймфреймов Weekly будет запрошена история в 100 баров, что составляет примерно два года (в году 52 недели). Для тестирования на месячном таймфрейме Monthly агент запросит историю за 8 лет (12 месяцев * 8 лет = 96 месяцев).

 
Rashid Umarov:

Какой таймфрейм для тестирования задан? Статья Основы тестирования в MetaTrader 5 говорит, что необходимо 100 баров:

M1. Использовал этот скрипт для создания символа.

 
fxsaber:

M1. Использовал этот скрипт для создания символа.

Помимо EURCHF_custom создал EURUSD_custom. И бэктест по EURCHF пошел, при этом подтягивая данные из EURUSD_custom.

Думал, что после удаления EURUSD_custom бэктест не пойдет, ан нет. Теперь работает.

Зачем нужно было создавать EURUSD_custom, а затем удалять его, чтобы тестер заработал - не ясно.


ЗЫ Баг.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Symbol

fxsaber, 2017.09.04 13:54

Считает то правильно новый кросс - не конвертирует прибыль. Да вот только зачем-то тянет за собой мажор, когда он нигде не используется

2017.09.04 14:46:43.062 Core 1  EURCHF_custom: generate 975389 ticks in 0:00:00.063, passed to tester 3210 ticks
2017.09.04 14:46:43.062 Core 1  EURUSD: generate 979976 ticks in 0:00:00.062, passed to tester 8696 ticks
 
fxsaber:

Помимо EURCHF_custom создал EURUSD_custom. И бэктест по EURCHF пошел, при этом подтягивая данные из EURUSD_custom.

Думал, что после удаления EURUSD_custom бэктест не пойдет, ан нет. Теперь работает.

Зачем нужно было создавать EURUSD_custom, а затем удалять его, чтобы тестер заработал - не ясно.

Вы же не приводите всех деталей - валюту счета, валюту прибыли. Раз тестер пытается получить историю по каким-то символам, значит эти символы требуются ему для расчетов.

 
Rashid Umarov:

Вы же не приводите всех деталей - валюту счета, валюту прибыли. Раз тестер пытается получить историю по каким-то символам, значит эти символы требуются ему для расчетов.

Интересно, что настоящий EURCHF валюту прибыли имеет CHF, валюту маржи EUR и базовую валюту EUR.

И получается в тестере какой-то парадокс. Он должен вычислить, сколько EUR (базовая валюта) входит в лот, затем конвертировать это количество в EUR (валюта маржи) - здесь только повезло с коэффициентом (EUR/EUR = 1). После этого Маржу он должен перевести в USD (валюта счета) и посмотреть, хватает ли ее. При вычислении профита, он должен сконвертировать CHF (валюта прибыли) в USD (валюта счета).


Итого, при самом худшем раскладе тестер должен делать аж три конвертации (если соответствующие мажоры имеются). И тянуть, конечно, дополнительно ТРИ мажора к кроссу, по которому идет тест!

 
fxsaber:

Вы тестируете форексные инструменты в режиме именно форекса/кросскурсов. Поэтому требования в рыночному окружению такие же.

В вопросах приводите сразу полные логи, а не вырванные строчки, пожалуйста.

 
Renat Fatkhullin:

Вы тестируете форексные инструменты в режиме именно форекса/кросскурсов. Поэтому требования в рыночному окружению такие же.

Не понял.

В вопросах приводите сразху полные логи, а не вырванные строчки, пожалуйста.

Приложил.

Файлы:
Log.zip  3 kb
 
fxsaber:

Не понял.

Приложил.

Согласно логам, валюта депозита = USD, тестирование идет на символе EURCHF.  Тестеру для расчета маржи необходимы котировки EURUSD или USDEUR.

2017.09.04 15:26:30.999 Tester  EURCHF_custom: history data begins from 2017.06.13 00:00
2017.09.04 15:26:31.000 Core 1  agent process started
2017.09.04 15:26:31.442 Core 1  connecting to 127.0.0.1:3000
2017.09.04 15:26:31.442 Core 1  connected
2017.09.04 15:26:31.448 Core 1  authorized (agent build 1653)
2017.09.04 15:26:31.452 Tester  EURCHF_custom,M1 (MetaQuotes-Demo): testing of Experts\Test.ex5 from 2017.08.01 00:00 to 2017.08.15 00:00
2017.09.04 15:26:31.468 Core 1  common synchronization completed
2017.09.04 15:26:31.529 Tester  quality of analyzed history is 100%
2017.09.04 15:26:31.683 Core 1  MetaTester 5 started on 127.0.0.1:3000
2017.09.04 15:26:31.683 Core 1  initialization finished
2017.09.04 15:26:31.683 Core 1  login (build 1653)
2017.09.04 15:26:31.683 Core 1  38520 bytes of account info loaded
2017.09.04 15:26:31.683 Core 1  1482 bytes of tester parameters loaded
2017.09.04 15:26:31.683 Core 1  2748 bytes of input parameters loaded
2017.09.04 15:26:31.683 Core 1  4356 bytes of symbols list loaded
2017.09.04 15:26:31.683 Core 1  expert file added: Experts\Test.ex5. 446309 bytes loaded
2017.09.04 15:26:31.683 Core 1  initial deposit 10000000.00 USD, leverage 1:500
2017.09.04 15:26:31.683 Core 1  successfully initialized

Он их ищет среди доступных символов и находит EURUSD, происходит закачивание и синхронизация

2017.09.04 15:26:31.683 Core 1  EURUSD: symbol to be synchronized
2017.09.04 15:26:31.683 Core 1  EURUSD: symbol synchronized, 3464 bytes of symbol info received
2017.09.04 15:26:31.683 Core 1  EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
2017.09.04 15:26:31.683 Core 1  EURUSD: history synchronized from 2016.01.04 to 2017.08.15
Причина обращения: