Нужна помощь в написании индикатора! - страница 2

 
Есть некий алгоритм, который берет N баров, потом долго-долго считает, потом рисует график на эти N баров + продлевает его на К баров в будущее. Вот и пытаюсь узнать как рисовать графики на N баров в прошлое и К баров в будущее.
 
lsv:
Есть некий алгоритм, который берет N баров, потом долго-долго считает, потом рисует график на эти N баров + продлевает его на К баров в будущее. Вот и пытаюсь узнать как рисовать графики на N баров в прошлое и К баров в будущее.
Это легко. Таких алгоритмов можно придумать миллион и даже долго считать не надо. Например, есть график с барами - 0 самый правый, в процессе формирования - его не трогаем, бар номер 1 - первый слева от него. Соответственно, первый будущий бар, назовём его -1, рисуется как точная копия бара номер 1. Следующий будущий бар -2, рисуется как копия бара номер 2. И так продолжаем как угодно далеко в будущее. А можно все будущие бары строить как зеркальное отражение баров из прошлого - это уже алгоритм номер два. Оставайтесь на связи, у меня их ещё много есть...
 
timbo:
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 бар остается, т.е. остается своего рода шлейф после индикатора.
Чтобы индикатор отрабатывал только на открытии нового бара можно использовать например такой способ:
// ...
// тут всяческие настройки
// ...
 
datetime TimeCurrentBar=0;
 
int init()
  {
// ...
// тут инициализация всего что нужно
// ...
   TimeCurrentBar=Time[0];
   return(0);
  }
 
int start()
  {
   if(TimeCurrentBar==Time[0]) return(0);
// ...
// тут собственно говоря сам индикатор
// ...
   TimeCurrentBar=Time[0];
   return(0);
  }
В этом случае он будет срабатывать только на открытии нового бара, т.е. даже текущий бар на котором его на график повесят он проигнорирует (ибо открытие бара уже было) и начнет отрисовываться только на следующем баре. Чтобы он сработал на текущем баре, в момент привязки, надо из функции init убрать Bar=Time[0]; и всего-то.

Чтобы график рисовать на К баров в будущее надо формировать данные так, чтобы значение индикатора на баре К был в [0] элементе массива индикатора, на баре К-1 в [1] и т.д. Соответственно значение для нулевого бара сместится в [К]-ий элемент и все остальные значения индикатора заносить в массив со смещением К (на любую глубину N в прошлое). А при инициализации индикатора использовать функцию SetIndexShift(<index>,K);.
 
моя любимая функция для проверки, наступил новый бар, или нет. .. :)

bool newb()  {
  static int knw; if (Time[0]==knw) return(false); 
  knw=Time[0]; return(true); 
}
Причина обращения: