Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 7546
- Рейтинг:
- Опубликован:
- 2018.03.16 09:35
- Обновлен:
- 2022.02.11 07:57
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Исторически сложилось, что для MetaTrader 4 пользуются популярностью сторонние приложения, позволяющие получать тиковую историю из различных источников. Как правило, ее используют в Тестере Стратегий как полигон для проверки советников, а также для исследований (машинное обучение и т.д.). Некоторые источники котировок в обсуждениях стали почти стандартом при поиске "грааля".
Критерий
В представленной MQL5-библиотеке нет какого-либо критерия сравнения тиков. Не описаны причины выбора предложенного источника тикового архива. Но этот архив абсолютно свежий и, соответственно, точно не изученный. Поэтому для выработки собственного критерия ценности/полезности каждому предлагается совершить простое действие - запустить в режиме "Каждый тик на основе реальных тиков" свой советник на встроенном в MetaTrader 5 символе и на создаваемом скриптом пользовательском символе (со сторонней реальной тиковой историей), сравнив полученные результаты. Для этого не потребуется выхода за рамки Терминала и глубоких его знаний.
Скрипт
Скрипт вытягивает тиковую историю из встроенного источника и создает на ее основе соответствующие пользовательские символы.
Комментарии в исходнике частично раскрывают принцип действия.
// https://www.mql5.com/ru/code/20225 #property script_show_inputs #include <fxsaber\ThirdPartyTicks\ThirdPartyTicks.mqh> sinput bool Sync = true; // Synchronization sinput string symbol = ""; // Symbol (NULL - current, "AllSymbols" - All) THIRDPARTYTICKS ThirdPartyTicks; // Подключились к локальному архиву котировок // Один символ void CreateSymbol() { // Определились с символом для работы const string Symb = (symbol == "") ? StringSubstr(_Symbol, 0, 6) : symbol; if (Sync) ThirdPartyTicks.Refresh(); // Прочли доступные данные на источнике архива тиков ThirdPartyTicks[Symb].Update(); // Синхронизировали локальный архив с источником по выбранному символу ThirdPartyTicks[Symb].ToCustomSymbol(true); // Создали пользовательский символ на основе локального архива } // Все символы void CreateAllSymbols() { if (Sync) ThirdPartyTicks.Refresh(); // Прочли доступные на источнике архива тиков данные const uint Amount = ThirdPartyTicks.GetAmount(); for (uint i = 0; _CS(i < Amount); i++) { ThirdPartyTicks[i].Update(); // Синхронизировали локальный архив с источником по выбранному символу ThirdPartyTicks[i].ToCustomSymbol(); // Создали пользовательскый символ на основе локального архива } } void OnStart() { if (symbol != "AllSymbols") CreateSymbol(); else if (MessageBox("Creating all the symbols can take a long time. Do you agree?", __FILE__, MB_YESNO | MB_ICONQUESTION) == IDYES) CreateAllSymbols(); }
Для полноценной работы требуется в настройках Терминала прописать адрес источника котировок, например:
Работа скрипта сопровождается подробными записями своих действий:
UnZip <название_источника>\EURUSD.<суффикс>\EURUSD.<суффикс>_20180313.csv.zip 724002 bytes - unpack size 5466504 bytes. Total Ticks (EURUSD.<суффикс>) = 1645897 Corrected 3 ticks. EURUSD.<суффикс>_<название_источника> saved ticks = 1645897
После чего возможно прогонять советники в Тестере на новых пользовательских символах:
Особенности
- Используются только штатные возможности MQL5: нет DLL, подходит для Маркета;
- Архив котировок сохраняется на локальной машине в виде ZIP-архивов с CSV-файлами;
- Архив котировок синхронизируется с источником: скачиваются только недостающие данные;
- В исходниках присутствуют библиотеки ZIP и Symbol;
- Скрипт может работать с локальным архивом без подключения к интернету;
- Допускается ручное изменение/добавление данных локального архива;
- Файловое хранилище не зависит от наличия директорий в нем: можете создавать папки и распределять данные там по своему усмотрению;
- Баровая история создается с учетом минимальных потерь качества при переходе от режима тестирования "Каждый тик на основе реальных тиков" к "Только цены открытия" - ТС на лимитных ордерах;
- Ядро скрипта - одноименная библиотека. С ее помощью возможно написание более интересных сценариев;
- Проведена оптимизация парсинга;
- Исходник предоставляется в учебных целях, как есть;
- Чтобы используемая в качестве ядра библиотека стала полностью универсальной, требуется доработка для работы с произвольными источниками и любым форматом котировок.

Советник открывает не более одной позиции в сутки. Открытие в определенное время. Поиск самой высокой и самой низкой цен в промежутке. Получение данных с двух индикаторов iMA (Moving Average, MA).

Стохастик на графике цены.

Советник на базе двух iMA (Moving Average,MA) и одного iRSI (Relative Strength Index, RSI). Отслеживание виртуальной прибыли. Работа по двум символам.

ZigZag separate — MetaTrader 5-версия "чудо-индикатора" для MetaTrader 4, который когда-то плавал по сети.