[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 480

 

 для начала попробуйте связать четвертый не отображаемый буфер ExtMapBuffer4 с буфером индикатора

SetIndexBuffer(3,ExtMapBuffer4);

 ведь Вы же пишете

   IndicatorBuffers(4);                                                 //устанавливаем общее количество всех индикаторов, участвующих в расчете всех индикаторных линий

 хотя в начале описываете 3 линии/буфера

кстати, тогда не потребуется объявлять его как таймсерию и проверять это 

 

а основная Ваша ошибка здесь

      ExtMapBuffer3[i]=iMAOnArray(ExtMapBuffer4,0,МА_ТЛ,0,Вид_МА_ТЛ,0); //рассчет значения для расчета Третьей Линии (ТЛ)

 нужно так

      ExtMapBuffer3[i]=iMAOnArray(ExtMapBuffer4,0,МА_ТЛ,0,Вид_МА_ТЛ,i); //рассчет значения для расчета Третьей Линии (ТЛ)
 
midorum:

 для начала попробуйте связать четвертый не отображаемый буфер ExtMapBuffer4 с буфером индикатора

 ведь Вы же пишете

 хотя в начале описываете 3 линии/буфера

кстати, тогда не потребуется объявлять его как таймсерию и проверять это 

Спасибо за ответ... Чтобы окончательно расставить точки над i, хотелось бы выяснить еще вот что:

1. Вы пишите: "для начала попробуйте связать четвертый не отображаемый буфер ExtMapBuffer4 с буфером индикатора". Я думал, что связывать надо только те массивы, к-е должны отображаться тем или иным способом на экране Клиентского терминала, а указывать общее количество всех массивов, к-е участвуют в расчете пользовательского индикатора надо с помощью функции IndicatorBuffers. Выходит я ошибался?

2. Если Вам несложно, объясните пожалуйста почему тогда не придется объявлять данный массив как таймсерию? Он что, каким-то образом самоорганизуется как таймсерия?

 
7777877:

Спасибо за ответ... Чтобы окончательно расставить точки над i, хотелось бы выяснить еще вот что:

1. Вы пишите: "для начала попробуйте связать четвертый не отображаемый буфер ExtMapBuffer4 с буфером индикатора". Я думал, что связывать надо только те массивы, к-е должны отображаться тем или иным способом на экране Клиентского терминала, а указывать общее количество всех массивов, к-е участвуют в расчете пользовательского индикатора надо с помощью функции IndicatorBuffers. Выходит я ошибался?

2. Если Вам несложно, объясните пожалуйста почему тогда не придется объявлять данный массив как таймсерию? Он что, каким-то образом самоорганизуется как таймсерия?

именно так, он автоматически организуется как таймсерия

в начале Вы описываете видимые буферы индикатора 

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

 
Дублирую вопрос повторно, старый удаляю, помогите кто сможет!


Хорошо. Постараюсь изложить суть задачи, возможно кто-то подскажет или поможет ее реализовать более просто.

Работаем на минутном графике. Берем минутный бар (high+low/2 - среднее значение бара) на графике 29/10/12 в 00:00 - это будет точкой отсчета.

Далее проверяем отклонение от данной цены на 10 пунктов вверх (каждое верное отклонение будет +1).

Когда достигаем поднятие цены на 10 пунктов от стартовой точки - счетчик +1; и начинаем проверку отклонений дальше, только уже от той точки в которой мы достигли отклонения на 10 пунктов, и ждем следующего поднятия цена на 10 пунктов.

К примеру получаем:

Если (стартовая точка) + 10 пунктов <= цены (используем все последующий цены баров от точки отсчета.) Получаем счетчик=счетчик +1; И стартовую точку начинаем уже от этого места - (стартовая точка + 10 пунктов).

Если (стартовая точка + 10 пунктов) + 10 пунктов <= цены (используем все последующий цены баров от точки отсчета.) Получаем счетчик=счетчик +1; И стартовую точку начинаем уже от этого места - (стартовая точка + 10 пунктов) + 10 пунктов.  

Если (стартовая точка + 10 пунктов + 10 пунктов) + 10 пунктов <= цены (используем все последующий цены баров от точки отсчета.) Получаем счетчик=счетчик +1; И стартовую точку начинаем уже от этого места - (стартовая точка + 10 пунктов + 10 пунктов) + 10 пунктов.  

и так далее...

 Пока не достигнем счетчика равному 10 (счетчика == 10).

 И каждый новый образованный минутный бар (high+low/2 - среднее значение бара) проверяем на это условие и ждем пока не достигнем счетчика равному 10 (счетчика == 10). Допустим прошло два дня, каждый новый образованный бар мы проверяли и смещались если условия были верны ....

И когда мы достигли счетчик =10 - Выводим сообщение что "Счетчик == 10". Смещаем стартовую точку на 2 дня вперед от первоначально заданной пользователем т.е. с 29/10/12 в 00:00 на 31/10/12 в 00:00 и повторяем цикл.

Повторяем цикл и так двигаемся по графику. 

Т.е. нужно брать новую образованные бары, по нить брать  (high+low/2 - среднее значение бара). И проверять на условия и если условия верны смещать как написано выше.

Я пытался это реализовать через массив, получается очень запутано и значения выдает не те!! Помогите как реализовать данный алгоритм! 
Файлы:
qawer.mq4  3 kb
 
merkulov.artem:

Я пытался это реализовать через массив, получается очень запутано и значения выдает не те!! Помогите как реализовать данный алгоритм! 

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

тогда, возможно, Вам помогут, а может и сами найдете проблему

 

 Согласно справке функция SetIndexDrawBegin указывает с какого бара начинать отрисовки. Взял я индюк для пробы стандартный AC, и изменил там в параметрах

SetIndexDrawBegin(0,8);
   SetIndexDrawBegin(1,38);
   SetIndexDrawBegin(2,38);

на

   SetIndexDrawBegin(0,8);
   SetIndexDrawBegin(1,8);
   SetIndexDrawBegin(2,8);

  Ничего не изменилось, отрисовка идёт от .. не с 8 бара до 0-ой бар,  а вообще непонятно от какого.

 Видно же, что тут не 8...


 
hoz:

 Согласно справке функция SetIndexDrawBegin указывает с какого бара начинать отрисовки. Взял я индюк для пробы стандартный AC, и изменил там в параметрах

на

  Ничего не изменилось, отрисовка идёт от .. не с 8 бара до 0-ой бар,  а вообще непонятно от какого.

 Видно же, что тут не 8...


Установка порядкового номера бара от начала данных (читай "от начала графика" "с левой стороны графика"), с которого должна начинаться отрисовка указанной линии индикатора. Отрисовка индикатора производится слева направо.
 
midorum:
Установка порядкового номера бара от начала данных (читай "от начала графика" "с левой стороны графика"), с которого должна начинаться отрисовка указанной линии индикатора. Отрисовка индикатора производится слева направо.

 А если мне нужно чтоб отрисовывалось последних 30 баров например, как мне это сделать тогда?

 
hoz:

 А если мне нужно чтоб отрисовывалось последних 30 баров например, как мне это сделать тогда?

 

попробуйте Bars-30
Причина обращения: