Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Ленты Боллинджера Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
il-ir



Зарегистрирован: 28.05.2013
Сообщения: 189

СообщениеДобавлено: Вт Июн 25, 2019 10:38 am Ответить с цитатой Вернуться к началу

Надо в лентах Боллинджера определить период, когда ширина лент меньше минимальной на предыдущих 120 барах.

Вроде сделал, только оно раскрашивает сами ленты правильно, а область между лент закрашивает со сдвигом на бар вправо - см. файл BBSqueeze.png во вложении.

Снизу индикатор показывает расстояние между лентами, оранжевым выделен интересующий диапазон.

Сверху - ленты с раскраской того же диапазона.

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


Код индикатора Bollinger Bands:
Код:

_SECTION_BEGIN("Bollinger Bands Squeeze");
FieldBB = ParamField("Price field BB", 3);  //3 - returns Close array
PeriodsBB = Param("Periods BB", 20, 2, 300, 1);
WidthBB = Param("Width BB", 2, 0, 10, 0.05);
ColorBB = ParamColor("Color BB", colorLightGrey);
StyleBB = ParamStyle("Style BB");

FieldMA = ParamField("Price field MA", 3);  //3 - returns Close array
PeriodsMA = Param("Periods MA", 20, 2, 300, 1, 10);
ColorMA = ParamColor("Color MA", colorLightGrey);
StyleMA = ParamStyle("Style MA");

AreaColor = ColorBlend(ColorMA, GetChartBkColor(), 0.8);

BBTop = BBandTop(FieldBB, PeriodsBB, WidthBB);
BBBot = BBandBot(FieldBB, PeriodsBB, WidthBB);
BBMiddle = MA(FieldMA, PeriodsMA);


Band = Nz((BBTop - BBBot) / BBMiddle) * 100;
Squeeze = LLV(Band, 120) * 1.05;

cond = Band < Squeeze;

LevelLLV = 0;
for (bar = 1; bar < BarCount; bar++)
{
  if (cond[bar-1])
  {
    LevelLLV = Max(Squeeze[bar-1], LevelLLV);
  }
  cond[bar] = (cond[bar]) OR (Band[bar] < LevelLLV) ;
  if (NOT cond[bar])
  {
    LevelLLV = 0;
  }
}

AreaColor = IIf(cond, colorLightOrange, AreaColor);
ColorBB = IIf(cond, colorLightOrange, ColorBB);
ColorMA = IIf(cond, colorLightOrange, ColorMA);

//Рисуем BB
Plot(BBTop, "BBTop", ColorBB, StyleBB);
Plot(BBBot, "BBBot", ColorBB, StyleBB);
Plot(BBMiddle, "BBMiddle", ColorMA, StyleMA);
//Рисуем BB Area
PlotOHLC(BBTop, BBTop, BBBot, BBBot, "", AreaColor,
         styleNoLabel | styleCloud | styleNoRescale, Null, Null, Null, -1);

_SECTION_END();



Код индикатора, показывающего ширину лент:
Код:

Band = Nz((BBandTop( C, 20, 2 ) - BBandBot( C, 20, 2)) / MA(Close, 20 )) * 100;
Squeeze = LLV(Band, 120) * 1.05;

cond = Band < Squeeze;

LevelLLV = 0;
for (bar = 1; bar < BarCount; bar++)
{
  if (cond[bar-1])
  {
    LevelLLV = Max(Squeeze[bar-1], LevelLLV);
  }
  cond[bar] = (cond[bar]) OR (Band[bar] < LevelLLV) ;
  if (NOT cond[bar])
  {
    LevelLLV = 0;
  }
}

Plot(Band, "BandWidth", IIf(cond, colorLightOrange, colorGreen));



Спасибо за ответ(ы).
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Июн 25, 2019 12:14 pm Ответить с цитатой Вернуться к началу

Ну сдвинь.
Код:
PlotOHLC(BBTop, BBTop, BBBot, BBBot, "", Ref(AreaColor, 1)...

ХЗ почему Томаш так сделал.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
il-ir



Зарегистрирован: 28.05.2013
Сообщения: 189

СообщениеДобавлено: Вт Июн 25, 2019 1:46 pm Ответить с цитатой Вернуться к началу

Спасибо.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen