Общие вопросы по разработке > Совместить два индикатора в одном окне

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
AgeSmith
Сообщения: 3
Зарегистрирован: 17 май 2018, 19:49

Совместить два индикатора в одном окне

Непрочитанное сообщение AgeSmith » 17 май 2018, 20:06

Здравствуйте! Помогите пожалуйста совместить два индикатора: дельта и открытый интерес (Delta и OI) в одном окне. Заранее спасибо если кто откликнется!

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Совместить два индикатора в одном окне

Непрочитанное сообщение evge » 17 май 2018, 20:30

Здравствуйте!

Можно.

Опишите на словах или покажите визуально как совмещать.

Переведу в код индикатора АД4.

Как это должно выглядеть на единой шкале там, где будут выводится оба значения? Значения несопоставимые могут быть. Например, если ОИ = 10 млн, а дельта будет 10000, то 10000 растворится в 10 млн на шкале 10 млн.
никогда такого не было и вот опять

AgeSmith
Сообщения: 3
Зарегистрирован: 17 май 2018, 19:49

Re: Совместить два индикатора в одном окне

Непрочитанное сообщение AgeSmith » 18 май 2018, 06:08

Самый нижний индикатор - дельта(красно-зелёная) и открытый интерес(серая гистограмма) в одном окне. По отдельности у меня есть скрипты и дельты и ои(каждый индикатор в своём окне)-но хотелось бы их в одном окне уместить.
Вложения
D64AA873-4738-4139-ADD3-ED5A590860BE.jpeg

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Совместить два индикатора в одном окне

Непрочитанное сообщение evge » 18 май 2018, 07:02

Значит ОИ там только как графическая информация, без числовых значений. На оси видно только значения дельты.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Совместить два индикатора в одном окне

Непрочитанное сообщение evge » 18 май 2018, 09:00

В АД4 если вывести идикатор OI видно что он масштабируется и минимальное видимое значение не от 0 обычно.

Если его наложить на другой индикатор (например на delta), то масштабироваться он перестанет и визуально будет не очень ифнормативным отображение ОИ от 0.

Как в одном окне в АД4 задать разный автомасштаб для каждого из индикаторов мне неизвестно, скорее всего этого там и нет.

Пример попытки масштабировать вручную к значениям Delta.

deltaOI-demo-01.png
deltaOI-demo-01.png (42.88 КБ) 17280 просмотров
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Совместить два индикатора в одном окне

Непрочитанное сообщение evge » 18 май 2018, 10:34

Думаю, что удалось мне "вручную" смашстабировать ОИ к дельте.

Само приведенное абсолютное числовое значение ОИ на шкале дельты конечно ничего вообще говорить не будет абсолютно. Только визуально можно его анализировать изменения рост \ падение относительно прошлого значения.

Вот пример, где я вывел индикатор ОИ и индикатор DeltaOI для сравнения работы.

DeltaOI - совмещенный индикатор изменения объема "Delta" и приведенный ОИ в его масштаб за определенный период.

deltaOI-01.png
deltaOI-01.png (44.21 КБ) 17275 просмотров


Код: Выделить всё

function Initialize()
{
  IndicatorName = "DeltaOI";
  AddParameter("Period", 500);
  AddInput("Input", Inputs.Candle);
  PriceStudy = false;   
  AddSeries("Delta", DrawAs.Custom, Color.Green, AxisType.ZeroBased);   
  AddSeries("DeltaOI", DrawAs.Custom, Color.Blue, AxisType.ZeroBased);   
 
  AddGlobalVariable("MaxDelta", Types.Double, 0);
  AddGlobalVariable("MinDelta", Types.Double, 0);
  AddGlobalVariable("MaxOI", Types.Double, 0); 
  AddGlobalVariable("MinOI", Types.Double, 0); 
}

function Evaluate()
{
 
  if (MinOI == 0) MinOI = Double.MaxValue;

  Delta = Input.VolumeAsk[0] - Input.VolumeBid[0];

  if (MaxIndex - CurrentIndex < Period)
  {     
     if (Delta > MaxDelta) MaxDelta = Delta;
     if (Delta < MinDelta) MinDelta = Delta;
     if (Input.OpenInterest[0] > MaxOI) MaxOI = Input.OpenInterest[0]; 
     if (Input.OpenInterest[0] < MinOI) MinOI = Input.OpenInterest[0]; 
  }
         
  if (Delta > 0 )
     Delta.DrawHistogram(Color.Green, Color.Green, 100);
  else
     Delta.DrawHistogram(Color.Red, Color.Red, 100);
 
  if (CurrentIndex == MaxIndex)
  {
     var K = (MaxOI - MinOI) / (MaxDelta - MinDelta);
     for (int x = 0; x < Period; x++)
     DeltaOI[x] = (Input.OpenInterest[x] - (MinOI + MaxOI) * 0.5) / K;
  }
   
  DeltaOI.DrawHistogram(Color.Silver, Color.Silver, 50);   
}


Необходимо задать период начала отсчета для поиска минимального и максимального значения ОИ и Delta, для дальнейшего приведения ОИ к Delta, а так же отрисовки приведенного ОИ за этот же период.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Совместить два индикатора в одном окне

Непрочитанное сообщение evge » 18 май 2018, 10:38

Если хочется выводить ОИ не относительно 0, то тогда надо заменить строку:

Код: Выделить всё

  AddSeries("DeltaOI", DrawAs.Custom, Color.Blue, AxisType.ZeroBased);   

на

Код: Выделить всё

  AddSeries("DeltaOI", DrawAs.Custom, Color.Blue, AxisType.Default);

Пример

deltaOI-02.png
deltaOI-02.png (42.36 КБ) 17256 просмотров


Весь код на всякий случай (в нем изменена только одна строка)

Код: Выделить всё

function Initialize()
{
  IndicatorName = "DeltaOI";
  AddParameter("Period", 500);
  AddInput("Input", Inputs.Candle);
  PriceStudy = false;   
  AddSeries("Delta", DrawAs.Custom, Color.Green, AxisType.ZeroBased);   
  AddSeries("DeltaOI", DrawAs.Custom, Color.Blue, AxisType.Default);   
 
  AddGlobalVariable("MaxDelta", Types.Double, 0);
  AddGlobalVariable("MinDelta", Types.Double, 0);
  AddGlobalVariable("MaxOI", Types.Double, 0); 
  AddGlobalVariable("MinOI", Types.Double, 0); 
}

function Evaluate()
{

  if (MinOI == 0) MinOI = Double.MaxValue;

  Delta = Input.VolumeAsk[0] - Input.VolumeBid[0];

  if (MaxIndex - CurrentIndex < Period)
  {     
     if (Delta > MaxDelta) MaxDelta = Delta;
     if (Delta < MinDelta) MinDelta = Delta;
     if (Input.OpenInterest[0] > MaxOI) MaxOI = Input.OpenInterest[0]; 
     if (Input.OpenInterest[0] < MinOI) MinOI = Input.OpenInterest[0]; 
  }
         
  if (Delta > 0 )
     Delta.DrawHistogram(Color.Green, Color.Green, 100);
  else
     Delta.DrawHistogram(Color.Red, Color.Red, 100);
 
  if (CurrentIndex == MaxIndex)
  {
     var K = (MaxOI - MinOI) / (MaxDelta - MinDelta);
     for (int x = 0; x < Period; x++)
     DeltaOI[x] = (Input.OpenInterest[x] - (MinOI + MaxOI) * 0.5) / K;
  }
   
  DeltaOI.DrawHistogram(Color.Silver, Color.Silver, 50);   
}
никогда такого не было и вот опять

AgeSmith
Сообщения: 3
Зарегистрирован: 17 май 2018, 19:49

Re: Совместить два индикатора в одном окне

Непрочитанное сообщение AgeSmith » 18 май 2018, 17:33

Огромное спасибо за проделанную работу)))


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 18 гостей