Roll: 5940 --Начальный индекс исходного массива для копирования 10 последних баров (бар - 6 индексов).
Уважаемые эксперты, а нетли ошибки в учебнике?
Вот мои рассуждения:
В начале кода вызывается ф-я intArrayCopyRates, которая копирует в двухмерный массив, вида RateInfo[][6], данные баров текущего графика и возвращает количество скопированных баров, либо -1 в случае неудачи, согласно примера этой ф-ии:
double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);
текущим баром является бар с индексом0-0, таким образом , возвращаясь к первоначальномукоду, мыкопируем элемент с индексом 0-0 (текущий бар) массива array1 , в массив array2 с начальным индексом 0-0, мы получаем 10 последних баров ( где последний бар - это текущий бар, бар с индексом [0]), что противоречит написанному в учебнике… и соответственно , копируя элемент с индексом Bars*6-60,60 массива array1 в массив array2 с начальным индексом элемента 0 мы получаем информациию о барах из истории.
Пишу советника..и встал вопрос...как обратиться к моему индикатору? А именно взять данные из указанного бара(в моем случае необходимо взять 2-ого бара). Есть windowsPriceMax, но насколько я понял, выводит только последнее значение графика подокна и то не понятно, если к примеру у меня 3 линии на индикаторе, что он выведет?
Пишу советника..и встал вопрос...как обратиться к моему индикатору? А именно взять данные из указанного бара(в моем случае необходимо взять 2-ого бара). Есть windowsPriceMax, но насколько я понял, выводит только последнее значение графика подокна и то не понятно, если к примеру у меня 3 линии на индикаторе, что он выведет?
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Расчет указанного пользовательского индикатора. Пользовательский индикатор должен быть скомпилирован (файл с расширением EX4) и находиться в директории каталог_терминала\experts\indicators. Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ. timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика. name - Имя пользовательского индикатора. ... - Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора. mode - Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer. shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
В начале кода вызывается ф-я intArrayCopyRates, которая копирует в двухмерный массив, вида RateInfo[][6], данные баров текущего графика и возвращает количество скопированных баров, либо -1 в случае неудачи, согласно примера этой ф-ии:
текущим баром является бар с индексом0-0, таким образом , возвращаясь к первоначальномукоду, мыкопируем элемент с индексом 0-0 (текущий бар) массива array1 , в массив array2 с начальным индексом 0-0, мы получаем 10 последних баров ( где последний бар - это текущий бар, бар с индексом [0]), что противоречит написанному в учебнике… и соответственно , копируя элемент с индексом Bars*6-60,60 массива array1 в массив array2 с начальным индексом элемента 0 мы получаем информациию о барах из истории.
Не делая громких заявлений, проверяем на практике:
//+------------------------------------------------------------------+//| массив.mq4 |//| Copyright 2012, |//+------------------------------------------------------------------+#property copyright "Copyright 2012,"#property link "https://forum.mql4.com/ru/46980/page525"#property show_inputsexternstring s=" -----номер бара--------";
externint a=9;//номер 10 последних баров //+------------------------------------------------------------------+//| script program start function |//+------------------------------------------------------------------+int start()
{if(a<10)
{double array1[][6];double array2[10][6];
ArrayCopyRates(array1);
ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0])," цена открытия - ",array2[a][1]);}return(0);}
Не делая громких заявлений, проверяем на практике:
Да, на практике действительно получается, что элемент с индексом Bars*6-60,60 - текущий бар... тогда как объяснить, что в примере :
double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);
текущий бар - array1[0][0], а после копирования массива он становится array1[Bars*6-60,60][0]... получается что где-то происходит перенумерация... конечно результат понятен после использования функции на практике... но логика напутана, на мой взгляд)))
Не делая громких заявлений, проверяем на практике:
#property show_inputsexternstring s=" -----номер бара--------";
externint a=9;//номер 10 последних баров //+------------------------------------------------------------------+//| script program start function |//+------------------------------------------------------------------+int start()
{if(a<10)
{double array1[][6];double array2[10][6];
ArrayCopyRates(array1);
ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0])," цена открытия - ",array2[a][1]);}return(0);}
Ну так тут распринтован канкретный элемент массиваTimeToStr(array2[a][0]
То что вывело верно, я согласен. Но причём тут Bars*6-60 ... Вместо Bar подставляется при расчёте значение чего? Если баров, то как выходит, что последние 10 баров?
Можно заметить, на форуме не только я этого не понял, а многие.
Получается что количество всех баров умножить на 6 и минус 60. Откуда мы взяли 6 ? Да и вообще бессмыслица какая-то.
Ну так тут распринтован канкретный элемент массива TimeToStr(array2[a][0]
То что вывело верно, я согласен. Но причём тут Bars*6-60 ... Вместо Bar подставляется при расчёте значение чего? Если баров, то как выходит, что последние 10 баров?
Можно заметить, на форуме не только я этого не понял, а многие.
Roll:
5940 --Начальный индекс исходного массива для копирования 10 последних баров (бар - 6 индексов).
Уважаемые эксперты, а нет ли ошибки в учебнике?
Вот мои рассуждения:
В начале кода вызывается ф-я int ArrayCopyRates, которая копирует в двухмерный массив, вида RateInfo[][6], данные баров текущего графика и возвращает количество скопированных баров, либо -1 в случае неудачи, согласно примера этой ф-ии:
текущим баром является бар с индексом 0-0, таким образом , возвращаясь к первоначальному коду, мы копируем элемент с индексом 0-0 (текущий бар) массива array1 , в массив array2 с начальным индексом 0-0, мы получаем 10 последних баров ( где последний бар - это текущий бар, бар с индексом [0]), что противоречит написанному в учебнике… и соответственно , копируя элемент с индексом Bars*6-60,60 массива array1 в массив array2 с начальным индексом элемента 0 мы получаем информациию о барах из истории.
Здравствуйте.
Есть пользовательский индикатор.
Пишу советника..и встал вопрос...как обратиться к моему индикатору? А именно взять данные из указанного бара(в моем случае необходимо взять 2-ого бара). Есть windowsPriceMax, но насколько я понял, выводит только последнее значение графика подокна и то не понятно, если к примеру у меня 3 линии на индикаторе, что он выведет?
Здравствуйте.
Есть пользовательский индикатор.
Пишу советника..и встал вопрос...как обратиться к моему индикатору? А именно взять данные из указанного бара(в моем случае необходимо взять 2-ого бара). Есть windowsPriceMax, но насколько я понял, выводит только последнее значение графика подокна и то не понятно, если к примеру у меня 3 линии на индикаторе, что он выведет?
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Расчет указанного пользовательского индикатора. Пользовательский индикатор должен быть скомпилирован (файл с расширением EX4) и находиться в директории каталог_терминала\experts\indicators.
Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
name - Имя пользовательского индикатора.
... - Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.
mode - Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Спасибо. Помогли. Думал, что так вызываются лишь iMac*** iStoch*** индикаторы, которые шли предустановленные.
Уважаемые эксперты, а нет ли ошибки в учебнике?
Вот мои рассуждения:
В начале кода вызывается ф-я int ArrayCopyRates, которая копирует в двухмерный массив, вида RateInfo[][6], данные баров текущего графика и возвращает количество скопированных баров, либо -1 в случае неудачи, согласно примера этой ф-ии:
текущим баром является бар с индексом 0-0, таким образом , возвращаясь к первоначальному коду, мы копируем элемент с индексом 0-0 (текущий бар) массива array1 , в массив array2 с начальным индексом 0-0, мы получаем 10 последних баров ( где последний бар - это текущий бар, бар с индексом [0]), что противоречит написанному в учебнике… и соответственно , копируя элемент с индексом Bars*6-60,60 массива array1 в массив array2 с начальным индексом элемента 0 мы получаем информациию о барах из истории.
Не делая громких заявлений, проверяем на практике:
Не делая громких заявлений, проверяем на практике:
Да, на практике действительно получается, что элемент с индексом Bars*6-60,60 - текущий бар... тогда как объяснить, что в примере :
текущий бар - array1[0][0], а после копирования массива он становится array1[Bars*6-60,60][0]... получается что где-то происходит перенумерация... конечно результат понятен после использования функции на практике... но логика напутана, на мой взгляд)))Да, на практике действительно получается, что элемент с индексом Bars*6-60,60 - текущий бар...
Это Ваш вывод.
Не делая громких заявлений, проверяем на практике:
Ну так тут распринтован канкретный элемент массива TimeToStr(array2[a][0]
То что вывело верно, я согласен. Но причём тут Bars*6-60 ... Вместо Bar подставляется при расчёте значение чего? Если баров, то как выходит, что последние 10 баров?
Можно заметить, на форуме не только я этого не понял, а многие.
Получается что количество всех баров умножить на 6 и минус 60. Откуда мы взяли 6 ? Да и вообще бессмыслица какая-то.
Ну так тут распринтован канкретный элемент массива TimeToStr(array2[a][0]
То что вывело верно, я согласен. Но причём тут Bars*6-60 ... Вместо Bar подставляется при расчёте значение чего? Если баров, то как выходит, что последние 10 баров?
Можно заметить, на форуме не только я этого не понял, а многие.
int Bars -- Количество баров на текущем графике.