Интересен такой вопрос.
Допустим, мы применяем какой-либо индикатор на D1 графике. Т.е. он вычисляется как некая функция от дневных значений цен закрытия (Close) за какое-либо N число дней. В свою очередь, каждое дневное значение закрытия (Close[i]) на D1 вычисляется на основе движений цены за эти сутки, с 00:00:00 до 00:00:00 следующего дня, не включая верхнюю границу.
Вопрос, возможно ли каким-то способом получить дневные значения цен закрытия (Close[i]) на D1 со сдвигом по времени? Т.е. не от 0:00 до 0:00 часов, а, например, со сдвигом на 3 часа, т.е. Close[i]_D1 с 19.12.2006 03:00 до 20.12.2006 03:00?
То же самое верно и для, например, H4 цен закрытия. Их можно считать не от 12:00 до 16:00, а, например, от 13:30 до 17:30?
Пример для D1 со сдвигом на 3 часа:
double iMyClose(int shift) { datetime T = iTime(NULL,PERIOD_D1,shift); int shiftH1 = iBarShift(NULL,PERIOD_H1,T); shiftH1 += 3; return (iClose(NULL,PERIOD_H1,shiftH1)); }
Пример для H4 со сдвигом на полтора часа
double iMyClose(int shift) { datetime T = iTime(NULL,PERIOD_H4,shift); int shiftM30 = iBarShift(NULL,PERIOD_M30,T); shiftM30 += 3; //три тридцатиминутки - полтора часа return (iClose(NULL,PERIOD_M30,shiftM30)); }Вот такое извращение - логика, по моему, ясна. Уточнение - это если дыр на графиках нету. Если есть - нужно ещё проверять время открытия того бара, который найден iBarShift'ом и увеличивать потом shiftXX не на конкретное число, а так, чтобы попасть в нужное место.
Пояснение.
double iClose( string symbol, int timeframe, int shift) Возвращает значение цены закрытия указанного параметром shift бара с соответствующего графика (symbol, timeframe).
Эти функции (iClose, iBarShift) работают со смещением на целые бары, а я говорил о смещении по времени внутри бара. Вызов iClose(null, PERIOD_D1, 2) вернёт мне цену закрытия на два бара, т. е. два дня назад.
Вопрос был, как посчитать значения дневных цен со сдвигом времени внутри бара, т.е. время, меньшее, чем продолжительность самого бара, например, D1 с 19.12.2006 03:00 до 20.12.2006 03:00?
Я бы сказал, что это не то, что надо.
Пояснение.
double iClose( string symbol, int timeframe, int shift) Возвращает значение цены закрытия указанного параметром shift бара с соответствующего графика (symbol, timeframe).
Эти функции (iClose, iBarShift) работают со смещением на целые бары, а я говорил о смещении по времени внутри бара. Вызов iClose(null, PERIOD_D1, 2) вернёт мне цену закрытия на два бара, т. е. два дня назад.
Вопрос был, как посчитать значения дневных цен со сдвигом времени внутри бара, т.е. время, меньшее, чем продолжительность самого бара, например, D1 с 19.12.2006 03:00 до 20.12.2006 03:00?
shiftH1 += 3;и затем
return (iClose(NULL,PERIOD_H1,shiftH1));это - смещение внутри бара. Внутри дневного. На часовом графике.
iClose(NULL,PERIOD_H1,shiftH1)вернёт именно значение D1 цены закрытия за дневной период, в который входит этот часовой бар?
Ну, например, индикатор считается как функция от 20 последних D1 цен закрытия: Close[0]_D1, Close[1]_D1, ..., Close[19]_D1. Т.е. на него влияют Close_D1 цены последних 20-ти суток. И значение индикатора-D1 на текущий день может вообще не равняться ни одной минутной цене текущего дня, если 19 предыдущих дней "тянут" её в другую сторону. Например, 19 дней цена падала, и D1 индикатор также на основе этого упал до безобразия, а сегодня цена поскакала вверх, но текущее значение индикатора даже после этого 0-го бара не успеет поскакать также, другие слагаемые влияют.
Т.е. я пока вообще не знаю, как считается, например, Close_D1 дневная цена закрытия - от всех тиковых цен, от средних по Close_M1 и т.д.? Хотя среднее от средних будет математически неверно, если первоначально усреднённые значения агрегируют разный объём первичных данных.
А как посчитать D1 цену закрытия на произвольном 24-х часовом промежутке времени?
Т.е. я пока вообще не знаю, как считается, например, Close_D1 дневная цена закрытия - от всех тиковых цен, от средних по Close_M1 и т.д.? Хотя среднее от средних будет математически неверно, если первоначально усреднённые значения агрегируют разный объём первичных данных. А как посчитать D1 цену закрытия на произвольном 24-х часовом промежутке времени?
Быть очень умным иногда даже плохо. :-))
Зачем Вы так усложняете себе жизнь ? Цена закрытия бара это цена последнего тика в этом баре. Это распространяется на все т/ф. Поэтому цена закрытия Д1 определяется последним тиком суток. А что там было внутри дня роли не играет. Поэтому какой бы промежуток времени Вы не взяли цена его закрытия - это последняя цена.
Быть очень умным иногда весьма полезно.
Если следовать Вашей теории, то получается такое следствие.
Поскольку периоды, например, H1, H4 и D1 кратны и в определённые
промежутки времени заканчиваются одновременно (например, 20.
12.2006 00:00), то последний тик у них всех суть есть один и тот же.
Этот тик даёт, пардон, конец бара и для H1, и для H4 и D1. Точно также
можно указать время, когда, например, совпадают последние тики
у M15 и M30 периодов, они тоже кратны, ну и т.д., вообще все стандартные
таймфреймы кратны M1. Значит, один и тот же тик должен дать одну
и ту же цену закрытия всем закрываемым им таймфреймам (барам
этих таймфреймов), верно?
Короче. Берём для примера стандартный индикатор Moving Average. И по всплывающим подсказкам на графиках H1, H4 и D1 получаем его
значения на указанную дату/время, ну например для EURUSD.
EURUSD, Moving Average
H1 2006.12.20 00:00 1.3184
H4 2006.12.20 00:00 1.3129
D1 2006.12.20 00:00 1.3199
как видно, они не равны даже примерно, хотя, как утверждалось
(цитата): "Цена закрытия бара это цена последнего тика в этом
баре".
Как видим, эта теория разрушена просто навскидку взятым примером,
аналогов которого можно найти на графиках целые биллионы.
Значит, не последним тиком (не только им) определяется цена закрытия бара. А чем тогда?
Про МА примера не понял, период у нее какой был? Если1 то должно соответсвовать, а если больше, то было бы удивительней, если совпадало.
Это точно. И всё же индикаторы считаются по барам, приходится
с этим считаться.
Опять же, из проведённых замеров. Фиксируем пару и время за сегодня
07:00, и смотрим цену закрытия по всплывающим подсказкам на разных
timeframes.
1. EURUSD:
M5
07:00
1.3193
M15
07:00
1.3190
M30
07:00
1.3194
H1
07:00
1.3194
---
2. GBPJPY:
M5
07:00
232.76
M15
07:00
232.79
M30
07:00
232.80
H1
07:00
232.77
Вопрос, почему такая разница? Время-то одно и то же.
Задача возникла из необходимости рассчитывать по возможности
точные и актуальные значения индикаторов по разным таймфреймам,
ну например, Moving Average на D1, H4, H1 в течении 0-го бара этих таймфреймов, но эти значения,
допустим, D1 значения индикатора, получаемые в течении текущего
дня, чувствительны к движениям цены и окончательно зафиксируются
лишь после завершения дня, т.е. фиксации и завершения этого D1
бара.
А как получить по возможности наиболее точные значения индикаторов
по D1 периоду до его закрытия?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Допустим, мы применяем какой-либо индикатор на D1 графике. Т.е. он вычисляется как некая функция от дневных значений цен закрытия (Close) за какое-либо N число дней. В свою очередь, каждое дневное значение закрытия (Close[i]) на D1 вычисляется на основе движений цены за эти сутки, с 00:00:00 до 00:00:00 следующего дня, не включая верхнюю границу.
Вопрос, возможно ли каким-то способом получить дневные значения цен закрытия (Close[i]) на D1 со сдвигом по времени? Т.е. не от 0:00 до 0:00 часов, а, например, со сдвигом на 3 часа, т.е. Close[i]_D1 с 19.12.2006 03:00 до 20.12.2006 03:00?
То же самое верно и для, например, H4 цен закрытия. Их можно считать не от 12:00 до 16:00, а, например, от 13:30 до 17:30?