Советник, записывающий тиковую историю. Как сохранить все тики ?

 
Всем доброго времени суток!
Коллеги, вот такой у меня вопрос. Пишу советник для MT4. На MQL4, естественно. :)  Помимо торговли, советник должен записывать в файл тиковую историю (для последующей оптимизации по окончании торговой недели). Вторую задачу я решил - тики пишутся. Теперь настала очередь первой и основной - торговля. При торговле будут открываться и закрываться ордера. Ясно, что эти события будут часто занимать времени гораздо больше, чем один тик, а, значит, при записи тиков в файл будут пропуски. Как можно этого избежать ? Варианты со скачиванием архива котировок не предлагайте. У моего брокера они появляются только через две недели.
 

Чтобы собирать тики, советник использовать нельзя. Только индикатор. 

Таких программ (сборщиков тиков) великое множество. На моем сайте есть такой в исходном коде. Также бесплатно прилагается история тиков по трем брокерам и 24-м парам более чем за год.

 
Scriptong:

Чтобы собирать тики, советник использовать нельзя. Только индикатор. 

Что мешает это делать одним советником, который пишет тики по всем символам через OnTimer c интервалом ~ 1 мс? Тики пропускать будет также, как и индикатор, когда они будут приходить пачками. Советник, вроде, в своем потоке исполняется, не тормозя, как это может индикатор.

На моем сайте есть такой в исходном коде. Также бесплатно прилагается история тиков по трем брокерам и 24-м парам более чем за год.

 Сранивали отличие результатов сборщика и истории от самого брокера (ГКФХ и Альпари)? Сколько MT4-коллектор не в состоянии поймать?

И да, за историю Спасибо!

 

Глянул Ваш код. Жаль, что с асками облом. В этом смысле актуально:

hrenfx:

Почему разработчики дают человеку хлеб в виде продажи востребованного сервиса взломщика MT4-тестера, чтобы тестер мог тестировать по реальным тикам?

Специально проверил, взял тики (один тик - две цены: бид и аск). "Пропатчил" MT4-тестер. Прогнал через него советник, который записывал каждый тик. И сравнил на выходе тиковую историю тестера с реальной (на каждом тике сравнивал бид и аск). Все идеально совпадает.

Разработчик этого "патча" уже на протяжении многих лет зарабатывает деньги. Делает это заслуженно, т.к. реально MT4-тестер идеально может протестить почти любые ТС. Но почему паренек делает это, а команда разработчиков - нет?

Еще раз повторяю, там не тиковая история бидов, к которым прибавляется фикс. спред. А тиковая история обеих цен. Он аски записывает в поле Volume и каким-то хаком заставляет тестер думать, что этот Volume - это аск. А т.к. Volume никому практически не нужен, то все довольны, как слоны, акромя моментов, когда надо в очередной раз платить парню за продление работы его патча.

И еще вот что, этот паренек - монополист. Больше никто не создал подобного хака MT4-тестера. Хоть такой хак востребован уже очень много лет.

Сам тиковой историей в MT4 не пользуюсь. Достаточно кастомной M1, которая на 99% совпадает с тиковой (если торговать только лимитниками) по результатам, но на несколько порядков быстрее тестится. Но если тестить всякия HFT, пробойные системы и работающие по маркету, то без тиков, конечно, тяжко совсем. Вот паренек на таких и зарабатывает. Тем более, он великолепно своим "патчем" дает возможность экономить на тестерных граалях. Т.к. после прогона по настоящей тиковой истории обеих цен такие граали рассыпаются почти все. И никаких демо, а тем более реал-тестов проводить не нужно.

 
Scriptong:

Чтобы собирать тики, советник использовать нельзя. Только индикатор. 

Таких программ (сборщиков тиков) великое множество. На моем сайте есть такой в исходном коде. Также бесплатно прилагается история тиков по трем брокерам и 24-м парам более чем за год.

Вот я валенок!

Почему-то думал, что только советник может собирать тики, формируя файлы!

Совсем забыл про индикаторы, как класс!

Сейчас просто перенес свой файл советника *.mq4 из папки Experts в папку Indicators, запустил терминал и прикрепил к графику. Все заработало!

Спасибо большое за подсказку. Век живи - век учись!

 
hrenfx:

Что мешает это делать одним советником, который пишет тики по всем символам через OnTimer c интервалом ~ 1 мс? Тики пропускать будет также, как и индикатор, когда они будут приходить пачками. Советник, вроде, в своем потоке исполняется, не тормозя, как это может индикатор.

К сожалению, мешает архитектура. Советник получает только последний пришедший тик. Индикатор получает весь пакет, который пришел с момента последней итерации. Единственный минус - все тики пакета будут иметь одно и то же время прихода.

 Сранивали отличие результатов сборщика и истории от самого брокера (ГКФХ и Альпари)? Сколько MT4-коллектор не в состоянии поймать?

С теми данными, которые дают брокеры, сравнение не проводил. Тут проблема в том, что уже не раз сталкивался с "причесыванием" истории от них задним числом (убираются шпильки и менее значимые выбросы), что несколько искажает реальную картину.

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

 Глянул Ваш код. Жаль, что с асками облом. В этом смысле актуально:


Не понял, почему с Ask облом? В базе есть и Bid, и Ask. Просто в МТ4 тестере невозможно использовать собранные Ask-и. Если же написать свой тестер, то информацию можно использовать.
 
Scriptong:

К сожалению, мешает архитектура. Советник получает только последний пришедший тик. Индикатор получает весь пакет, который пришел с момента последней итерации. Единственный минус - все тики пакета будут иметь одно и то же время прихода.

Могу просто не знать: как получить доступ из индикатора ко всем тикам из одного пакета?

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

Да, есть. Это критерий сравнения торговых условий разных фидов. Нужно прогнать ЗигЗаг (вершинки - бид, низинки - аск) с условием нулевого мин. колена и посчитать сумму колен. У кого выше (и насколько) - там лучше цены были на интервале расчета.

Не понял, почему с Ask облом? В базе есть и Bid, и Ask. Просто в МТ4 тестере невозможно использовать собранные Ask-и. Если же написать свой тестер, то информацию можно использовать.
Речь шла об аск-обломе использования Вашего FXT в MT4-тестере. Поэтому и привел цитату, где есть некоторое непонимание политики разработчиков, когда всего один умелец хакает каждый новый билд MT4, чтобы тестер принимал еще и аски. Это единственное подобное публичное (и платное) решение на данный момент для MT4-тестера. Разработчики косвенно отвечают за эту монополию. При этом то, что подвластно одному человеку и востребовано многими пользователями MT4, они принципиально делать не хотят.
 
Scriptong:

К сожалению, мешает архитектура. Советник получает только последний пришедший тик. Индикатор получает весь пакет, который пришел с момента последней итерации. Единственный минус - все тики пакета будут иметь одно и то же время прихода.

Можете объяснить, что Вы имеете в виду ? Что значит "Советник получает только последний пришедший тик" ? И какой-такой "весь пакет" получает индикатор ?

И там, и здесь функция start() запускается по приходу нового тика с сервера, как я понял из доки на MQL4. Просто в советнике функция start() может не успеть завершиться до следующего тики из-за сложного алгоритма расчета или из-за функций открытия/закрытия ордера. У индикатора, если алгоритм расчета простой и быстрый, таких проблем быть не должно. Я так понимаю. Или Вы что-то другое имеете в виду ?

 
Kir_7:

Можете объяснить, что Вы имеете в виду ? Что значит "Советник получает только последний пришедший тик" ? И какой-такой "весь пакет" получает индикатор ?

И там, и здесь функция start() запускается по приходу нового тика с сервера, как я понял из доки на MQL4. Просто в советнике функция start() может не успеть завершиться до следующего тики из-за сложного алгоритма расчета или из-за функций открытия/закрытия ордера. У индикатора, если алгоритм расчета простой и быстрый, таких проблем быть не должно. Я так понимаю. Или Вы что-то другое имеете в виду ?

hrenfx:

Могу просто не знать: как получить доступ из индикатора ко всем тикам из одного пакета?

По словам разработчиков терминала индикатор обрабатывает весь поступивший пакет тиков, который он пропустил. Выглядит это как обособленная реакция на каждый такой тик, т. е. функция OnCalculate (в старой версии MQL4 - start) вызывается нужное количество раз.

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

Да, есть. Это критерий сравнения торговых условий разных фидов. Нужно прогнать ЗигЗаг (вершинки - бид, низинки - аск) с условием нулевого мин. колена и посчитать сумму колен. У кого выше (и насколько) - там лучше цены были на интервале расчета.

ОК. Попробую на выходных. По результатам здесь и отпишусь. Только будут фигурировать названия Брокер №1 и Брокер№2, без упоминания названий.

 Речь шла об аск-обломе использования Вашего FXT в MT4-тестере. Поэтому и привел цитату, где есть некоторое непонимание политики разработчиков, когда всего один умелец хакает каждый новый билд MT4, чтобы тестер принимал еще и аски. Это единственное подобное публичное (и платное) решение на данный момент для MT4-тестера. Разработчики косвенно отвечают за эту монополию. При этом то, что подвластно одному человеку и востребовано многими пользователями MT4, они принципиально делать не хотят.

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

  • Переход на МТ5, если там действительно появится возможность создания пользовательского финансового инструмента (т. е. с возможностью использования пользовательской истории)
  • Написание своего тестера
 
Scriptong:

По словам разработчиков терминала индикатор обрабатывает весь поступивший пакет тиков, который он пропустил. Выглядит это как обособленная реакция на каждый такой тик, т. е. функция OnCalculate (в старой версии MQL4 - start) вызывается нужное количество раз.

Надобно проверить:

#property strict

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{  
  static datetime PrevTime = 0;
  static int AmountTicks;
  
  if (PrevTime != time[0])
  {
    Print("Real TickVolume = " + (string)tick_volume[1] + ", AmountTicks = " + (string)AmountTicks);
    
    AmountTicks = 0;
    
    PrevTime = time[0];
  }
  
  AmountTicks++;

  return(rates_total);
}

ОК. Попробую на выходных. По результатам здесь и отпишусь. Только будут фигурировать названия Брокер №1 и Брокер№2, без упоминания названий.

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

Да, я чуть позже понял, когда прошел по ссылке на свой конвертер. К сожалению, при текущей архитектуре МТ4 в тестере невозможно получить переменный Ask. По сообщениям разработчиков изменение этой архитектуры не планируется, т. к. требует больших трудозатрат

Один паренек взламывает за несколько минут каждый новый билд (всего несколько байт в EXE, который защищают разработчики из-за всех сил) MT4-тестера, чтобы он работал именно так, как все хотят. А вы говорите о трудозатратах. Принципиально не хотят - да.
 
hrenfx:

Надобно проверить:

Вас (или Вы сами) ввели в заблуждение:

Real TickVolume = 210, AmountTicks = 195
Real TickVolume = 160, AmountTicks = 155
Real TickVolume = 82, AmountTicks = 81
Real TickVolume = 191, AmountTicks = 171
Real TickVolume = 128, AmountTicks = 117
Real TickVolume = 106, AmountTicks = 99
Real TickVolume = 100, AmountTicks = 91

В MT4 не существует способа собрать тики без пропусков. Аналога CopyTicks нет. Поэтому логично одно решение на все символы:

hrenfx:

...одним советником, который пишет тики по всем символам через OnTimer c интервалом ~ 1 мс? Тики пропускать будет также, как и индикатор, когда они будут приходить пачками. Советник, вроде, в своем потоке исполняется, не тормозя, как это может индикатор.

В комплекте с замечательным решением.

 
hrenfx:

Надобно проверить:

hrenfx:

Вас (или Вы сами) ввели в заблуждение:

В MT4 не существует способа собрать тики без пропусков. Аналога CopyTicks нет. Поэтому логично одно решение на все символы:

В комплекте с замечательным решением.

Вы пропустили такой важный момент, который я указал Выше, как запуск индикатора в выходные. На выходных нет тиков, но индикатор при запуске отрабатывает их. Как Вы смогли это проверить сегодня, когда рынок открыт?

hrenfx:

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

Нет, про сервис я не зарекался. Будет лишь однократное сравнение с публикацией результатов. Делать это на постоянной основе нет сил.

  Один паренек взламывает за несколько минут каждый новый билд (всего несколько байт в EXE, который защищают разработчики из-за всех сил) MT4-тестера, чтобы он работал именно так, как все хотят. А вы говорите о трудозатратах. Принципиально не хотят - да.

 Ломать - не строить. Вот пусть этот паренек создаст что-нибудь достаточно популярное, тогда и посмотрим на него и его решения. 

Насчет же новой архитектуры у меня нет никаких предпосылок, чтобы не верить разработчикам терминала. Как программист я их понимаю. В обществе трейдеров нет массового запроса на тиковую историю. Тому подтверждением мои работы, выложенные в свободном доступе, в том числе и здесь. За год с небольшим интерес к этой теме проявило едва с десяток человек. Поэтому соотношение затрат на изменения архитектуры терминала к возможной финансовой выгоде получается неимоверно большим. Вот и не берутся они за это.  

Причина обращения: