Сборщики тиков. Оптимизация. DDE в VB (VBA)

 

Здравствуйте.

В CodeBase предлагаются разные варианты сборщиков тиков, каждый со своими плюсами и минусами. Предполагаем, что для сборщика запускается собственный экземпляр МТ, для торговли - собственный. Т.е. две копии, как минимум. Количество коллекционируемых инструментов ~20 (под мои нужды).

1. Эксперт, прилепляемый на любой график. Опрашивает с заданой частотой (10 мсек к примеру) инструменты из задаваемого списка, заведомо присутствующие в "Обзор рынка". Я полагаю, что в МТ-сборщике достаточно держать открытым только один график любого инструмента. Можно даже какого-нибудь старого фьючерса, по которому не идет потока котировок, перерисовки etc. Тарахтит с заданной частотой, невзирая на отсутствие котировок, тупым перебором инструментов. Теоретически, может пропустить котировки, вновь поступившие внутри 10 мсек цикла. Сокращение времени цикла должно создать дополнительную нагрузку, увеличение - пропуск котировок. Оптимум где-то посередине. Я взял цифирь, зашитую по дефолту в одном из экспертов (TickSave by komposter 'Сборщик тиков')

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

3. DDE в Excel. Не требует открытых графиков, только наличие инструмента в "Обзор рынка". Корректность сборки тиков в такой связке (MT-->Excel-->csv) под вопросом. Теоретически, может быть реализован на VB (VBA)

В Справочник MQL4 - Выполнение программ  говорится: "...Скрипты и эксперты работают в собственном потоке. Пользовательские индикаторы работают в интерфейсном потоке. .." Как это вляет на производительность и ресурсоемкость МТ?

Подскажите, плз, (с учетом того, что я только начинаю трогать MQL):

a) Какой из вариантов будет эффективнее с точки зрения быстродействия, рационального использования ресурсов компьютера, корректности и максимальной достоверности собираемых данных?

b) Какой код в VB (VBA) должен быть для получения даных по DDE? Я мучал DDEInitiate, DDERequest etc. Ничего не получилось :(( DDEInitiate срабатывает, номер канала получаю, дальше - банан...

.

 
Тема тиков здесь не популярна, как видно по количеству ответов. Многие форекс-профи торгуют глядя на тиковые графики. Но тот кто прибыльно торгует, мало говорит. Поэтому кроме "сборщика тиков" да "тикового индикатора" на этом форуме (да и на других) ничего не нароешь. В этом направлении трудно получить помощь, т.к. это больше связано с ручной стратегией, чем с программированием.
У меня сборщик тиков используется только по прямому назначению, а тики затем направляются "руками" в Excel, MathLab и проч. статобработку для поиска стратегий входа-выхода.
А вот в советнике у меня простой массив на 100 элементов с последними значениями Bid и никаких индикаторов,  только модуль распознавания тиковых патернов.
А возиться с DDE нет ни времени, ни достаточной информации.
 
divenetz:
Тема тиков здесь не популярна...

Дык... Я ведь не об МТС. О коллекции тиковой истории в чистом виде. Без анализа, выводов и принятия решений. Голая статистика (которая знает все (с)).

От тиков-то можно и абстрагироваться. Как раз для программеров вопрос. Если обобщить, то он может звучать так: "Если 'энергоемкую' задачу решать упомянутыми тремя путями, то какой из них эффективнее?" Большим КПД обладает, более оптимальным соотношением цена-качество, что ли.

Ясен перец, что я эти тики дальше погоню для анализа. Мне главное собрать. Максимально достоверно и минимально затратно (по ресурсам компа) :)

Я расчитывал на ответ кодеров, тех, кто ручками делал схожие задачи. А по DDE, вероятно, разработчики должны бы что-то отписать. Может впрямую их спросить? Подожду еще...

Спасибо за ответ. А то уже больше суток тема в нулях висит. Странно, думаю...

 
divenetz:
А вот в советнике у меня простой массив на 100 элементов с последними значениями Bid и никаких индикаторов, только модуль распознавания тиковых патернов.

А я еще замеряю и храню время между тиками в мс. Полезно бывает.
Паттерны в принципе уважаю, но на тиках смотреть не додумался?! Хм.. Пошел тики рисовать.

Chen По DDE я то же вопросы задавал - тишина. Авторитетно так никто и не ответил о надежности передачи тиковой информации по DDE.
 

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

 
VBAG:
По DDE я то же вопросы задавал - тишина. Авторитетно так никто и не ответил о надежности передачи тиковой информации по DDE.

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

Только вопрос-то (b) открытым остается - как получить DDE данные не через таблицу, а через VB(VBA). А то громоздко получается через ловлю событий для листа, их декларацию etc. Вот напрямую бы в VBA. Инструментарий-то для этого есть, но не работает. Может это только в моих кривых ручонках :)

 
DDE сервер в терминале МетаТрейдер имеет собственный накапливаемый буфер отсылки данных.

Это означает, что при правильной работе (подписка на изменения) через DDE получатель будет собирать 100% всех приходящих тиков. Этот вопрос обсуждался пару лет назад, где как раз говорили о гарантиях "не потери" тиков через DDE.
 
scorpionk:

Так это не затратно вроже..


Как сказать... Если у меня в экстреммуме три МТ в реале (минимум - один) и один для сбора тиков по ~20 инструментам с одного из реалов. Процессор под завязку загружен. Ведь параллельно еще куча монстров от MS плюс биржевой терминал на дотнете...

scorpionk:

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

Дык метода-то у всех одинакова - собрать в .csv и проанализировать снаружи от МТ (я не говорю об МТС, танцующей от тиков)

 
Renat:
DDE сервер в терминале МетаТрейдер имеет собственный накапливаемый буфер отсылки данных...

Спасибо за ответ, Ренат. Я, признаться, расчитывал на Вашу помощь.

Renat:
...при правильной работе (подписка на изменения) ...

Поясните, плз, что есть "подписка на изменения"?

Renat:
...Этот вопрос обсуждался пару лет назад...

Я искал (типа "Я учил" :)

И все таки, по вопросу b) - может Вы что-нибудь авторитетно подскажете?

 
Подписка на изменения - обычный/правильный режим работы через DDE:
  • DdeConnect - подключаемся
  • DdeEnableCallback - выставляем принимающую функцию
  • DdeClientTransaction(..., XTYP_ADVSTART, ...) - запускаем процесс подписки на изменения
Поищите исходники реализации DDE client и интернете.
 

Renat

Подскажите, есть ли возможность собрать тики, как показано на рисунке ниже. Хотелось бы собрать тики с учетом времени, когда он (тик) был сгенерирован ДЦ, а не когда он пришел ко мне. Даже в Москве выделенка не идеальна, есть задержки и иногда большие. Иногда бывает, ждешь 2-3 минуты, а потом вываливается куча тиков. И не понятно это из-за того что нэт плохой или на самом деле ДЦ начал генерировать тики с такой скоростью.

Рисунок это содержание файла выложенного Вами в этой ветке. 'Стандартные заблуждения в попытках торговать в шуме (было "Кошмар на улице МТ4")'

Там есть Unix Time и очень бы хотелось получать помимо тика (цены) еще и время когда этот тик был сгенерирован ДЦ. Вот только как это сделать, не знаю. Очень бы хотелось расставлять тики правильно по временной оси.

Заранее спасибо. Всех с наступающим Новым Годом, Здоровья, Счастья, Успехов.

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