Определение времени уровня Fibo Time Zones

 
Привет всем метатрейдерам!

Дублирую в несущественной редакции вопрос, заданный мной на Пауке:

Допустим, я выделил какой-нибудь свинг и по нему построил две системы уровней - Fibo retracements и Fibo Time Zones. Получаем двумерную Фибо-сетку, которая по времени направлена в будущее. Существует ли в МТ4 несложный способ поставить точно в узлах сетки некие символы (Arrows, точнее Wingdings)?

Решение задачи пока вижу так. Для этого нужно вычислить координаты этих узлов. Ценовую координату заданного узла вычислить несложно:

<Цена_уровня> = <Конечная_цена_свинга> - <Длина_свинга_по_цене> * ObjectGet( <Имя_объекта_Fibo_retracement>, OBJPROP_FIRSTLEVEL + <Номер_уровня_Fibo_retracement>);

Это обычная линейная интер(экстра)поляция по цене. Проверено, работает.

Однако аналогичная операция по времени (Fibo Time Zones) неточна, так как шкала времени на Форексе нелинейна: есть праздники и выходные, которые нужно исключать (я работаю не на дневках, а на коротких) -а еще ведь есть и пропуски баров... И вообще - каким образом в МТ4 реализована привязка этих уровней к конкретному таймфрейму? Ведь при переходе с 5-минуток на, скажем, 15-минутки и положение уровней явно меняется. Может быть, как-то по пиксельному смещению - или по количеству баров?

Насколько мне известно, в Омеге есть календарь, в котором можно явно и непрограммно задать выходные. В МТ4 такого, кажется, не видно, но хотелось бы видеть. Не обязательно привязывать его к конкретным объектам и вычислениям, пока достаточно реализовать его "standalone" и сделать к нему программный доступ, просто "шоб було" :).

Конечно, сейчас такой календарик можно реализовать программно, так как есть тип данных datetime со своими методами. Устроить проверку на наличие выходных внутри нужного временного диапазона - и все. Но, может быть, все же есть более прямой способ вычисления координаты уровня Fibo Time Zones? Буду рад любому осмысленному ответу.

С уважением и НП.
 
считается и рисуется попиксельно. но так как точки можно поставить только точно на бар, то фактически получается по количеству баров
 
считается и рисуется попиксельно. но так как точки можно поставить только точно на бар, то фактически получается по количеству баров


ОК, Slawa, спасибо за ответ. А есть ли возможность в МТ4 реализовать программную привязку горизонтальной координаты wingdings-символа к конкретному бару, а не ко времени, если уж на то пошло?

C уважением и НП.

P.S. Поигрался с wingdings, подвигав их туда-сюда и заглядывая в свойства. Получается так: шкала времени в будущем не имеет выходных, т.е. непрерывна. В будущем можно легко позиционировать символ на субботу или воскресенье (скажем, полдень). Ну это вполне логично, конечно, ибо только Господь его знает, будущее, и нечего разработчикам перегружать терминал всякими изысками а ля Омега... В таком случае все безусловно проще: достаточно только проверить и изъять все выходные на интервале, охватываемом свингом, а дальше считать простой интерполяцией этого интервала, не заботясь о выходных, так как здесь по-настоящему важно количество баров, а не прошедшее астрономическое время.

Но вот еще вопросик: насколько сильно картина искажается пропущенными барами (скажем, ночью, когда котировок нет по несколько минут)?
 
А есть ли возможность в МТ4 реализовать программную привязку горизонтальной координаты wingdings-символа к конкретному бару, а не ко времени, если уж на то пошло?

есть такая функция IBarShift, которая отдаёт номер бара по времени

Получается так: шкала времени в будущем не имеет выходных, т.е. непрерывна.

именно так. просто, когда не приходят тики (выходные же) бары и не формируются

Но вот еще вопросик: насколько сильно картина искажается пропущенными барами (скажем, ночью, когда котировок нет по несколько минут)?

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


Ну да, получается, что этот факт косвенно подтверждает теорию Дука: значимы только те изменения, которые не меньше средней ошибки измерений. Нет котировок - нет времени, т.к. нет изменений.

ОК, мой вопрос разрешен полностью, спасибо за участие.

С уважением и НП.
 
В билде 182 от 14.09.05 в дикшионере действительно есть такая функция, но синхронизация не доступна из него. По Ctl+F1 справка есть

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)


Поиск бара по временем открытия. Функция возвращает смещение бара с определенном временем открытия. Если бар, имеющий определенное время открытия отсутствует, функция возвращает, в зависимости от exact параметра, -1 или ближайшее смещение бара.

Параметры

symbol - Символьное имя инструмента, на данных которого будет вычислятся индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика.
time - Значение поиска (время открытия бара).
exact - Метод возврата, если бар не найден. ЛОЖЬ - iBarShift возвращает ближайший. ИСТИНА - iBarShift возвращает -1.

Пример

datetime some_time=D'2004.03.21 12:00';
int shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);

 
В билде 182 от 14.09.05 в дикшионере действительно есть такая функция, но синхронизация не доступна из него. По Ctl+F1 справка есть

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)


Спасибо, Rosh, мне, наверно, обратная функция нужна, т.е.

datetime iTime( string symbol, int timeframe, int shift)
...

Parameters

symbol - Symbol the data of which should be used to calculate indicator. NULL means the current symbol.
timeframe - Time frame. It can be any of Time frame enumeration values.
shift - Shift relative to the current bar (number of periods back), where the data should be taken from.

Вот в ней, интересно, можно ли указывать отрицательный shift (чтобы, отсчитав некоторое количество баров в будущее, определить время и поставить туда Arrow)?

Короче, алгоритм получается совсем простым, даже и выходные не надо учитывать: вычисляем, сколько баров внутри свинга, потом откладываем Фибо-пропорциональные количества баров в будущее, после чего определяем времена в будущем по iTime(), а затем втыкаем туда Arrow.

С уважением и НП.
 
Хммм.. Из Словаря описание этой функции тоже получить нельзя.
Теперь буду знать и про нее :)
Я понял, что изобрел велосипед, вместо того чтобы использовать ее тут - Script "James Bond.mq4"
Посмотрел описание и понял, что мог немного сэкономиить в коде.
 
Вопрос разработчикам: а не очень ли сложно объединить все Фибо-рисовалки в единый инструмент, в котором галочками можно было бы отмечать те группы линий, которые надо нарисовать, и чтобы там же оставалась возможность редактирования их свойств? Тогда вместо того чтобы рисовать отдельно Fibo Ret, а потом Fibo Time Zones (может быть, уже не так точно, кстати), будет нечто, которое можно будет визуально (мышью) редактировать как нечто единое: при изменении опорного свинга будут одновременно меняться все линии, относящиеся к нему. Мне кажется, удобство налицо...

2 Rosh: пожалуй, мне нужны обе функции - и прямая, и обратная. IBarShift - для определения количества баров в опорном свинге по временам начала и конца свинга, а уж затем iTime - для втыкания Arrow по расчетному смещению бара.
 
Mathemat, если мы и будем такое делать, то неизвестно когда. гораздо быстрее Вы напишете собственного скрипта, двигающего Ваши объекты. а мы тем временем сделаем привязку горячих клавиш к скриптам
 
Mathemat, если мы и будем такое делать, то неизвестно когда.


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

гораздо быстрее Вы напишете собственного скрипта, двигающего Ваши объекты.


Спасибо, но Вы меня переоцениваете, Slawa: я без году неделю пишу на МТ4 :). И, честно говоря, пока не представляю, как связать Fibo Ret и Fibo Time Zones воедино, не имея обработчика событий (типа onMouseDrag или чего-то подобного) или инструмента создания собственных объектов. Да, вероятно, можно ввести какие-нибудь глобальные переменные, отслеживающие опорные координаты свингов и соответственно двигающие что-нибудь при их изменении. Будем думать...

а мы тем временем сделаем привязку горячих клавиш к скриптам


Это несомненно было бы удобно.

С уважением и НП.
Причина обращения: