Доступ к таймсериям
При создании советника или индикатора необходимо считывать информацию с графика. С текущим графиком проще, об этом мы уже говорили. Для этого существует группа предопределённых переменных. На данном этапе нас интересуют переменные-массивы, точнее таймсерии
High [ ] Массив содержит максимальные цены каждого бара
Low [ ] Массив содержит минимальные цены каждого бара
Close [ ] Массив содержит цены закрытия каждого бара
Open [ ] Массив содержит цены открытия каждого бара
Time [ ] Массив содержит время открытия каждого бара
Volume [ ] Массив содержит тиковые объемы каждого бара
Но эти массивы содержат информацию только по текущему графику. Если необходимо получить информацию с другого таймфрейма по этой же валютной паре или о другой паре применяется группа функций доступа к таймсериям.
Например:
Пусть текущий график у нас евродоллар Н 4, но нам для проверки какого то условия необходима цена открытия дневного бара. С помощью предопределённого массива Open [ ] мы можем получить цену открытия любого бара, но только по паре евродоллар и на периоде Н 4.
Для получения цены открытия дневного бара используем функцию iOpen() Выглядит она так
double open; open=iOpen ( string symbol ( название пары ), int timeframe ( период графика ) , int shift ( номер свечи ) );
То есть возвращает значение типа Double, поскольку это цена и имеет 3 входных параметра.
string symbol строка обозначающая валютную пару ( здесь это "EURUSD" )
int timeframe период графика ( у нас это будет Period_D1 )
int shift Номер свечи ( у нас по условию будет 0 )
определим переменную для сохранения результата (возвращаемого значения) функции и запишем полностью:
double D_openprice;
D_openprice=iOpen("EURUSD",PERIOD_D1,0);
После выполнения этих операторов в переменной D_openprice будет содержаться цена открытия дня, хотя текущий график у нас Н4
Можно записать эту функцию немного по другому:
D_openprice=iOpen("EURUSD",1440,0);
то есть вместо имени константы (PERIOD_D1) просто указать тайм в минутах (в сутках 1440 минут)))))
поскольку график у нас тот же самый (евродоллар) первый параметр функции не обязательно указывать явно, то есть можно просто написать NULL или Symbol(), тогда в первом параметре функции автоматически подставится наименование текущей валютной пары.
D_openprice=iOpen(NULL,1440,0);
D_openprice=iOpen(Symbol(),1440,0);
Все эти записи аналогичны, то есть получим тот же результат. Если необходимо получить ту же дневную цену открытия для другой валютной пары, укажем название пары в том же первом параметре функции:
D_openprice=iOpen("GBPUSD",1440,0);
Функции для других цен, времени открытия бара и тикового обьёма аналогичны.
iClose(Symbol(),1440,0);
iHigh(Symbol(),1440,0);
iLow(Symbol(),1440,0);
iVolume(Symbol(),1440,0);
iTime(Symbol(),1440,0);
(не забываем что для последнего примера ( iTime ) возвращаемое значение будет иметь тип datetime)))))
Часто требуется найти бар или (свечу) с максимальной или минимальной ценой ( это может быть одна из 4х цен high open close low )
Можно конечно написать функцию, к примеру с использоваением цикла, для поиска такого бара), но лучше использовать готовые встроенные функции
iHighest и iLowest ( думаю нетрудно догадаться что iHighest ищет максимальное, а iLowest минмальное значение)))))
синтаксис функций такой:
int N;
N= iHighest( string symbol, int timeframe, int type, int count, int start) ( для iLowest аналогично)
эти функции целочисленные ( тип int ) так как возвращают номер бара и имеют 5 входных параметров. первые 2 параметра те же что и в предыдущих функциях (наименование пары и таймфрейм) с ними должно быть всё понятно.
следующие входные параметры:
1. int type идентификатор таймсерии, их может быть 6
MODE_OPEN Цена открытия
MODE_LOW Минимальная цена
MODE_HIGH Максимальная цена
MODE_CLOSE Цена закрытия
MODE_VOLUME Объем ( точнее количество тиков, сформировавших бар)
MODE_TIME Время открытия бара
здесь MODE_OPEN,MODE_LOW и т.д предопределённые константы, это просто числа от 0 до 5 имеющие свои имена
MODE_OPEN 0
MODE_LOW 1
MODE_HIGH 2
MODE_CLOSE 3
MODE_VOLUME 4
MODE_TIME 5
2. int count количество элементов для поиска ( из скольки баров будем искать максимум или минимум)
3. int start начальный бар для поиска (необязательно искать начиная с нулевого бара,это может быть любой)
Нет комментариев. Ваш будет первым!