Есть некий алгоритм, который берет N баров, потом долго-долго
считает, потом рисует график на эти N баров + продлевает его на
К баров в будущее. Вот и пытаюсь узнать как рисовать графики
на N баров в прошлое и К баров в будущее.
lsv:
Есть некий алгоритм, который берет N баров, потом долго-долго
считает, потом рисует график на эти N баров + продлевает его на
К баров в будущее. Вот и пытаюсь узнать как рисовать графики
на N баров в прошлое и К баров в будущее.
Это легко. Таких алгоритмов можно придумать миллион и даже долго
считать не надо. Например, есть график с барами - 0 самый правый,
в процессе формирования - его не трогаем, бар номер 1 - первый
слева от него. Соответственно, первый будущий бар, назовём его
-1, рисуется как точная копия бара номер 1. Следующий будущий
бар -2, рисуется как копия бара номер 2. И так продолжаем как угодно
далеко в будущее. А можно все будущие бары строить как зеркальное
отражение баров из прошлого - это уже алгоритм номер два. Оставайтесь
на связи, у меня их ещё много есть...
lsv писал (а):
Немного в неправильном направлении пошел. Следующий вариант
индикатора. Берем 50 последних сформировавшихся баров, у каждого
берем значение (H+L)/2 и соединяем их жирной линией. Эта линия должна
ползти с каждым новым сформировавшимся баром.
Это уже лучше, ещё две-три итерации и ты изобретёшь moving average.
Расскажи сразу чего там за алгоритм, что за кошки-мышки...
lsv писал (а):
Есть некий алгоритм, который берет N баров, потом долго-долго
считает, потом рисует график на эти N баров + продлевает его на
К баров в будущее. Вот и пытаюсь узнать как рисовать графики
на N баров в прошлое и К баров в будущее.
lsv:
Есть некий алгоритм, который берет N баров, потом долго-долго
считает, потом рисует график на эти N баров + продлевает его на
К баров в будущее. Вот и пытаюсь узнать как рисовать графики
на N баров в прошлое и К баров в будущее.
Блин, а предистория то какая. :)
Просто график надо в будущее отображать? Так какая с этим собственно
проблема?
Ну, можно рисовать и в прошлое и в будущее. Весь вопрос в том
что рисовать??? :)
Мне было интересно посмотреть, как другие реализуют идею с построением
индикатора рисующего линию на N баров в прошлое и K баров в будущее
и при этом, чтобы индикатор запускал обработку только в момент
появления нового бара. С N барами проблема в том, что при появлении
нового бара, теперь уже N+1 бар остается, т.е. остается своего
рода шлейф после индикатора.
lsv:
Мне было интересно посмотреть, как другие реализуют идею с построением
индикатора рисующего линию на N баров в прошлое и K баров в будущее
и при этом, чтобы индикатор запускал обработку только в момент
появления нового бара. С N барами проблема в том, что при появлении
нового бара, теперь уже N+1 бар остается, т.е. остается своего
рода шлейф после индикатора.
Чтобы индикатор отрабатывал только на открытии нового бара
можно использовать например такой способ:
// ...// тут всяческие настройки// ...datetimeTimeCurrentBar=0;
intinit(){// ...// тут инициализация всего что нужно// ...TimeCurrentBar=Time[0];
return(0);
}intstart(){if(TimeCurrentBar==Time[0])return(0);
// ...// тут собственно говоря сам индикатор// ...TimeCurrentBar=Time[0];
return(0);
}
В этом случае он будет срабатывать только на открытии нового бара, т.е. даже текущий бар на котором его на график повесят он проигнорирует
(ибо открытие бара уже было) и начнет отрисовываться только на следующем баре. Чтобы он сработал на текущем баре, в момент привязки, надо из
функции init убрать Bar=Time[0]; и всего-то.
Чтобы график рисовать на К баров в будущее надо формировать
данные так, чтобы значение индикатора на баре К был в [0] элементе
массива индикатора, на баре К-1 в [1] и т.д. Соответственно значение
для нулевого бара сместится в [К]-ий элемент и все остальные
значения индикатора заносить в массив со смещением К (на любую
глубину N в прошлое). А при инициализации индикатора использовать
функцию SetIndexShift(<index>,K);.
Есть некий алгоритм, который берет N баров, потом долго-долго считает, потом рисует график на эти N баров + продлевает его на К баров в будущее. Вот и пытаюсь узнать как рисовать графики на N баров в прошлое и К баров в будущее.
Немного в неправильном направлении пошел. Следующий вариант индикатора. Берем 50 последних сформировавшихся баров, у каждого берем значение (H+L)/2 и соединяем их жирной линией. Эта линия должна ползти с каждым новым сформировавшимся баром.
Расскажи сразу чего там за алгоритм, что за кошки-мышки...
;-)
Есть некий алгоритм, который берет N баров, потом долго-долго считает, потом рисует график на эти N баров + продлевает его на К баров в будущее. Вот и пытаюсь узнать как рисовать графики на N баров в прошлое и К баров в будущее.
А я знаю и умею;-)
Есть некий алгоритм, который берет N баров, потом долго-долго считает, потом рисует график на эти N баров + продлевает его на К баров в будущее. Вот и пытаюсь узнать как рисовать графики на N баров в прошлое и К баров в будущее.
Просто график надо в будущее отображать? Так какая с этим собственно проблема?
Ну, можно рисовать и в прошлое и в будущее. Весь вопрос в том что рисовать??? :)
https://docs.mql4.com/ru/customind/IndicatorCounted
Мне было интересно посмотреть, как другие реализуют идею с построением индикатора рисующего линию на N баров в прошлое и K баров в будущее и при этом, чтобы индикатор запускал обработку только в момент появления нового бара. С N барами проблема в том, что при появлении нового бара, теперь уже N+1 бар остается, т.е. остается своего рода шлейф после индикатора.
В этом случае он будет срабатывать только на открытии нового бара, т.е. даже текущий бар на котором его на график повесят он проигнорирует (ибо открытие бара уже было) и начнет отрисовываться только на следующем баре. Чтобы он сработал на текущем баре, в момент привязки, надо из функции init убрать Bar=Time[0]; и всего-то.
Чтобы график рисовать на К баров в будущее надо формировать данные так, чтобы значение индикатора на баре К был в [0] элементе массива индикатора, на баре К-1 в [1] и т.д. Соответственно значение для нулевого бара сместится в [К]-ий элемент и все остальные значения индикатора заносить в массив со смещением К (на любую глубину N в прошлое). А при инициализации индикатора использовать функцию SetIndexShift(<index>,K);.