Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Скрипты

ThirdPartyTicks - скрипт для MetaTrader 5

Просмотров:
6817
Рейтинг:
(39)
Опубликован:
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;
  • Скрипт может работать с локальным архивом без подключения к интернету;
  • Допускается ручное изменение/добавление данных локального архива;
  • Файловое хранилище не зависит от наличия директорий в нем: можете создавать папки и распределять данные там по своему усмотрению;
  • Баровая история создается с учетом минимальных потерь качества при переходе от режима тестирования "Каждый тик на основе реальных тиков" к "Только цены открытия" - ТС на лимитных ордерах;
  • Ядро скрипта - одноименная библиотека. С ее помощью возможно написание более интересных сценариев;
  • Проведена оптимизация парсинга;
  • Исходник предоставляется в учебных целях, как есть;
  • Чтобы используемая в качестве ядра библиотека стала полностью универсальной, требуется доработка для работы с произвольными источниками и любым форматом котировок.
SV v.4.2.5 SV v.4.2.5

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

OnChart_Stochastic OnChart_Stochastic

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

Improve Improve

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

ZigZag separate ZigZag separate

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