Оформление индикатора

 
Как сделать чтобы, например, фракталы написанные мною не улетали вверх при увеличении. Чтобы были все время на фиксированном расстоянии от High/Low (как это сделано во встроенном индикаторе Фракталов)
Я делаю типа ...=High[i]+10*Point

на картинке видно, как фракталы летают (
 
Вместо 10*Point воспользуйся значением индикатора ATR. Не идеально, но все же лучше.
 
Integer:
Вместо 10*Point воспользуйся значением индикатора ATR. Не идеально, но все же лучше.
Тогда они будут на каждом баре скакать в зависимости от ATR. :)
 
ATR можно считать по большому периоду.
 
Mak:
ATR можно считать по большому периоду.
И как это будет сказываться на МАСШТАБЕ графика? Ведь суть-то в том что при малом масштабе пипсы помельче выглядят (большой диапазон, баров помещается), а при большом масштабе пипсы визуально крупнее (мало баров влазит), соответственно и символы фракталов либо ближе к барам, либо дальше и тут хоть в пипсах отступ хоть в "ATR-ах" один фиг символы ближе/дальше прыгают. Как я понял вопрос именно в этом был.
 
//+------------------------------------------------------------------+
//|                                              i-Signals_Enter.mq4 |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  15.12.2005  Translaned from MT3 by KimIV.                       |
//+------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Orange
#property indicator_color2 Red
 
//------- Внешние параметры индикатора -------------------------------
extern int NumberOfBars = 1000;
extern int HPeriod      = 10;
extern int LPeriod      = 40;
 
//------- Глобальные переменные индикатора ---------------------------
int ArrowInterval;
 
//------- Буферы индикатора ------------------------------------------
double buf0[];
double buf1[];
 
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  SetIndexBuffer(0, buf0);
  SetIndexStyle (0, DRAW_ARROW);
  SetIndexArrow (0, 241);
  SetIndexEmptyValue(0, EMPTY_VALUE);
 
  SetIndexBuffer(1, buf1);
  SetIndexStyle (1, DRAW_ARROW);
  SetIndexArrow (1, 242);
  SetIndexEmptyValue(1, EMPTY_VALUE);
 
  ArrowInterval=GetArrowInterval();
}
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  double ms[2];
  int    LoopBegin, sh;
 
     if (NumberOfBars==0) LoopBegin=Bars-41;
  else LoopBegin=NumberOfBars-41;
  LoopBegin=MathMin(Bars-41, LoopBegin);
 
  for (sh=1; sh<=LoopBegin; sh++) {
    ms[0]=EMPTY_VALUE;
    ms[1]=EMPTY_VALUE;
    GetSignals(sh, ms);
    buf0[sh]=ms[0];
    buf1[sh]=ms[1];
  }
}
 
//+------------------------------------------------------------------+
//| Формирует и возвращает ссигналы                                  |
//+------------------------------------------------------------------+
void GetSignals(int sh, double& ms[]) {
  double ema10=iMA(NULL, 0, HPeriod, 0, MODE_EMA, PRICE_CLOSE, sh);
  double ema20=iMA(NULL, 0, LPeriod, 0, MODE_EMA, PRICE_CLOSE, sh);
  double ema11=iMA(NULL, 0, HPeriod, 0, MODE_EMA, PRICE_CLOSE, sh-1);
  double ema21=iMA(NULL, 0, LPeriod, 0, MODE_EMA, PRICE_CLOSE, sh-1);
 
  if (ema10<ema20 && ema11>ema21) ms[0]=Low[sh]-ArrowInterval*Point;
  if (ema10>ema20 && ema11<ema21) ms[1]=High[sh]+ArrowInterval*Point;
}
 
//+------------------------------------------------------------------+
//| Возвращает интервал установки сигнальных указателей              |
//+------------------------------------------------------------------+
int GetArrowInterval() {
  int p=Period();
 
  switch (p) {
    case 1:     return(3);
    case 5:     return(5);
    case 15:    return(8);
    case 30:    return(12);
    case 60:    return(17);
    case 240:   return(25);
    case 1440:  return(50);
    case 10080: return(100);
    case 43200: return(200);
  }
}
//+------------------------------------------------------------------+
 
Simca:
Integer писал (а):
Вместо 10*Point воспользуйся значением индикатора ATR. Не идеально, но все же лучше.
Тогда они будут на каждом баре скакать в зависимости от ATR. :)

Но смотрится это вполне прилично
 
Спасибо за ответы ;)