Архитектура, таймфреймы, компромисс

 
До сего дня существует противостояние разработчиков и трейдеров в отношении нестандартных таймфреймов.

Развитие торговой платформы и инструментария исследования и анализа данных ценового ряда создало ситуацию, когда МТ4 уже является не только торговым терминалом, но и лабораторией, с возможностью моделирования стохастических и хаотических процессов ... Но, без нестандартных таймфреймов, входящих в состав терминала, действительно не удобно. Это связано, прежде всего с возможностью обработки данных и их обновлений расчета, по образу и подобию активов на стандартных фреймах.

Я предлагаю компромисс, не нарушая Вашу АРХИТЕКТУРУ, дополнить (далее изложение идеи) панель инструментов ПЕРИОД опцией, которая позволяет обращаться к пользовательскому таймфрейму.

Т.е. по мимо опций М1 М5 М15 ... МN, появится и опция UT (User Таймфрейм).

База данных ценового ряда пользователя должна, как я понимаю, хранится и помещаться пользователем в директорию, например, c:\Program Files\MetaTrader 4\history\MetaQuotes-Demo\ и иметь стандартное расширение *. hst (формат МТ4), а имя файла базы данных, например, USDJPYUT = USDJPYUT.hst

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

С уважением

Шерх

P.S. Мне не интересны нестандартные периоды, например, 3H, 5H .... достаточно терминалов, которые предоставляют эти возможности и суть трейда от этого не изменяется, таймфреймов в МТ4 достаточно, более чем, для реального трейдинга. Меня, надеюсь и многих, интересует, предоставленная MQL4 возможность представления данных ценового ряда нелинейными функциями. Вот только обработка вычислений в режиме реального времени - тьма.
 
Объясните, пожалуйста, поподробнее чем же вас всё-таки не устраивают автономные графики, обновляемые риалтайм? Просто пока что сложно понять суть вашей идеи. На автономных графиках можно использовать любые нелинейные функции пересчёта данных. Мой советник к примеру торгует на автономных графиках, имеющих ренко представление.
 
Автономные графики - прекрасное решение в части компромисса архитектуры МТ4 и нестандартных таймфреймов, как для разработчиков, так и для трейдеров и исследователей. Поэтому, автономные графики меня устраивают во всех отношениях, за исключением того, что помещенные на них индикаторы (поскольку это название узаконено, буду использовать именно его) ... не работают так, как они работают на стандартных фреймах. Как программист, я - дилетант. Естественно, что решение этой проблемы вызывает соответствующие трудности, требующие дополнительной профессиональной подготовки именно в программировании. В тоже время, как я вижу, эта подготовка не требуется при помещении индикатора на стандартный фрейм. Поэтому и хотелось бы, что кажется мне логичным, чтобы вычислительный процесс при обработке индикаторов на нестандартных фреймах выполнялся по образу и подобию как на стандартных.

Надеюсь, в меру собственного желания и понимания мне удалось сейчас, хоть более или менее точно, изложить идею.

Шерх
 
Поэтому, автономные графики меня устраивают во всех отношениях, за исключением того, что помещенные на них индикаторы (поскольку это название узаконено, буду использовать именно его) ... не работают так, как они работают на стандартных фреймах.

Честно говоря как программист не вижу никаких проблем для работы индикаторов на автономных графиках.
Вот на этой картинке обновляемой риалтайм, с которой торгует советник, внизу окна висят индикаторы, сделанные не мной, а другими людьми для обычных тайифреймов. Другой вопрос в том, что преобразование данных на автономных графиках по нелинейным формулам требует способностей более-менее опытного программиста. Я лично брал за основу эксперта преобразования данных, написанного уважаемым komposter-ом "MQL4: Графики без воскресных баров" вставив в него вот этот скрипт "MQL4: Всем, кто хотел видеть графики без пропущенных баров - сюда =)" solandr 28.01.2007 12:53

 
Рисунки, вероятно, понятнее. На первом - то, что есть. На втором -то, что должно быть. База данных формируется, обновляется в реальном времени. Проверено, вылизано. А вот так работают индикаторы. При чем, если создавать базу данных по образу и подобию стандартного фрейма - результат тоже. На стандартном инди работают прекрасно. На автономном, вечно проблемы. :)





Да, за ссылку -спасибо. Шерх
 
На стандартном инди работают прекрасно. На автономном, вечно проблемы. :)

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


Спасибо, подумаю. Смущает лишь то, что на активах стандартных фреймов и тождественных им автономных графиках - суть таже.
 
Цитирую "Скрипты и эксперты работают в собственном потоке. Пользовательские индикаторы работают в интерфейсном потоке. Если же пользовательский индикатор вызван при помощи функции iCustom(), то этот индикатор работает в потоке вызвавшей его программы. Библиотечные (импортируемые) функции также работают в потоке вызывающей программы"

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

Если кто-то решил данную проблему, пожалуйста - дайте ссылку.

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

Ошибочное предположение. То в каком потоке работает индикатор никак не влияет на результат его работы. Он использует одни и те же данные (котировки) на основе которых по формулам, заложенным в нём, выдаёт результат в виде графических построений. Если один и тот же индикатор в разных условиях показывает разный результат, то соответсвенно можно предположить, что он ведёт расчёт на основе разных данных. Наверное отсюда и нужно отталкиваться при определении причин отличий работы индикатора. Попробуйте просто в коде индикатора сделать что ли распечатку данных котировок на последних 10 барах к примеру. И сравните результат.
 
Что то с массивами, ... вызвал ArrayInitialize(ExtMapBuffer1,0) перед расчетом основного цикла в функции start() - все стало так как надо. Но, на стандартном фрейме этой проблемы с этими же "инди" у меня не было. Спасибо, solandr! Иногда мысль необходимо подтолкнуть в нужном направлении. Удачи!
 
вызвал ArrayInitialize(ExtMapBuffer1,0) перед расчетом основного цикла в функции start() - все стало так как надо.

Я рад, что удалось решить проблему "малой кровью" без переделки самого терминала.:o)
Вам тоже успехов в торговле!
Причина обращения: