Уровни > LevelPivot (PIVOT Level)– уровни разворота

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

LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение evge » 07 фев 2016, 16:45

Уровни разворота – это возможные уровни поддержки и сопротивления для колебаний цен в текущем дне. Уровни строятся относительно Pivot Point (точки разворота), которая рассчитывается как среднее максимума, минимума и закрытия предыдущего дня.
Pivot = (High+Low+Close)/3

Сами уровни рассчитываются на основании максимума (high), минимума (low) и цены закрытия (close) предыдущего дня по следующим формулам:

R1 = 2Pivot – Low
S1 = 2Pivot – High
R2 = Pivot + (R1 - S1)
S2 = Pivot – (R1-S1)
R3 = High + 2*(Pivot - Low)
S3 = Low – 2*(High - Pivot)

Пример:

LevelPivot-00.png
LevelPivot-00.png (25.85 КБ) 46111 просмотров


Исходный текст:

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

function Initialize()
{
   IndicatorName = "LevelPivot";
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);
   AddParameter("TF", 100, 5);
   AddSeries("LevelPivot",  DrawAs.Line, Color.Gray);
// Global
  AddGlobalVariable("Min",  Types.Double, 0.0);
  AddGlobalVariable("Max",  Types.Double, 0.0);
  AddGlobalVariable("Hi",  Types.Double, 0.0);
  AddGlobalVariable("Lo",  Types.Double, 0.0);
  AddGlobalVariable("Cl",  Types.Double, 0.0);
// Уровни
  AddLevel(0, Color.LightGreen, LineStyles.DashBig, 1, "LevelPivot");

  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1,  "LevelPivot");
  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1, "LevelPivot");

  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// LevelPivot - уровни разворота для текущего (последнего) дня
if (CurrentIndex < 1)
{
     Cl = Input.Close[0];
     Hi = Input.High[0];
     Lo = Input.Low[0];
   Max = Input.High[0];
   Min = Input.Low[0];
}
else if (BarTime() == AsTime(10, 0, 0))
{
     Cl = Input.Close[-1];
     Hi = Max;
     Lo = Min;
   Max = Input.High[0];
   Min = Input.Low[0];
}
else
{
   if (Input.High[0] > Max )
      Max = Input.High[0];
   if (Input.Low[0] < Min )
      Min = Input.Low[0];
}

if (CurrentIndex == MaxIndex)
{
var Pivot = (Hi+Lo+Cl)/3;
Levels[0].Level = Pivot;
// Resistance
Levels[1].Level = Pivot * 2 - Lo;
Levels[2].Level = Pivot + Hi - Lo;
Levels[3].Level = Hi + 2*(Pivot-Lo);
// Support
Levels[4].Level = Pivot * 2 - Hi;
Levels[5].Level = Pivot - Hi + Lo;
Levels[6].Level = Lo - 2*(Hi-Pivot);
}
}
никогда такого не было и вот опять

MaxP
Сообщения: 1
Зарегистрирован: 10 мар 2017, 17:34

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение MaxP » 10 мар 2017, 17:39

Подскажите, пожалуйста, как он едет себя на фьючерсах?
Он берет данные прошлого дня или прошлой торговой сессии? Сравниваем этот же индикатор в QUIK и уровни разворота отличаются.

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

Re: LevelPivot (PIVOT Level)– уровни разворота

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

Для фьючерсов должно работать аналогично как и для акций.

берет данные прошлого дня с 10 до 23:50, дневная и вечерняя сессия входят в расчет (судя по коду).
Продолжительность торговой сессии на фондовом рынке с 09:30 до 19:00 мск,
на срочном, валютном, товарном рынках - с 10:00 до 23:50 мск

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

else if (BarTime() == AsTime(10, 0, 0))


код немного с ошибками. Здесь видно, что проверяется текущий бар как начало дня на 10:00:00,

НО при таймфрейме:

H3 - первый бар это 09:00:00,
H4 - 08:00:00
H6 - 06:00:00
H8 - 08:00:00
H12 - 00:00:00

условие лучше поменять на

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

else if (BarTime() <= AsTime(10, 0, 0))
никогда такого не было и вот опять

vlunev
Сообщения: 1
Зарегистрирован: 14 мар 2020, 09:22

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение vlunev » 14 мар 2020, 09:30

Скажите пожалуйста, а линии на графике обновляются в течении торговой сессии автоматом или нужно самому периодически новые формировать?

Ussault
Сообщения: 6
Зарегистрирован: 17 ноя 2020, 23:38

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение Ussault » 17 ноя 2020, 23:40

Подскажите, пожалуйста, что нужно поменять в коде для того, чтобы отображались цены уровней?

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

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение evge » 18 ноя 2020, 09:33

Добрый день!

Ussault писал(а):Подскажите, пожалуйста, что нужно поменять в коде для того, чтобы отображались цены уровней?


LevelPivot-01.png
LevelPivot-01.png (28.87 КБ) 37276 просмотров


Код с отображением цен уровней

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

function Initialize()
{
   IndicatorName = "LevelPivot";
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);
   AddParameter("TF", 100, 5);
   AddSeries("LevelPivot",  DrawAs.Line, Color.Gray);
// Global
  AddGlobalVariable("Min",  Types.Double, 0.0);
  AddGlobalVariable("Max",  Types.Double, 0.0);
  AddGlobalVariable("Hi",  Types.Double, 0.0);
  AddGlobalVariable("Lo",  Types.Double, 0.0);
  AddGlobalVariable("Cl",  Types.Double, 0.0);

// Серии для отображения цен
   AddSeries("L1",  DrawAs.Custom, Color.LightGreen);

   AddSeries("L2",  DrawAs.Custom, Color.LightGreen);
   AddSeries("L3",  DrawAs.Custom, Color.LightGreen);
   AddSeries("L4",  DrawAs.Custom, Color.LightGreen);

   AddSeries("L5",  DrawAs.Custom, Color.Coral);
   AddSeries("L6",  DrawAs.Custom, Color.Coral);
   AddSeries("L7",  DrawAs.Custom, Color.Coral);

// Уровни
  AddLevel(0, Color.LightGreen, LineStyles.DashBig, 1, "LevelPivot");

  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1,  "LevelPivot");
  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1, "LevelPivot");

  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// LevelPivot - уровни разворота для текущего (последнего) дня
if (CurrentIndex < 1)
{
     Cl = Input.Close[0];
     Hi = Input.High[0];
     Lo = Input.Low[0];
   Max = Input.High[0];
   Min = Input.Low[0];
}
else if (BarTime() == AsTime(10, 0, 0))
{
     Cl = Input.Close[-1];
     Hi = Max;
     Lo = Min;
   Max = Input.High[0];
   Min = Input.Low[0];
}
else
{
   if (Input.High[0] > Max )
      Max = Input.High[0];
   if (Input.Low[0] < Min )
      Min = Input.Low[0];
}

if (CurrentIndex == MaxIndex)
{
var Pivot = (Hi+Lo+Cl)/3;
Levels[0].Level = Pivot;
// Resistance
Levels[1].Level = Pivot * 2 - Lo;
Levels[2].Level = Pivot + Hi - Lo;
Levels[3].Level = Hi + 2*(Pivot-Lo);
// Support
Levels[4].Level = Pivot * 2 - Hi;
Levels[5].Level = Pivot - Hi + Lo;
Levels[6].Level = Lo - 2*(Hi-Pivot);

L1 = Levels[0].Level;
L2 = Levels[1].Level;
L3 = Levels[2].Level;
L4 = Levels[3].Level;
L5 = Levels[4].Level;
L6 = Levels[5].Level;
L7 = Levels[6].Level;
}
}


Скачать индикатор

LevelPivot.zip
(23.42 КБ) 1666 скачиваний
никогда такого не было и вот опять

Ussault
Сообщения: 6
Зарегистрирован: 17 ноя 2020, 23:38

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение Ussault » 18 ноя 2020, 17:42

Спасибо большое! Последний момент остался: толщину/смену пунктира на сплошную и цвет линий возможно как-то поменять?

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

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение evge » 19 ноя 2020, 09:02

С цветом возможно, остальное под вопросом. У стиля линии и уровня типы не совпадают DrawAs и LineStyles, а LineWidth не возвращает текущего значения, только первоначальное. При этом Color, например, возвращает текущее значение.

Пример с переносом цвета из параметров серий в цвета уровней :

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

function Initialize()
{
   IndicatorName = "LevelPivot";
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);
   AddParameter("TF", 100, 5);
   AddSeries("LevelPivot",  DrawAs.Line, Color.Gray);
// Global
  AddGlobalVariable("Min",  Types.Double, 0.0);
  AddGlobalVariable("Max",  Types.Double, 0.0);
  AddGlobalVariable("Hi",  Types.Double, 0.0);
  AddGlobalVariable("Lo",  Types.Double, 0.0);
  AddGlobalVariable("Cl",  Types.Double, 0.0);

// Серии для отображения цен
   AddSeries("L1",  DrawAs.Custom, Color.LightGreen);

   AddSeries("L2",  DrawAs.Custom, Color.LightGreen);
   AddSeries("L3",  DrawAs.Custom, Color.LightGreen);
   AddSeries("L4",  DrawAs.Custom, Color.LightGreen);

   AddSeries("L5",  DrawAs.Custom, Color.Coral);
   AddSeries("L6",  DrawAs.Custom, Color.Coral);
   AddSeries("L7",  DrawAs.Custom, Color.Coral);

// Уровни
  AddLevel(0, Color.LightGreen, LineStyles.DashBig, 1, "LevelPivot");

  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1,  "LevelPivot");
  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.LightGreen, LineStyles.Dot, 1, "LevelPivot");

  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
  AddLevel(0, Color.Coral, LineStyles.Dot, 1, "LevelPivot");
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// LevelPivot - уровни разворота для текущего (последнего) дня
if (CurrentIndex < 1)
{
     Cl = Input.Close[0];
     Hi = Input.High[0];
     Lo = Input.Low[0];
   Max = Input.High[0];
   Min = Input.Low[0];
}
else if (BarTime() == AsTime(10, 0, 0))
{
     Cl = Input.Close[-1];
     Hi = Max;
     Lo = Min;
   Max = Input.High[0];
   Min = Input.Low[0];
}
else
{
   if (Input.High[0] > Max )
      Max = Input.High[0];
   if (Input.Low[0] < Min )
      Min = Input.Low[0];
}

if (CurrentIndex == MaxIndex)
{
var Pivot = (Hi+Lo+Cl)/3;
Levels[0].Level = Pivot;
// Resistance
Levels[1].Level = Pivot * 2 - Lo;
Levels[2].Level = Pivot + Hi - Lo;
Levels[3].Level = Hi + 2*(Pivot-Lo);
// Support
Levels[4].Level = Pivot * 2 - Hi;
Levels[5].Level = Pivot - Hi + Lo;
Levels[6].Level = Lo - 2*(Hi-Pivot);

L1 = Levels[0].Level;
L2 = Levels[1].Level;
L3 = Levels[2].Level;
L4 = Levels[3].Level;
L5 = Levels[4].Level;
L6 = Levels[5].Level;
L7 = Levels[6].Level;

Levels[0].Color = L1.Color;
Levels[1].Color = L2.Color;
Levels[2].Color = L3.Color;
Levels[3].Color = L4.Color;
Levels[4].Color = L5.Color;
Levels[5].Color = L6.Color;
Levels[6].Color = L7.Color;

}
}
никогда такого не было и вот опять

Ussault
Сообщения: 6
Зарегистрирован: 17 ноя 2020, 23:38

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение Ussault » 02 мар 2021, 12:17

Добрый день! В связи с тем, что торги на срочной секции теперь начинаются с 7 утра, возможно ли как-то поменять значения индикатора, чтобы все корректно считалось?

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

Re: LevelPivot (PIVOT Level)– уровни разворота

Непрочитанное сообщение evge » 02 мар 2021, 13:26

Приветствую.

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

AsTime(10, 0, 0)

На

AsTime(7, 0, 0)
никогда такого не было и вот опять


Вернуться в «Уровни»

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

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